使用Win32子类现有窗口

时间:2012-09-03 21:11:53

标签: c++ winapi

我目前正试图获取Windows计算器应用程序的所有用户输入。似乎这样做的方法是使用Win32拦截所有用于计算器窗口的键盘和鼠标输入。我在下面的链接上阅读了关于子类化窗口的MSDN页面,并对子类化进行了一些研究。

我有一个子类化窗口的语法,但我不知道如何告诉程序我要查找哪个窗口的子类。

我到目前为止的代码如下所示。我现在的问题是我不确定变量" 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);
}

1 个答案:

答案 0 :(得分:1)

要查找窗口,首先使用Spy ++(随Visual Studio安装的工具)查找计算器主窗口的类名和窗口名。然后,在您的应用程序中,使用FindWindow API:

hWndEdit = FindWindow(className, windowName);

虽然,我不确定子类是否是正确的方法,因为Calculator窗口不属于您的应用程序。您应该使用hooks

执行此操作