要實作的一個需求是截獲第三方軟體的視窗上點擊某一個按鈕,然后自己軟體做出相關回應。
一般使用鉤子技術來處理windows訊息實作。
參考這篇文章https://blog.csdn.net/aoshilang2249/article/details/46896311
安裝全域鉤子,可以截獲到滑鼠點擊事件。
現在有以下兩個疑問
1.關于點擊控制元件句柄
定義一個鉤子訊息的結構體:
[StructLayout(LayoutKind.Sequential)]
public class MouseHookStruct
{
public POINT pt;
public int hWnd;
public int wHitTestCode;
public int dwExtraInfo;
}
執行鉤子的回呼函式public delegate int HookProc(int nCode, Int32 wParam, IntPtr lParam);
MouseHookStruct m = (MouseHookStruct)Marshal.PtrToStructure(lParam, typeof(MouseHookStruct));用這個方法把lParam這個引數轉成鉤子訊息結構體。
問題:我點擊按鈕時,訊息結構體里的hWnd值一直是0,這個不應該是點擊的控制元件的句柄嗎?
pt坐標的x,y是有值的,WindowFromPoint用這個函式倒是可以獲取到控制元件的句柄的。
2.關閉自己軟體會卡住
在軟體里安裝了滑鼠全域鉤子,點擊關閉視窗時,程式會卡住,這是何解,又該如何處理呢?
uj5u.com熱心網友回復:
關于第2個問題,看了這篇文章https://q.cnblogs.com/q/40041/發現確實奇怪,win 7的32位系統下,areo下點關閉視窗的按鈕不會卡住,basic主題下,點關閉,會卡住。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/72244.html
標籤:基礎類
下一篇:如何獲取win7下檔案夾圖示?
