天天看點

一些技巧(1)

1.添加變量方法

在需要添加變量的控件上右擊滑鼠,類别選擇value,即可

2.實作拖放使用函數

//UINT DragQueryFile(HDROP hDrop,UINT iFile,LPTSTR lpszFile,UINT cch);

//hDrop是指向拖動檔案結構的句柄

//iFile是以0開始的被拖動檔案的序号,因為一次可能拖動多個檔案。當此參數設定為0xFFFFFFFF,則函數傳回拖動檔案的數量

//lpszFile是指向檔案名的緩沖區

//cch是檔案名緩沖區的大小,即檔案名的位元組數

3.逾時錯誤處理

FD_SET fd={1,m_hSocket};

TIMEVAL tv={nSecs,0};

if(Select(0,NULL,&fd,NULL,&tv)==0)

{

//逾時錯誤處理

}

4.添加自定義的消息

//使用消息常量WM_USER加上一個正整數

#define WM_MYMESSAGE WM_USER+1

//在.cpp檔案中消息映射的語句

BEGIN_MESSAGE_MAP(CMyWnd,CMyParentWndClass)

 ON_MESSAGE(WM_MYMESSAGE,OnMyMessage)

END_MESSAGE_MAP()

//然後在.h頭檔案中加入消息映射函數的原型聲明如下

afx_msg LRESULT OnMyMessage(WPARAM,LPARAM);

=====================================================

        HC=::GetWindow(hCurWindow,GW_CHILD);//清單框

        EDIT_1=::GetWindow(HC,GW_HWNDNEXT);//編輯框

        EDIT_2=::GetNextWindow(EDIT_1,GW_HWNDNEXT);

        EDIT_3=::GetNextWindow(EDIT_2,GW_HWNDNEXT);//同胞視窗

        EDIT_4=::GetNextWindow(EDIT_3,GW_HWNDNEXT);//同胞視窗

        EDIT_5=::GetNextWindow(EDIT_4,GW_HWNDNEXT);//同胞視窗

============================

         CStdioFile f1;

         testrs rs1;

    CString filename, value1;

    filename = "E://tt.txt";

    rs1.Open(CRecordset::snapshot,"select * from table1");

       if(f1.Open(filename,CFile::modeCreate|CFile::modeNoTruncate|CFile::modeWrite))

    {

       while( !rs1.IsEOF() )

       {

           rs1.GetFieldValue("mobile",value1);

           f1.WriteString(value1+"/n");

           rs1.MoveNext();

       }

    }

    else MessageBox("File initializtion error","information",MB_OK);

    rs1.Close;

    f1.Close;

===================================================

使用記憶體檔案

CMemFile MyFile;

MyFile.Open("/temp.txt",CFile::modeCreate|CFile::modeWrite);

MyFile.Attach(pAttach,dwFileLength);

螢幕保護和能源保護功能的關閉與開啟

1.關閉螢幕保護

SystemParametersInfo(SPI_SETSCREENSAVEACTIVE,FALSE,0,SPIF_SENDWININICHANGE);

2.關閉能源保護

SystemParametersInfo(SPI_SETLOWPOWERACTIVE,FALSE,0,SPIF_SENDWININICHANGE);

SystemParametersInfo(SPI_SETPOWEROFFACTIVE,FALSE,0,SPIF_SENDWININICHANGE);

3.打開

将上面中的FALSE改為TRUE即可

用預設程式打開mp3檔案

ShellExecute(0,"open","a.mp3",NULL,NULL,0);

關機 登出

BOOL ExitWindow***(

     UINT uFlags//關機方式

    ,DWORD dwReservde//保留(直接寫0即可)

    };

參數uFlags指定關機方式

EWX_LOGOFF      //終止所有程序,然後登出

EWX_POWEROFF    //關閉系統切斷電源。但調用該函數的程序必須要有SE_SHUTDOWN_NAME特權

EWX_REBOOT      //關閉系統并重新啟動。必須有SE_SHUTDOWN_NAME特權

EWX_SHUTDOWN    //關閉系統到并提示使用者可以安全關機,檔案緩沖區内容儲存到磁盤,所有程序終止。必須有SE_SHUTDOWN_NAME特權

EWX_FORCE       //強制程序終止,而且系統不會發WM——QUERYENDSESSION和WM_ENDSESSION消息,這種方式會使應用程式丢失資料,應慎重使用

參數dwReservde是保留字,可以随意設定成一個數,比如1

注:

1.Windows 2000下,必須調用AdjustTokenPrivileges函數來使用SE_SHUTDOWN_NAME特權。

2.GetTokenInformation()該函數能顯示那些特權是可用的,大部分特權是禁止的

3.在進行特權操作前,必須在存權令牌内使能必要的特權。可先調用OpenThreadToken函數得到存取令牌句柄,然後調用AdjustTokenPrivileges函數來使用該特權。在進行響應的操作之後,再調用一次AdjustTokenPrivileges函數來禁止一個标志的特權。

4.為了擷取對應某個字元串的目前LUID,要調用LookupPrivilegeValue函數,函數LookupPrivilegeName把一個LUID值轉換為相應的字元串常量。

5.特權是以字元串形式定義在WinNt.h中。當需要顯示某個使用者的某個特權描述時,可以使用函數LookupPrivilegeDisplayName來獲得描述字元串。

連接配接遠端計算機的系統資料庫

MachineName="////"+MachineName;

LPTSTR p=MachineName.GetBuffer(MachineName.GetLength());

LONG lRet=::RegConnectRegistry(p,HKEY_PERFORMANCE_DATA,&key);

==========================================================

讓應用程式從IE中擷取鍵入的網址 

HWND hwnd=::FindWindow(_T("IEFrame"),NULL);

if(hwnd)

    HWND hwnd2=::FindWindowEx(hwnd,NULL,_T("Edit"),NULL);

   char sz[255];

  ::SendMessage(hwnd2,WM_GETTEXT,255,(LPARAM)sz);

  AfxMessageBox(sz);

結果發現不能得到正确的結果,從SPY上看,類名也全部是正确的,為什麼不能得到正确的結果呢?看了他的代碼後,我進行了如下改動,就可以得到正确的結果了:

 if(hwnd)

 {

  HWND hwnd2=::FindWindowEx(hwnd,NULL,_T("WorkerW"),NULL);

  HWND hwnd3=::FindWindowEx(hwnd2,NULL,_T("ReBarWindow32"),NULL);

  HWND hwnd4=::FindWindowEx(hwnd3,NULL,_T("ComboBoxEx32"),NULL);

  HWND hwnd5=::FindWindowEx(hwnd4,NULL,_T("ComboBox"),NULL);

  HWND hwnd6=::FindWindowEx(hwnd5,NULL,_T("Edit"),NULL);

  ::SendMessage(hwnd6,WM_GETTEXT,255,(LPARAM)sz);

 }

  以上的代碼不用我解釋了吧,這個問題不是什麼大問題,難度也不大,但是可能會讓初學者不明白為什麼得不到程式某一控件的HANDLE,其實對VC來說,沒有什麼辦不到的事情,隻是需要你仔細的分析一下而已  

網絡程式設計

繼續閱讀