我试图将调用快捷方式调用到单击菜单项时激活的过程。
我在使用菜单栏创建此窗口的进程中注入了一个 DLL。
我使用 VisualStudio 中的 Spy++ 来获取此特定项目的菜单标识符(wid:40003)。现在我打电话
CallWindowProcW(wndproc, hwnd, WM_COMMAND, 40003, 0);
但是,不会触发项目过程。 我不能直接调用该过程,因为我不知道它是什么。我只知道当我点击这个菜单时它会激活它。
我已经获得windproc
并hwnd
在我的 DLL 中执行以下操作:
void Init()
{
DWORD procID = GetProcessId(GetCurrentProcess());
EnumWindows(myCallback, procID);
}
BOOL CALLBACK myCallback(HWND hWnd, LPARAM lParam)
{
DWORD wndId;
GetWindowThreadProcessId(hWnd, &wndId);
if(wndId == (DWORD)lParam) //Found the right window handle
{
WNDPROC windowFunc = (WNDPROC)GetWindowLong(hWnd, GWL_WNDPROC);
LRESULT result = CallWindowProcW(windowFunc, hWnd, WM_COMMAND, 40003, 0);
return FALSE;
}
return TRUE;
}
编辑:也尝试过 SendMessageA、PostMessageA 和 DispatchMessageA 并且失败了
EDIT2:有关工作 PostMessageA,请参阅下面的答案。