繁体   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