我正在做一些CreateWindow
的事情。
我的工作需要我在应用程序的一个窗口中插入一个Button,然后单击该按钮,我的应用程序才能执行某些操作。该应用程序不是我的应用程序,因此我认为我需要做一些“钩子”。
我尝试过:
HWND hwnd = FindWindowEx("className",NULL)
CreateWindowEx(...hwnd...)
它起作用了。 Button已成功插入目标应用程序。
但是当我尝试处理该窗口的消息时
我失败了。
该hwnd
属于我的应用程序hInstance
,但是我的应用程序具有CEF自己的消息循环。
我尝试了SetWindowsHookEx
,但无法正常工作。
无论我做什么,都不会处理。
如果我使用while(GetMessage (&messages, NULL, 0, 0))
,它将阻止我的应用程序的线程
WNDCLASS xxx
和RegisterClass(xxx)
或CreateWindow(className)
使我困惑。
我尝试使用LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
,但是while()
将阻止我的应用程序的线程
并且在我的应用程序的wndProc
中,没有WM_COMMAND
消息。
HWND hwnd = FindWindowEx(0, 0, L"TCustomBaseForm" , NULL);
HWND hwndButton = CreateWindowEx(0L,_T("Button"), L"Btn", WS_CHILD|WS_VISIBLE| BS_PUSHBUTTON, 435, 45, 35, 45, hwnd, NULL, GetModuleHandle(0), 0);
DWORD dwProcId = 0;
DWORD dwThreadId = 0;
dwThreadId = GetWindowThreadProcessId(hwndButton, &dwProcId);
SetWindowsHookEx(WH_MOUSE, Hookproc, g_hInstance, dwProcId);
直到现在,我的“插入按钮”都无法正常工作。
因此,有没有办法使此“插入的窗口”或按钮与MFC按钮相同,当我单击它时,我可以在WM_LBUTTONCLICK
中处理类似WndProc
的消息吗?
答案 0 :(得分:0)
单击按钮时,按钮会向其父窗口发送WM_COMMAND
消息。
至少有两种方法可以避免这种情况:
STATIC
控件(或自定义窗口)的子级。您需要subclass STATIC
控件才能接收消息。答案 1 :(得分:-2)
谢谢大家。我做到了
我创建一个带有按钮的窗口。然后我使用SetParent(myWindowHwnd,myTargetWindowHwnd)
并在窗口中处理按钮的click事件,它可以正常工作。
没有钩,没有问题。
非常感谢大家。
感谢您编辑我的问题,我的英语水平很高。
我已经学到了很多有关Windows Hook的知识。