我目前正試圖抓住所有用戶輸入到Windows計算器應用程序。看起來,這樣做的方法是使用Win32攔截計算器窗口中的所有鍵盤和鼠標輸入。我已閱讀下面鏈接的子類窗口的MSDN頁面,並對子類化進行了一些研究。Win32的子類現有窗口
我有用於子類化窗口的語法,但我不知道如何告訴程序我正在尋找子類的窗口。
我到目前爲止的代碼列在下面。我現在的問題是我不確定變量「hWndEdit」是如何分配的。我對Win32編程非常新,所以對此有所幫助。
(鏈接) http://msdn.microsoft.com/en-us/library/windows/desktop/ms633570(v=vs.85).aspx
WNDPROC wpOrigEditProc;
wpOrigEditProc = (WNDPROC) SetWindowLong(hWndEdit,GWL_WNDPROC,(long) WndEditProc);
LRESULT CALLBACK WndEditProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_CHAR:
case WM_KEYUP:
case WM_KEYDOWN:
if (hWnd == hWndEdit)
return 0;
break;
case WM_DESTROY:
// Remove the subclass from the edit control.
SetWindowLong(hWndEdit, GWL_WNDPROC, (LONG) wpOrigEditProc);
break;
default:
return CallWindowProc((WNDPROC) wpOrigEditProc, hWnd, message, wParam, lParam);
}
return CallWindowProc((WNDPROC) wpOrigEditProc, hWnd, message, wParam, lParam);
}
讓我們稍微退一步。在截獲Calc的輸入是解決方案時,您試圖解決的問題是什麼? –
您即將與此長期合作。你不僅要求提供一個窗口過程的子類,還要求在一個甚至不屬於你的過程中進行。有辦法做到這一點,但如果你剛開始使用Win32編程,你可能會弄溼你的腳或者至少讀更多。通過鉤子和/或注射進行二級過程子類化不是爲了嘲笑心臟。 – WhozCraig
在你自己的過程中對窗口進行子類化是一個非常標準的winapi技術。在另一個進程中進行子類化的時候絕對不是,它需要在進程中注入一個DLL。如果你甚至不能*找到你想要子類的窗口,那麼你在實際操作中就會有點失落。改變另一個沒有源代碼的程序的行爲只是不常見的做法。主要是因爲對您的控制之外的此類程序的簡單更新會破壞您的代碼。 –