我想做個鉤子,來鉤取Windows Media Player的相關動作,如: 播放,暫停,停止...
   安裝的HOOK是:
   hook = SetWindowsHookEx(WH_GETMESSAGE,// 
                    (HOOKPROC)msghook,...);
static LRESULT CALLBACK msghook(UINT nCode, WPARAM wParam, LPARAM lParam)
{
if(nCode < 0)

            CallNextHookEx(hook, nCode, wParam, lParam);
return 0;

LPMSG msg = (LPMSG)lParam;
         switch(msg->message)
{
           case WM_COMMAND:
{
// 處理...
break;
}
          }
    return CallNextHookEx(hook, nCode, wParam, lParam);
}
上面的做法沒有錯,...可以抓到Windows Media Player的菜單動作,但抓不到Windows Media Player上的按鈕動作,.......請問問題出在哪裡啊....?

解决方案 »

  1.   

    SetWindowsHookEx后面两个参数是?
      

  2.   

    Windows Media Player的那些不是真正的按钮,而是画上去的图片,所以那些按钮是没有这些消息的
      

  3.   

    跟游戏差不多,自画的控件,hook不到的。。
      

  4.   

    ..>>>SetWindowsHookEx后面两个参数是?
    我省掉了...沒有寫出來..加個問題???--對於SetWindowsHookEx的最後一個參數是ThreadID,如何獲得呢?知道他的窗口句柄,....我暫時從VC++的SPK++上獲得的,..但具體是如何獲得具體某個應用程式的ThreadID??有誰知道嗎???-->>Windows Media Player的那些不是真正的按钮,而是画上去的图片,...
       自画????
    哪他是怎麼動作的阿....按下去後,他的動作又是怎麼激活的阿....
      

  5.   

    HWND hwnd;
    hwnd=::FindWindow(NULL,_T("窗口名字"));           //通过窗口名获得窗口句柄
      DWORD Pid=::GetWindowThreadProcessId(hwnd,NULL);  //通过窗口句柄获得进程ID
      

  6.   

    -->>Windows Media Player的那些不是真正的按钮,而是画上去的图片,...
       是画的按鈕????
    哪他是怎麼動作的阿....按下去後,他的動作又是怎麼激活的阿....
      

  7.   

    估计按下去后,发一通用的消息,带不同的command参数,程序根据command去执行
      

  8.   

    我抓了一下鼠標的按鍵消息,發現,
      ---在完整模式下,  無論在那裡按下去,都發同樣的消息,所帶的2個參數wParam,lParam都為0,
      ---在面板模式下,  在畫的按鈕上按下去的消息是一樣的,也和上面一樣的消息,參數也一樣
      

  9.   

    --->用取挫標的方法,我想過,但Windows Media Player有不同的模式(--1: 一般模式,-2:面板模式,-3:最小化模式),這3種模式的座標比例是不一樣的阿,這樣一來,即必須先知道當前所處的是哪個模式,在進行座標判斷啊--,然而,又如何來判定他的模式呢???----????