c++ - 使用 Win32 子类化现有窗口

标签 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);
}

最佳答案

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

hWndEdit = FindWindow(className, windowName);

不过,我不确定子类化是不是这里的正确方法,因为计算器窗口不属于您的应用程序。你应该用 hooks 来做到这一点.

关于c++ - 使用 Win32 子类化现有窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12254054/

相关文章:

c++ - 在 C++ 中使用包装整数作为索引?

c++ - 使用 ORB 在 OpenCV 中生成密集视差图

c++ - 如何判断二进制数的小数部分翻译的准确性?

c++ - 为什么我的 Windows 桌面进程似乎立即退出而没有标准输出?

c++ - 使用 _set_se_translator 和编译标志

c++ - 如何使用 "Tool Tips"捕获屏幕?

c++ - VS2010 : afxcw. lib(appcore.obj):错误 LNK2001:无法解析的外部符号 ___wargv

c++ - 在 C++ 中使用 unique_ptr 的工厂模式

C++搜索算法——处理海量数据

c++ - MFC:如何在旧版 MFC ver 6 中保存工具栏的位置?