我需要設置一個WindowLong覆蓋的WndProc,我使用的是從coredll.dll中此方法:使用SetWindowLong函數重載的WndProc
public interface CoreDll extends StdCallLibrary {
\t //loads the coredll with unicode options
CoreDll INSTANCE = (CoreDll)Native.loadLibrary("coredll", CoreDll.class,
W32APIOptions.UNICODE_OPTIONS);
//native calls
HMODULE GetModuleHandle(String lpModuleName);
long GetWindowLong(HWND hwnd, int gwlWndproc);
long SetWindowLong(HWND hWnd,int nIndex,Callback dwNewLong);
LRESULT DefWindowProc(HWND hWnd, int uMsg, WPARAM uParam,LPARAM lParam);
}
在coredll原來的方法簽名是:
LONG SetWindowLong(
HWND hWnd,
int nIndex,
LONG dwNewLong
);
但是,當我使用它時,它總是返回0,根據Microsoft「指定的32位整數的前一個值表示成功。零表示失敗」無論如何,我試圖執行這樣說:
public interface CallbackProc extends Callback, StdCall {
\t LRESULT callback(HWND hWnd, int uMsg, WPARAM uParam, LPARAM lParam);
}
//Get a handle to the current process
final HWND mainHwnd = CoreDll.INSTANCE.GetModuleHandle(null);
//Get a reference to the current process to send it in the new WndProc
long value=CoreDll.INSTANCE.GetWindowLong(new HWND(mainHwnd.getPointer()), -4);
final LONG_PTR prevWndProc = new LONG_PTR(value);
//Sets the new Method to override WndProc
final RfidCallbackProc ptr=new RfidCallbackProc() {
\t @Override
\t public LRESULT callback(HWND hWnd, int uMsg, WPARAM wParam,LPARAM lParam) {
//returns the call to the process
return CoreDll.INSTANCE.CallWindowProc(prevWndProc, hWnd, uMsg, wParam, lParam);
}
};
//Sets the new method to override Windows' WndProc
int num=(int)CoreDll.INSTANCE.SetWindowLong(new HWND(mainHwnd.getPointer()),-4 ,ptr);
//NUM IS ALWAYS 0
如果有人可以給我一個提示,我將非常感激,感謝
準確地說,我正在寫這個來閱讀通過窗口消息發送的代碼,但我很難與此,我已經跟着這個代碼,最後我得到了正確的SetWindowLong [鏈接](https:// github .com/pke/clipboard.monitor/blob/master/clipboard.monitor.windows/src/clipboard/monitor/windows/AbstractWindowsClipboardMonitor.java),但無論如何我無法讀取dll發送的消息。我能夠在PeekMessage循環中只讀取1條消息,然後嘗試調用TranslateMessage(msg); DispatchMessage函數(MSG);但它不是調用WndProc我已經定義 – pppnk 2015-02-12 19:46:44
如果你可以在這裏看看我會非常感激它,我已經發布了一個新的問題,我的新代碼[鏈接](http://stackoverflow.com/questions/28487457/java-jna-read-codes-sent-via-window-messages) – pppnk 2015-02-12 20:49:41