2011-08-03 42 views
5

我怎麼能建立窗戶WH_FOREGROUNDIDLE鉤和下面的回撥功能如何回調函數映射與Java本機訪問(JNA)

DWORD CALLBACK ForegroundIdleProc(__in int code, DWORD wParam, LONG lParam); 

我想,當一個線程/進程進入空閒狀態檢測。

我已經使用以下功能獲得threadProccessId

GetForegroundWindow -> GetWindowThreadProcessId. 

回答

0
public static interface ForegroundIdleProc extends Callback(){ 
    int invoke(int code, int wParam , NativeLong lParam); 
} 

/*....Usage....*/ 
ForegroundIdleProc proc = new ForegroundIdleProc(){ 
    int invoke(int code, int wParam , NativeLong lParam){ 
     /* Handle callback */ 
     /*Make sure you define this function first.*/ 
     return NativeLibrary.Instance.CallNextHookEx(NULL , code , wParam , lParam); 
    } 
} 

NativeLibrary.Instance.SetWindowsHookEx(WH_FOREGROUNDIDLE , proc , etc etc); 

編輯:添加一個return語句。

+0

我應該返回什麼?當我重寫調用按鈕時,它要求我返回一些東西。 msdn說,當ForegroundIdleProc返回0時應該調用CallNextHookEx。我在這裏有點困惑。 – paktrick

+0

根據MSDN'如果代碼小於零,掛鉤過程必須返回CallNextHookEx返回的值。 如果代碼大於或等於零,強烈建議您調用CallNextHookEx並返回它返回的值;否則,已安裝WH_FOREGROUNDIDLE掛鉤的其他應用程序將不會收到掛接通知,並可能因此導致行爲不正確。如果掛鉤過程不調用CallNextHookEx,則返回值應爲零 – Abhijith

0

擴展StdCallCallback而不是回調,以獲得使用正確的調用約定調用的回調。在win32下,宏「CALLBACK」通常會解析爲_stdcall。