資源描述:
《windows api函數(shù)大全》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。
1、VCAPI常用函數(shù)簡單例子大全第一個(gè):FindWindow根據(jù)窗口類名或窗口標(biāo)題名來獲得窗口的句柄,該函數(shù)返回窗口的句柄函數(shù)的定義:HWND?WINAPI?FindWindow(LPCSTR?lpClassName?,LPCSTR?lpWindowName);第一個(gè)參數(shù)填窗口的類名,第二個(gè)填窗口的標(biāo)題名,其實(shí)是不需要同時(shí)填兩個(gè)參數(shù)的,也就是說,你只要知道窗口的類名或窗口的標(biāo)題就可以了,沒有的那個(gè)就用NULL代替。比如現(xiàn)在有一個(gè)窗口名為"無標(biāo)題.txt?-?記事本"的記事本程序。那么我就可以用上面的函數(shù)獲得這個(gè)窗口的句柄,那獲得了這個(gè)窗口的句柄我可以
2、干什么呢?作用可大了,因?yàn)楹芏嗖僮鞔翱诘暮瘮?shù),都需要窗口句柄作參數(shù),如移動(dòng)、改變窗口大小的MoveWindow函數(shù),在這里舉個(gè)例子,大家就更能體會(huì)到這個(gè)FindWindow的用法、用處。FindWindow例子:已知一個(gè)窗口名稱,寫一個(gè)程序關(guān)閉該窗口,假設(shè)當(dāng)前電腦正有一個(gè)窗口名為"無標(biāo)題.txt?-?記事本"的記事本程序運(yùn)行1#include//API函數(shù)的頭文件2intmain()3{4HWNDwnd;//定義一個(gè)窗口句柄變量,用以存儲找到的窗口句柄5wnd=FindWindow(NULL,"無標(biāo)題.txt-記事本");//
3、獲得窗口名為"無標(biāo)題.txt-記事本"的窗口句柄67SendMessage(wnd,WM_CLOSE,0,0);//調(diào)用SendMessage函數(shù),發(fā)送一個(gè)WM_CLOSE(關(guān)閉)消息給wnd窗口句柄。89return0;10}如果要根據(jù)窗口類名來獲得窗口句柄話,只要給函數(shù)的第一個(gè)參數(shù)填類名,第二個(gè)參數(shù)窗口名填NULL,即可,用Spy++可查看窗口類名。?第二個(gè):SendMessage根據(jù)窗口句柄發(fā)送一個(gè)消息給窗口函數(shù)定義:LRESULT?SendMessage(HWND?hWnd,UINT?Msg,WPARAM?wParam,LPARAM?IPa
4、ram);第一個(gè)參數(shù)是窗口句柄,第二參數(shù)個(gè)是消息類型,下面的消息表列舉了所有消息,第三,四個(gè)參數(shù)是消息附帶信息,解釋依賴于消息類型,比如一個(gè)字符消息(WM_CHAR),那么第三個(gè)參數(shù)就儲存有一個(gè)字符的ASCII碼。消息機(jī)制大家都應(yīng)該知道吧,Windows是基于消息的系統(tǒng),鼠標(biāo)移動(dòng)鍵盤按鍵都會(huì)產(chǎn)生消息。接下來舉一個(gè)例子,發(fā)送一個(gè)WM_CHAR消息給窗口,也就是模仿鍵盤按鍵,接收消息的窗口依舊以"無標(biāo)題.txt?-?記事本"為例:SendMessage例子:模仿鍵盤按鍵1#include23intmain()45{67HWNDwn
5、d;8wnd=FindWindow(NULL,"無標(biāo)題.txt-記事本");910while(1)1112{1314SendMessage(wnd,WM_CHAR,WPARAM('a'),0);1516Sleep(300);1718}1920return0;2122}呵呵上面的例子是不是沒用,這是為什么呢,哪里出錯(cuò)了嗎?錯(cuò)倒是沒有錯(cuò),只是窗口句柄有問題,消息發(fā)送給了主窗口。接收消息的窗口不對。記事本窗口界面有些有什么東西呢?菜單,編輯框,?狀態(tài)欄等控件,控件也是窗口,既然是窗口,那當(dāng)然它們也有窗口句柄,而在記事本里是在哪里打字的?編輯框控件里打字的
6、嘛!所以消息應(yīng)該發(fā)送編輯框控件,那如何獲得記事本里編輯框控件的窗口句柄呢?用FindWindow嗎?不知道編輯框窗口標(biāo)題名,類名也不知道,當(dāng)然也有其它方法獲取編輯框窗口標(biāo)題名和窗口類名,如Spy++。關(guān)于如何獲得編輯框句柄,將在以后的函數(shù)中會(huì)有介紹,這里我們就用WindowFromPoint這個(gè)函數(shù)來獲取,這個(gè)函數(shù)獲取窗口句柄的方法比較笨,(相對于我這個(gè)例子來說),這個(gè)函數(shù)是根據(jù)什么來獲取窗口句柄的呢?根據(jù)屏幕坐標(biāo)點(diǎn),如屏幕坐標(biāo)點(diǎn)20,20,當(dāng)前是哪個(gè)窗口占有,就返回哪個(gè)窗口的句柄。有了這個(gè)函數(shù),我們還需要一個(gè)函數(shù)GetCursorPos獲取鼠標(biāo)當(dāng)
7、前位置(針對于屏幕);可行的例子:模仿鍵盤按鍵:1#include23intmain()4{5POINTcurpos;//一個(gè)可儲存坐標(biāo)點(diǎn)的結(jié)構(gòu)體變量,x橫坐標(biāo),y,縱坐標(biāo),如curpos.xcurpos.y67while(1)8{9GetCursorPos(&curpos);//獲取當(dāng)前鼠標(biāo)的位置,位置將儲存在curpos里。10HWNDhWnd=WindowFromPoint(curpos);//根據(jù)curpos所指的坐標(biāo)點(diǎn)獲取窗口句柄11SendMessage(hWnd,WM_CHAR,WPARAM('g'),0);//
8、發(fā)送一個(gè)字符(按鍵)消息g給當(dāng)前鼠標(biāo)所指向的窗口句柄12Sleep(300);//睡眠三百毫秒,相當(dāng)于等待三分之一秒13}