日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

窗口句柄浅析和获取窗口句柄的方法

發布時間:2024/8/1 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 窗口句柄浅析和获取窗口句柄的方法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

句柄(HANDLE)是Windows程序中一個重要的概念,使用也非常頻繁。在Windows程序中,有各種各樣的資源(窗口、圖標、光標等),系統在創建這些資源時會為它們分配內存,并返回標識這些資源的標識號,即句柄。

窗口句柄是windows句柄的一種,且是重要的一種句柄。在Windows應用程序中,窗口是通過窗口句柄(HWND)來標識的。我們要對某個窗口進行操作,首先就要得到這個窗口的句柄。

窗口句柄的概念比較抽象,簡單說窗口句柄就是一個窗口(window)的代表。我們通過幾個例子來認識它。

1.LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);

windows窗口處理函數,windows消息機制說的是,每當某個窗口發生變化(比如改變大小,移動),windows系統都會發相應的消息(wm_size,wm_move)給這個窗口。即調用函數 SendMessage(HWND hWnd,UINT Msg,WPARAM wParam,LPARAM lParam);注意這里WndProc和SendMessage的第一個參數都是HWND,窗口句柄代表這個窗口。

2. hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,

????? CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);

這里說的是窗口句柄的產生,可以把hWnd想象成指針,CreateWindow想象成c++里的new,創建一個window,系統要為這個window對象分配一些資源,可以想象,window是由一個大的結構構成的。同時窗口句柄用來標識這個窗口。

3.有個窗口的句柄,則你就可以操控這個窗口的一切。

大量管理window的win32 api都是以hwnd做為參數。下面列舉一些:

BringWindowToTop

FindWindowEx

GetParent

SetWindowPos

GetWindowRect

等等。

4.不僅窗口,窗口上的控件,象按鈕,編輯框等也有窗口句柄,因為它們也是一種特殊的窗口,上面操作窗口的api大部分對這些控件窗口也適用。

獲取句柄的方法:

這篇文章是關于如何獲取窗口句柄,以及有哪些函數可供使用的簡單討論!可適用于vc、bcb(其他的我沒有試,估計可以),本人在bcb環境下試驗。

首先我會羅列出一些獲取句柄的win32 api 函數,然后簡單說說他們的用途!最后說說我是怎么理解和應用的。見笑了!

可用的win32 api函數:

1.HWND FindWindow(LPCTSTR lpClassName, LPCTSTR lpWindowName)

?? HWND FindWindowEx(HWND hwndParent, HWND hwndChildAfter,LPCTSTR lpClassName, LPCTSTR lpWindowName)

2.HWND WindowFromPoint(POINT& Point)

3.BOOL CALLBACK EnumChildProc(HWND hwnd,LPARAM lParam)

?? BOOL CALLBACK EnumChildWindows(HWND hWndParent, WNDENUMPROC lpEnumFunc,LPARAM lParam)

?? BOOL CALLBACK EnumWindows(WNDENUMPROC lpEnumFunc, LPARAM lParam)

?? BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lParam)

一般用途:

?????? 對于第一種,大家都很熟悉,是捕捉句柄的常規武器,FindWindow這兩兄弟,可以接受捕捉對象的類名或者窗口標題之一,作為參數,返回一個HWND??墒菍τ谝话闳罕?#xff0c;不一定知道所有的窗口(包括標題欄、按鈕等等)的類名啊!--可以簡單舉例,請問你知道桌面圖標的窗口的類名嗎?而對于窗口標題,有可能會出現相同的標題,有兩個窗口--指一個程序的兩個進程,這又是個麻煩吧!好了,這個問題先放放,繼續下一組。

?????? 第二組,通過win32定義的POINT結構(typedef struct tagPOINT {?? LONG x;
? LONG y;} POINT),來獲得當前鼠標光標位置的窗口HWND,這是最直觀的武器!常規操作如下:先得到Cursor的POINT(BOOL GetCursorPos(LPPOINT)函數),再用WindowFromPoint。這樣,我們幾乎可以獲得任何打開的有窗口的函數的HWND了!然后通過獲取類名的win32 api函數(int GetClassName(? HWND hWnd,?? LPTSTR lpClassName,?? int nMaxCount ))得到類名--這里的lpClassName最好用字符數組地址,nMaxCount就是數組的size了,同時,這種方法解決了第一個問題的麻煩!--我可以把鼠標放在任何地方!*^_^*

?????? 第三組,這些是用來列舉和處理任何窗口的超級武器!通過組合運用EnumWindows和EnumWindowsProc,EnumChildWindows與EnumChildProc,可以掃描桌面所有窗口并對之處理!

我的理解:(這部分用任務驅動式教學方法--誰讓小弟是老師呢!xi xi)

任務:得到所有的窗口的類名。

解決辦法1:我們會先想到第三組,可以自桌面窗口開始(它是所有窗口的祖先),依次掃描,獲取類名并存之。有點兒像Visual Stdio的Spy++,或者Borland 的WinSight32,具體辦法如下:(bcb中)

在主程序中,調用EnumWindows,傳入YouEnumProc的函數地址作第一個參數,別忘了轉換成WNDENUMPROC類型。第二參可NULL。::EnumWindows(reinterpret_cast<WNDENUMPROC> YouEnumProc,NULL);

在YouEnumProc函數中,如果第一參HWND = = NULL,就跳離(return FALSE;),可以結束啦!

然后,把類名數組準備好,得到類名,存之。

返回真值,繼續下一次掃描。

看起來并不復雜,是一種函數遞歸。但是我可會解釋!面啊!: p

第二種解決方法:簡單、直觀--自己想出來的,頗得意

首先準備一個時鐘,一種存類名方法(我用TMemo)

在定時器處理函數中:

1、得到當前cursor的點位置

2、再用WindowFromPoint,

3、然后得到類名,放到TMemo里

這樣可以用鼠標獲得你想要的窗口(包括按鈕等),只要鼠標在窗口放一會兒。。。哈哈

第三種方法:其實利用FindWindow和循環結構也應該可以

總結:其實得到HWND的方法很多,比如知道了窗口層次,依次向下掃。。。在說第三種呢!但我覺得,我的方法最直接有效,你說呢?

歡迎大家與我聯系,并討論這個問題!有關這個問題我還有許多疑問,比如HWND與ID的轉換,在如IE頁面中的表單控件的HWND或ID,還是其他的東東,總之是能識別他的東西。。。這個我很困惑,沒辦法!

不清楚地方,大家要參照MSDN啊

其它獲取句柄的方法:

1.根據id獲取窗口句柄
??Hwnd hwnd = GetDlgItem(hwndParent,id).
2.根據窗口句柄,獲取id
????id = GetWindowLong(hwndChild,GWL_ID)
??? id = GetDlgCtrlID(hwndchild).
3.獲取實例句柄的若干方法
????hInst = GetWindowLong(hwnd,GWL_HINSTANCE)
????把HINSTANCE 作為全局變量保存.
????當建立窗口時,參數lparam指向了一個建立結構的地址.
????可以這樣獲取實例句柄
????hInst = ((LPCREATESTRUCT)lParam)->hInstance.

總結

以上是生活随笔為你收集整理的窗口句柄浅析和获取窗口句柄的方法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 象人高潮调教丨vk | 四虎伊人 | 亚洲va在线 | 亚洲天堂黄色 | 91视频久久久 | 华丽的外出在线 | 美乳在线播放 | 西欧free性满足hd老熟妇 | 人体写真 福利视频 | av大片网站 | 亚洲四区在线 | 亚洲综合免费观看高清完整版 | 免费的毛片视频 | 不卡一二三 | 久久久久久片 | 国产成人三级在线观看视频 | 一本色道久久综合亚洲精品酒店 | 中国毛片基地 | 污网站在线播放 | 国产吞精囗交免费视频网站 | 日韩欧美91 | 高潮一区 | 久久精品tv| 麻豆视频在线 | 99精品视频在线 | 婷婷毛片| 公交上高潮的丁芷晴 | 亚洲蜜桃av一区二区 | av第一页 | 日本伊人久久 | 在线高清观看免费观看 | 日韩欧美国产网站 | 亚洲色成人一区二区三区小说 | 三级网站在线播放 | 欧美一级黄视频 | 国偷自拍第113页 | 永久免费看片 | 亚洲砖区区免费 | 人妻互换一区二区激情偷拍 | 天天做天天射 | 日本不卡一| 日日爱av | 婷婷五月综合久久中文字幕 | www.com亚洲 | 女教师高潮黄又色视频 | 99精品欧美| 久久久久色 | 爱爱爱爱网站 | 69久久精品无码一区二区 | 深夜福利网站 | 国产精品久久久久精 | 国产精品毛片va一区二区三区 | 成人做爰9片免费视频 | 亚洲久久久 | 欧美日韩精品一区二区 | 福利二区| 成人涩涩网 | 国产精品二三区 | 久久久国产精品人人片 | 午夜成人亚洲理伦片在线观看 | 成年人a级片| 德国老妇性猛交 | 91精品人妻一区二区三区果冻 | 少妇做爰免费视频播放 | 国产成人精品一区在线播放 | 我色综合 | 久久精品黄色 | 自拍偷拍福利视频 | 桃色综合网 | 亚洲视频在线播放免费 | 亚色成人 | 日韩一区二区三区四区五区六区 | 国内自拍偷拍 | 亚洲天堂123 | 久久911| 91蜜桃婷婷狠狠久久综合9色 | 亚洲理论片 | 日韩区欧美区 | 美国少妇性做爰 | 亚洲精品在线视频免费观看 | 日日躁夜夜躁白天躁晚上躁91 | 精品视频在线播放 | 成人欧美一区二区三区在线播放 | 美女被捅个不停 | 杨幂国产精品一区二区 | 久久一本综合 | 日本精品视频在线 | 东方av在线播放 | 欧美一区二区三区久久成人精品 | 激情亚洲视频 | 黑人性生活视频 | se综合| 国产精品视频大全 | 成人青青草| 麻豆免费电影 | 九九色| 国产精品综合视频 | wwwav在线 | 一区二区三区精品国产 |