如何使用Java本机访问(JNA)映射回调函数
如何使用如何使用Java本机访问(JNA)映射回调函数,java,winapi,jna,Java,Winapi,Jna,如何使用WH_FOREGROUNDIDLE和以下回调函数设置windows挂钩 DWORD CALLBACK ForegroundIdleProc( __in int code, DWORD wParam, LONG lParam ); 我试图检测线程/进程何时空闲 我使用以下函数获得了ThreadProcessId: GetForegroundWindow -> GetWindowThreadProcessId. EDIT:添加了一个return语句。扩展StdCallCallbac
WH_FOREGROUNDIDLE
和以下回调函数设置windows挂钩
DWORD CALLBACK ForegroundIdleProc( __in int code, DWORD wParam, LONG lParam );
我试图检测线程/进程何时空闲
我使用以下函数获得了ThreadProcessId
:
GetForegroundWindow -> GetWindowThreadProcessId.
EDIT:添加了一个return语句。扩展StdCallCallback而不是Callback,以便使用正确的调用约定调用回调。在win32下,宏“回调”通常解析为_stdcall。我应该返回什么?当我重写invoke按钮时,它会要求我返回一些内容。msdn说当ForegroundIdleProc返回0时应该调用CallNextHookEx。我在这里有点困惑。根据MSDN
的说法,如果代码小于零,钩子过程必须返回CallNextHookEx返回的值。如果代码大于或等于零,强烈建议调用CallNextHookEx并返回它返回的值;否则,安装了WH_FOREGROUNDIDLE钩子的其他应用程序将不会收到钩子通知,并可能因此行为不正确。如果钩子过程不调用CallNextHookEx,则返回值应为零。
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);