取得螢幕的視窗句柄是什麼意思
了解什麼是句柄就好理解了
就是要得到這個視窗的識別碼
句柄就是用來區分各種記憶體物件的唯一識別符號,是個32位元整數。
有些是整個系統唯一(如視窗句柄),有些是目前進程或執行緒中唯一
(如執行緒句柄,全域的有另一個識別符)。
詳細的可分為許多種,都是以H開頭的。在VB中使用時全部都用Long。
常見的有視窗句柄(HWND),裝置描述表句柄(HDC),記憶體句柄(HMEM),
檔案句柄,進程句柄,線程句柄,筆的類型句柄(HPEN),字體句柄(HFONT),
區域句柄(HRGN)等等。
在申請句柄時是要佔用資源的,分成三類SYSTEM、USER、GDI。
而WINDOWS的資源是固定的,不隨記憶體的擴大而擴大,所以使用完以後一定要釋
放。
>
如果只用VB本身的程式碼一般是不會用到句柄的,但要是使用API函數的話,
大多數會使用。
再Windows系統中,句柄(我一直覺得這個字翻譯得特別彆扭)分成三大類:Kernel
Handle、UserHandle和應用程式自訂的Handle。
KernelHandle其實是進程內Kernel物件的指標表索引,Kernel物件包含進程、文字
件、訊號等。但是MS為了掩蓋一事實,在系統啟動時產生了一個所謂Obsfucator的值
(其實應該是Obfuscator,MicrosoftBugs(R):),產生Handle後將Handle與這個值異
或後返回給應用程序,所以看到的Handle都是一些很大而且毫無意義的數字。這些
Handle和索引的物件是由KRNL32.DLL和VMM32.VXD共同管理的,所以稱為Kernel
Handle。
UserHandle是用來標示視窗、DC等物件的,他們是真實的指針,但指向的不是物件
的開頭,有一個偏移量。同樣,這些物件是由USER32.DLL管理的。
第三種Handle不過是應用程式自訂的一些索引之類的東東,具體的意義和應用程式相關
如何取得控制台視窗句柄
1.呼叫 GetConsoleTitle() 來儲存目前的控制台視窗標題。
2.呼叫 SetConsoleTitle() 來將控制台標題變更為一個唯一的標題。
3.呼叫 Sleep(40),以確保已更新視窗標題。
4.呼叫 FindWindow(NULL, uniquetitle),以取得 HWND,此呼叫將傳回 HWND, 如果操作失敗,將傳回 NULL。
5.從步驟 1 中,若要恢復原始視窗標題檢索呼叫 SetConsoleTitle() 的值。
應該測試結果的 HWND。例如可以測試是否回傳的 HWND 對應到目前進程在 HWND 上呼叫 GetWindowText() 並將結果與 GetConsoleTitle() 進行比較。
範例程式碼
在下面的函數中檢索目前控制台應用程式視窗句柄 (HWND)。如果此函數成功,則傳回值是控制台視窗的句柄。如果此函數失敗,則傳回值為 NULL。省略一些錯誤檢查,為簡潔起見。
HWND GetConsoleHwnd(void)
{
#define MY_BUFSIZE 1024 // Buffer size for console window titles.
HWND hwndFound; // This is what is returned to the caller.
char pszNewWindowTitle[MY_BUFSIZE]; // Contains fabricated
// WindowTitle.
char pszOldWindowTitle[MY_BUFSIZE]; // Contains original
// WindowTitle.
// Fetch current window title.
GetConsoleTitle(pszOldWindowTitle, MY_BUFSIZE);
// Format a "unique" NewWindowTitle.
wsprintf(pszNewWindowTitle,"%d/%d",
GetTickCount(),
GetCurrentProcessId());
// Change current window title.
SetConsoleTitle(pszNewWindowTitle);
// Ensure window title has been updated.
Sleep(40);
// Look for NewWindowTitle.
hwndFound=FindWindow(NULL, pszNewWindowTitle);
// Restore original window title.
SetConsoleTitle(pszOldWindowTitle);
return(hwndFound);
}
50分如何取得桌面所有視窗的句柄
#include
#include
using namespace std;
//用於EnumWindows的回呼函數
BOOL CALLBACK EnumProc(HWND hwnd,LPARAM lparam)
{
vector
pvec->push_back(hwnd);
return TRUE;
}
void main()
{
vector
EnumWindows(EnumProc,(LPARAM)&vec);
}
這個是win32控制台程式專案裡寫的,如果要在MFC下的話,只要包含
#include
EnumProc定義在前面,按鈕回應函數裡加入main函數裡的那兩句話就可以了。
我這裡測試取得到了407個句柄
#以上是螢幕視窗句柄是指什麼?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

數據恢復始終是一個加熱的話題。要成功地從設備恢復數據,您應該知道它如何存儲數據。您可以從此PHP.CN帖子中學習RAID恢復和硬盤恢復之間的區別。

您會在打字時遇到單詞文字消失嗎?一些字母甚至段落可能會從您的文檔中消失。怎麼了?在PHP.CN網站的這篇文章中,我們將仔細研究自動刪除文本問題的單詞

當您嘗試登錄《守望先鋒》 2時,您可能會收到LC-208錯誤消息,並防止您的遊戲連接到遊戲服務器。來自PHP.CN的這篇文章介紹瞭如何修復LC-208守望先鋒錯誤。

通常,您可以從文件資源管理器快速訪問和編輯Google Drive文件。但是,有時您可能會遇到“ Google Drive從File Explorer中消失”的問題。在這裡,php.cn上的這篇文章告訴您如何讓Google Drive顯示我

為什麼我的計算機在歡迎屏幕上這麼長時間?如何修復Windows 7歡迎屏幕慢?如果您仍然在PC上運行Windows 7並遇到此問題,則您在正確的位置,並且將由PHP.CN提供多個解決方案。

是否要使用內置密碼管理工具 - 憑據管理器來管理Web和應用程序的登錄憑據?如何在Windows 11中打開憑據管理器?在這篇文章中,PHP.CN收集了多種訪問該實用程序的方法,並讓

Microsft Defender Antivirus具有稱為周期性掃描的功能,當您在Windows 11/10設備上安裝了另一個防病毒產品時,可以啟用該功能。現在,PHP.CN的這篇文章教您如何在WI上啟用/禁用定期掃描

您是否曾經遇到過“ Excel超鏈接不起作用”的問題?你知道如何處理嗎?在PHP.CN的這篇文章中,您可以獲得幾種可行的解決方案,以擺脫此問題。您將知道專業的數據恢復工具T


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

WebStorm Mac版
好用的JavaScript開發工具

記事本++7.3.1
好用且免費的程式碼編輯器

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能

SublimeText3漢化版
中文版,非常好用

VSCode Windows 64位元 下載
微軟推出的免費、功能強大的一款IDE編輯器