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