DWORD PID;
成都創(chuàng)新互聯(lián)公司是一家專(zhuān)業(yè)提供寶安企業(yè)網(wǎng)站建設(shè),專(zhuān)注與做網(wǎng)站、網(wǎng)站制作、H5頁(yè)面制作、小程序制作等業(yè)務(wù)。10年已為寶安眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專(zhuān)業(yè)網(wǎng)絡(luò)公司優(yōu)惠進(jìn)行中。
PID = GetProcessPID(L"test.exe");
//獲取進(jìn)程pid函數(shù)
DWORD GetProcessPID(LPCTSTR pName)
{
HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if (INVALID_HANDLE_VALUE == hSnapshot) {
return NULL;
}
PROCESSENTRY32 pe = { sizeof(pe) };
BOOL fOk;
for (fOk = Process32First(hSnapshot, pe); fOk; fOk = Process32Next(hSnapshot, pe)){
if (!_tcsicmp(pe.szExeFile, pName)) {
CloseHandle(hSnapshot);
return pe.th32ProcessID;
}
}
return NULL;
}
//由進(jìn)程pid獲取進(jìn)程句柄,置頂
HWND hh = GetProcessTopWindows(PID);
HWND GetProcessTopWindows(DWORD dwPID){
count = 0;
EnumWindows((WNDENUMPROC)EnumWndProc, (LPARAM)dwPID);
if(count 0) {
//cout "窗口句柄是:" nhWnd[count -1] endl;//輸出句柄,可用spy++工具核對(duì)
return (nhWnd[count -1]);
}
return NULL;
}
別忘了添加對(duì)應(yīng)頭文件。
句柄就是一種資源的序號(hào),一般是個(gè)無(wú)符號(hào)整數(shù)而已,比如文件句柄,就是系統(tǒng)提供一組可以打開(kāi)文件的數(shù)據(jù)結(jié)構(gòu)(實(shí)際上是結(jié)構(gòu)數(shù)組),句柄就是數(shù)組下標(biāo)。
所謂輸出句柄,你可以將句柄當(dāng)作函數(shù)調(diào)用的返回值,或者打印出來(lái)看也不是不可以。
所謂句柄實(shí)際上是一個(gè)數(shù)據(jù),是一個(gè)Long (整長(zhǎng)型)的數(shù)據(jù)。
句柄是WONDOWS用來(lái)標(biāo)識(shí)被應(yīng)用程序所建立或使用的對(duì)象的唯一整數(shù),WINDOWS使用各種各樣的句柄標(biāo)識(shí)諸如應(yīng)用程序?qū)嵗?,窗口,控制,位圖,GDI對(duì)象等等。WINDOWS句柄有點(diǎn)象C語(yǔ)言中的文件句柄。
從上面的定義中的我們可以看到,句柄是一個(gè)標(biāo)識(shí)符,是拿來(lái)標(biāo)識(shí)對(duì)象或者項(xiàng)目的,它就象我們的姓名一樣,每個(gè)人都會(huì)有一個(gè),不同的人的姓名不一樣,但是,也可能有一個(gè)名字和你一樣的人。從數(shù)據(jù)類(lèi)型上來(lái)看它只是一個(gè)16位的無(wú)符號(hào)整數(shù)。應(yīng)用程序幾乎總是通過(guò)調(diào)用一個(gè)WINDOWS函數(shù)來(lái)獲得一個(gè)句柄,之后其他的WINDOWS函數(shù)就可以使用該句柄,以引用相應(yīng)的對(duì)象。
如果想更透徹一點(diǎn)地認(rèn)識(shí)句柄,我可以告訴大家,句柄是一種指向指針的指針。我們知道,所謂指針是一種內(nèi)存地址。應(yīng)用程序啟動(dòng)后,組成這個(gè)程序的各對(duì)象是住留在內(nèi)存的。如果簡(jiǎn)單地理解,似乎我們只要獲知這個(gè)內(nèi)存的首地址,那么就可以隨時(shí)用這個(gè)地址訪問(wèn)對(duì)象。但是,如果您真的這樣認(rèn)為,那么您就大錯(cuò)特錯(cuò)了。我們知道,Windows是一個(gè)以虛擬內(nèi)存為基礎(chǔ)的操作系統(tǒng)。在這種系統(tǒng)環(huán)境下,Windows內(nèi)存管理器經(jīng)常在內(nèi)存中來(lái)回移動(dòng)對(duì)象,依此來(lái)滿足各種應(yīng)用程序的內(nèi)存需要。對(duì)象被移動(dòng)意味著它的地址變化了。如果地址總是如此變化,我們?cè)摰侥睦锶フ以搶?duì)象呢?
為了解決這個(gè)問(wèn)題,Windows操作系統(tǒng)為各應(yīng)用程序騰出一些內(nèi)存儲(chǔ)地址,用來(lái)專(zhuān)門(mén)登記各應(yīng)用對(duì)象在內(nèi)存中的地址變化,而這個(gè)地址(存儲(chǔ)單元的位置)本身是不變的。Windows內(nèi)存管理器在移動(dòng)對(duì)象在內(nèi)存中的位置后,把對(duì)象新的地址告知這個(gè)句柄地址來(lái)保存。這樣我們只需記住這個(gè)句柄地址就可以間接地知道對(duì)象具體在內(nèi)存中的哪個(gè)位置。這個(gè)地址是在對(duì)象裝載(Load)時(shí)由系統(tǒng)分配給的,當(dāng)系統(tǒng)卸載時(shí)(Unload)又釋放給系統(tǒng)。
句柄地址(穩(wěn)定)→記載著對(duì)象在內(nèi)存中的地址————→對(duì)象在內(nèi)存中的地址(不穩(wěn)定)→實(shí)際對(duì)象
本質(zhì):WINDOWS程序中并不是用物理地址來(lái)標(biāo)識(shí)一個(gè)內(nèi)存塊,文件,任務(wù)或動(dòng)態(tài)裝入模塊的,相反的,WINDOWS API給這些項(xiàng)目分配確定的句柄,并將句柄返回給應(yīng)用程序,然后通過(guò)句柄來(lái)進(jìn)行操作。
但是必須注意的是程序每次從新啟動(dòng),系統(tǒng)不能保證分配給這個(gè)程序的句柄還是原來(lái)的那個(gè)句柄,而且絕大多數(shù)情況的確不一樣的。假如我們把進(jìn)入電影院看電影看成是一個(gè)應(yīng)用程序的啟動(dòng)運(yùn)行,那么系統(tǒng)給應(yīng)用程序分配的句柄總是不一樣,這和每次電影院售給我們的門(mén)票總是不同的一個(gè)座位是一樣的道理。
除了各種API函數(shù)之外,句柄(HANDLE)沒(méi)有使用必要。
當(dāng)一個(gè)函數(shù)要求句柄作為參數(shù)時(shí),如果不是強(qiáng)調(diào)屬性的函數(shù),傳遞一個(gè)NULL就行了。
否則以WinMain作為主函數(shù),將主調(diào)函數(shù)的基礎(chǔ)參數(shù)hInstance作為句柄傳入。
網(wǎng)頁(yè)標(biāo)題:c語(yǔ)言句柄函數(shù) c語(yǔ)言中的句柄是什么意思
轉(zhuǎn)載來(lái)于:http://jinyejixie.com/article28/ddogjcp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供靜態(tài)網(wǎng)站、全網(wǎng)營(yíng)銷(xiāo)推廣、品牌網(wǎng)站建設(shè)、定制開(kāi)發(fā)、App開(kāi)發(fā)、響應(yīng)式網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
營(yíng)銷(xiāo)型網(wǎng)站建設(shè)知識(shí)