簡體   English   中英

使用Win32子類化現有窗口

[英]Subclass existing window with Win32

我目前正在嘗試獲取Windows計算器應用程序的所有用戶輸入。 看來,執行此操作的方法是使用Win32攔截打算用於計算器窗口的所有鍵盤和鼠標輸入。 我已經閱讀了下面鏈接中關於子窗口化的MSDN頁面,並對子類做了一些研究。

我有子類化窗口的語法,但是我不確定如何告訴程序我要子類化哪個窗口。

下面列出了我到目前為止的代碼。 我現在的問題是我不確定如何分配變量“ hWndEdit”。 我是Win32編程的新手,因此可以提供任何幫助。

(鏈接) http://msdn.microsoft.com/zh-cn/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);
}

要查找窗口,請首先使用Spy ++(隨Visual Studio一起安裝的工具)查找計算器主窗口的類名和窗口名。 然后,在您的應用程序中,使用FindWindow API:

hWndEdit = FindWindow(className, windowName);

雖然,我不確定在這里子類化是正確的方法,因為“計算器”窗口不屬於您的應用程序。 您應該使用鈎子執行此操作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM