(笔记)涉及到的WinAPI函数
生活随笔
收集整理的這篇文章主要介紹了
(笔记)涉及到的WinAPI函数
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
WSAStartup
即WSA(Windows Sockets Asynchronous,Windows異步套接字)的啟動(dòng)命令。是Windows下的網(wǎng)絡(luò)編程接口軟件Winsock1 或 Winsock2 里面的一個(gè)命令(Ps:Winsock 是由Unix下的BSD Socket發(fā)展而來,是一個(gè)與網(wǎng)絡(luò)協(xié)議無關(guān)的編程接口)。
WSAStartup必須是應(yīng)用程序或DLL調(diào)用的第一個(gè)Windows Sockets函數(shù)。它允許應(yīng)用程序或DLL指明Windows Sockets API的版本號(hào)及獲得特定Windows Sockets實(shí)現(xiàn)的細(xì)節(jié)。應(yīng)用程序或DLL只能在一次成功的WSAStartup()調(diào)用之后才能調(diào)用進(jìn)一步的Windows Sockets API函數(shù)。
int WSAStartup( WORD wVersionRequested, LPWSADATA lpWSAData); 為了在應(yīng)用程序當(dāng)中調(diào)用任何一個(gè)Winsock AP函數(shù),首先第一件事情就是必須通過WSAStartup函數(shù)完成對(duì)Winsock服務(wù)的初始化,因此需要調(diào)用WSAStartup函數(shù)。使用Socket的程序在使用Socket之前必須調(diào)用WSAStartup函數(shù)。該函數(shù)的第一個(gè)參數(shù)指明程序請(qǐng)求使用的Socket版本,其中高位字節(jié)指明副版本、低位字節(jié)指明主版本;操作系統(tǒng)利用第二個(gè)參數(shù)返回請(qǐng)求的Socket的版本信息。當(dāng)一個(gè)應(yīng)用程序調(diào)用WSAStartup函數(shù)時(shí),操作系統(tǒng)根據(jù)請(qǐng)求的Socket版本來搜索相應(yīng)的Socket庫,然后綁定找到的Socket庫到該應(yīng)用程序中。以后應(yīng)用程序就可以調(diào)用所請(qǐng)求的Socket庫中的其它Socket函數(shù)了。
⑴ wVersionRequested:一個(gè)WORD(雙字節(jié))型數(shù)值,在最高版本的Windows Sockets支持調(diào)用者使用,高階字節(jié)指定小版本(修訂本)號(hào),低位字節(jié)指定主版本號(hào)。 ⑵lpWSAData 指向WSADATA數(shù)據(jù)結(jié)構(gòu)的指針,用來接收Windows Sockets實(shí)現(xiàn)的細(xì)節(jié)。 WindowsSockets API提供的調(diào)用方可使用的最高版本號(hào)。高位字節(jié)指出副版本(修正)號(hào),低位字節(jié)指明主版本號(hào)。 返回值: 0 成功。 否則返回下列的錯(cuò)誤代碼之一。注意通常依靠應(yīng)用程序調(diào)用WSAGetLastError()機(jī)制獲得的錯(cuò)誤代碼是不能使用的,因?yàn)閃indows Sockets DLL可能沒有建立“上一錯(cuò)誤”信息儲(chǔ)存的客戶數(shù)據(jù)區(qū)域。 GetModuleFileNameA
檢索包含指定模塊的文件的絕對(duì)路徑。模塊必須由當(dāng)前進(jìn)程加載。
如果第一個(gè)參數(shù)為NULL,返回當(dāng)前進(jìn)程的可執(zhí)行文件的路徑。
例子: strrchr(FilePath,'\\')[1]=0 從FilePath的右邊開始查找"\"這個(gè)字符,?然后把這個(gè)字符的下一個(gè)字符設(shè)為0,即空字符.因?yàn)閟tttchr會(huì)返回一個(gè)字符指針,它代表FilePath中從"\"開始的字符串.
上面的代碼相當(dāng)于?char?*?p?=?strrchr(FilePath,'\\');?p[1]?=?0;?FilePath中就只剩下路徑,而沒有文件名了.
如“D:\1.exe”;
(strrchr(FilePath,'\\'))是查找'\\'即斜桿最后一次出現(xiàn)的位置指針,即“D:\1.exe”中斜桿的位置的指針。
(strrchr(FilePath,'\\'))[1]=0;是將斜桿后面的一個(gè)字符作為字符串結(jié)束符。即此時(shí)FilePath變?yōu)椤癉:\”。
最后再加上filname,如“2.exe”,最后FileName變?yōu)椤癉:\2.exe”。
WNDCLASS
結(jié)構(gòu)WNDCLASS包含一個(gè)窗口類的全部信息,也是Windows編程中使用的基本數(shù)據(jù)結(jié)構(gòu)之一,應(yīng)用程序通過定義一個(gè)窗口類確定窗口的屬性。
WNDCLASS是一個(gè)由系統(tǒng)支持的結(jié)構(gòu),用來儲(chǔ)存某一類窗口的信息,如ClassStyle,消息處理函數(shù),Icon,Cursor,背景Brush等。也就是說,CreateWindow只是將某個(gè)WNDCLASS定義的窗體變成實(shí)例。 要得到某一窗口的WNDCLASS數(shù)據(jù),可以用GetClassLong(); RegisterClass()就是在系統(tǒng)注冊(cè)某一類型的窗體。也就是將你提供的WNDCLASS數(shù)據(jù)注冊(cè)為一個(gè)窗口類,在WNDCLASS.lpszClassName中定義該WNDCLASS的標(biāo)識(shí), 無論CreateWindow或CreateWindowEx創(chuàng)建的窗口都必須對(duì)應(yīng)一個(gè)WNDCLASS,但一個(gè)WNDCLASS可以有多個(gè)窗口對(duì)象。 有一些系統(tǒng)預(yù)定義的窗口類,如: ClassName=_T("BUTTON" or "COMBOBOX" or "EDIT" or "LISTBOX" or "MDICLIENT" or "SCROLLBAR" or "STATIC") 要用這些窗體,直接用CreateWindow創(chuàng)建相應(yīng)對(duì)象就是了。 要得到某一窗口的窗口類,可以用GetClassName(); WNDCLASS中的回調(diào)函數(shù)是窗體的消息處理函數(shù): LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) typedef struct _WNDCLASS { UINT style;// 窗口類型 WNDPROC lpfnWndProc;//窗口處理函數(shù) int cbClsExtra;//窗口擴(kuò)展 int cbWndExtra;//窗口實(shí)例擴(kuò)展 HINSTANCE hInstance;//實(shí)例句柄 HICON hIcon;//窗口的最小化圖標(biāo) HCURSOR hCursor;//窗口鼠標(biāo)光標(biāo) HBRUSH hbrBackground;//窗口背景色 LPCTSTR lpszMenuName;//窗口菜單 LPCTSTR lpszClassName;// 窗口類名 } WNDCLASS, *LPWNDCLASS;
HINSTANCE
程序使用HINSTANCE來區(qū)別task。 Handle 是代表系統(tǒng)的內(nèi)核對(duì)象,如文件句柄,線程句柄,進(jìn)程句柄。 HMODULE 是代表應(yīng)用程序載入的模塊,win32系統(tǒng)下通常是被載入模塊的線性地址。 HINSTANCE 在win32下與HMODULE是相同的東西,在Win32下還存在主要是因?yàn)閣in16。 HWND 是窗口句柄。 GetModuleHandle
GetModuleHandle是獲取一個(gè)應(yīng)用程序或動(dòng)態(tài)鏈接庫的模塊句柄。
HMODULEGetModuleHandle(LPCTSTRlpModuleName); 函數(shù)的作用是返回指定模塊名的句柄,如果為NULL,則返回本模塊的句柄。 返回的句柄值存放在寄存器eax中。 ZeroMemory
void ZeroMemory( PVOID Destination,SIZE_T Length ); Destination :指向一塊準(zhǔn)備用0來填充的內(nèi)存區(qū)域的開始地址。 Length :準(zhǔn)備用0來填充的內(nèi)存區(qū)域的大小,按字節(jié)來計(jì)算。
⑴ wVersionRequested:一個(gè)WORD(雙字節(jié))型數(shù)值,在最高版本的Windows Sockets支持調(diào)用者使用,高階字節(jié)指定小版本(修訂本)號(hào),低位字節(jié)指定主版本號(hào)。 ⑵lpWSAData 指向WSADATA數(shù)據(jù)結(jié)構(gòu)的指針,用來接收Windows Sockets實(shí)現(xiàn)的細(xì)節(jié)。 WindowsSockets API提供的調(diào)用方可使用的最高版本號(hào)。高位字節(jié)指出副版本(修正)號(hào),低位字節(jié)指明主版本號(hào)。 返回值: 0 成功。 否則返回下列的錯(cuò)誤代碼之一。注意通常依靠應(yīng)用程序調(diào)用WSAGetLastError()機(jī)制獲得的錯(cuò)誤代碼是不能使用的,因?yàn)閃indows Sockets DLL可能沒有建立“上一錯(cuò)誤”信息儲(chǔ)存的客戶數(shù)據(jù)區(qū)域。 GetModuleFileNameA
檢索包含指定模塊的文件的絕對(duì)路徑。模塊必須由當(dāng)前進(jìn)程加載。
如果第一個(gè)參數(shù)為NULL,返回當(dāng)前進(jìn)程的可執(zhí)行文件的路徑。
strrchr()
? 查找一個(gè)字符串在另一個(gè)字符串中 末次 出現(xiàn)的位置,并返回從字符串中的這個(gè)位置起,一直到字符串結(jié)束的所有字符;如果未能找到指定字符,那么函數(shù)將返回False。例子: strrchr(FilePath,'\\')[1]=0 從FilePath的右邊開始查找"\"這個(gè)字符,?然后把這個(gè)字符的下一個(gè)字符設(shè)為0,即空字符.因?yàn)閟tttchr會(huì)返回一個(gè)字符指針,它代表FilePath中從"\"開始的字符串.
上面的代碼相當(dāng)于?char?*?p?=?strrchr(FilePath,'\\');?p[1]?=?0;?FilePath中就只剩下路徑,而沒有文件名了.
如“D:\1.exe”;
(strrchr(FilePath,'\\'))是查找'\\'即斜桿最后一次出現(xiàn)的位置指針,即“D:\1.exe”中斜桿的位置的指針。
(strrchr(FilePath,'\\'))[1]=0;是將斜桿后面的一個(gè)字符作為字符串結(jié)束符。即此時(shí)FilePath變?yōu)椤癉:\”。
最后再加上filname,如“2.exe”,最后FileName變?yōu)椤癉:\2.exe”。
WNDCLASS
結(jié)構(gòu)WNDCLASS包含一個(gè)窗口類的全部信息,也是Windows編程中使用的基本數(shù)據(jù)結(jié)構(gòu)之一,應(yīng)用程序通過定義一個(gè)窗口類確定窗口的屬性。
WNDCLASS是一個(gè)由系統(tǒng)支持的結(jié)構(gòu),用來儲(chǔ)存某一類窗口的信息,如ClassStyle,消息處理函數(shù),Icon,Cursor,背景Brush等。也就是說,CreateWindow只是將某個(gè)WNDCLASS定義的窗體變成實(shí)例。 要得到某一窗口的WNDCLASS數(shù)據(jù),可以用GetClassLong(); RegisterClass()就是在系統(tǒng)注冊(cè)某一類型的窗體。也就是將你提供的WNDCLASS數(shù)據(jù)注冊(cè)為一個(gè)窗口類,在WNDCLASS.lpszClassName中定義該WNDCLASS的標(biāo)識(shí), 無論CreateWindow或CreateWindowEx創(chuàng)建的窗口都必須對(duì)應(yīng)一個(gè)WNDCLASS,但一個(gè)WNDCLASS可以有多個(gè)窗口對(duì)象。 有一些系統(tǒng)預(yù)定義的窗口類,如: ClassName=_T("BUTTON" or "COMBOBOX" or "EDIT" or "LISTBOX" or "MDICLIENT" or "SCROLLBAR" or "STATIC") 要用這些窗體,直接用CreateWindow創(chuàng)建相應(yīng)對(duì)象就是了。 要得到某一窗口的窗口類,可以用GetClassName(); WNDCLASS中的回調(diào)函數(shù)是窗體的消息處理函數(shù): LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) typedef struct _WNDCLASS { UINT style;// 窗口類型 WNDPROC lpfnWndProc;//窗口處理函數(shù) int cbClsExtra;//窗口擴(kuò)展 int cbWndExtra;//窗口實(shí)例擴(kuò)展 HINSTANCE hInstance;//實(shí)例句柄 HICON hIcon;//窗口的最小化圖標(biāo) HCURSOR hCursor;//窗口鼠標(biāo)光標(biāo) HBRUSH hbrBackground;//窗口背景色 LPCTSTR lpszMenuName;//窗口菜單 LPCTSTR lpszClassName;// 窗口類名 } WNDCLASS, *LPWNDCLASS;
HINSTANCE
程序使用HINSTANCE來區(qū)別task。 Handle 是代表系統(tǒng)的內(nèi)核對(duì)象,如文件句柄,線程句柄,進(jìn)程句柄。 HMODULE 是代表應(yīng)用程序載入的模塊,win32系統(tǒng)下通常是被載入模塊的線性地址。 HINSTANCE 在win32下與HMODULE是相同的東西,在Win32下還存在主要是因?yàn)閣in16。 HWND 是窗口句柄。 GetModuleHandle
GetModuleHandle是獲取一個(gè)應(yīng)用程序或動(dòng)態(tài)鏈接庫的模塊句柄。
HMODULEGetModuleHandle(LPCTSTRlpModuleName); 函數(shù)的作用是返回指定模塊名的句柄,如果為NULL,則返回本模塊的句柄。 返回的句柄值存放在寄存器eax中。 ZeroMemory
void ZeroMemory( PVOID Destination,SIZE_T Length ); Destination :指向一塊準(zhǔn)備用0來填充的內(nèi)存區(qū)域的開始地址。 Length :準(zhǔn)備用0來填充的內(nèi)存區(qū)域的大小,按字節(jié)來計(jì)算。
作用:
ZeroMemory只是將指定的內(nèi)存塊清零。 使用結(jié)構(gòu)前清零,而不讓結(jié)構(gòu)的成員數(shù)值具有不確定性,是一個(gè)好的編程習(xí)慣。總結(jié)
以上是生活随笔為你收集整理的(笔记)涉及到的WinAPI函数的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 备份容灾技术基础
- 下一篇: 数学建模:层次分析法实例以及代码