1. 程式人生 > >HOOK。另一個程式單擊某個按鈕時,彈出自己的對話方塊。

HOOK。另一個程式單擊某個按鈕時,彈出自己的對話方塊。

半年沒來。瑣事太多是藉口。

其實是半年來一直用VC做東西,而且只用VC6。因為與.Net沒什麼關係,所以不好意思到這裡灌了。。

近兩天在做個東西,主要目的是為方便一個MIS錄入人員照片。通過Camera SDK,實時採集。

今天先談談對另一個程式單擊某個按鈕時,彈出自己的對話方塊。

開始想用WH_CBT,在其彈出時攔截。後又想用WH_WINPROC。

能實現,但與我自己的目標:“單擊某個按鈕時。。”有點遠。

所以還是俗套:WH_MOUSE。

而目標程式想HOOK的按鈕是個DLL自繪STYLE,列舉不出,只好想辦法。

下面是MouseProc:

LRESULT CALLBACK MouseProc(int nCode, WPARAM wParam, LPARAM lParam)
{
    

if (nCode == HC_ACTION)
    {
        RECT rc;
        TCHAR buff[
512];
        
        MOUSEHOOKSTRUCT 
*pMouseHookParam = reinterpret_cast<MOUSEHOOKSTRUCT*>(lParam);

        
switch(wParam) {               //滑鼠訊息case WM_LBUTTONUP:      //用WM_LBUTTONDOWN也行,但不能看到單擊效果,感覺怪怪的。            GetWindowRect(pMouseHookParam
->hwnd,&rc);      //取得滑鼠單擊時某個控制元件的工作區            GetClassName(pMouseHookParam->hwnd,buff,512);   //取得類名if (_tcscmp(buff,_T("TTeThemePanel")) ==0)            //還好整個工作區就這一個Panel,當然也可以用列舉視窗的控制代碼進行比較,因為這控制代碼以後也要用的。這裡為方便。            {
                
if (pMouseHookParam->pt.x>rc.right-46&&
 pMouseHookParam->pt.x<rc.right-22&& pMouseHookParam->pt.y>rc.bottom-30&& pMouseHookParam->pt.y<rc.bottom-5)   //判斷是否我要找的區域                {
                    ShowDlg();
                    
return1;      //不讓其彈出它自己的視窗,非0就行。                }                
            }
            
break;
        
default:
            
break;
        }
    }
    
return (CallNextHookEx(g_hook, nCode, wParam, lParam));

}

 轉發 https://www.cnblogs.com/laoa/archive/2005/11/08/271768.html