gpt4 book ai didi

c++ - 通过 CreateProcess 启动应用程序但似乎无法使用 PeekMessage?

转载 作者:行者123 更新时间:2023-11-30 01:13:43 25 4
gpt4 key购买 nike

我有一个简单的 (windows) 应用程序,它使用 CreateProcess 函数启动另一个应用程序。然后它通过使用 EnumWindows 和新创建进程的进程 ID 获得正确的 hwnd。

在获得 hwnd 之后,我的应用程序的“主循环”开始了。此循环一直持续到 CreateProcess 启动的应用程序不再运行为止。

一切正常,直到我尝试使用 PeekMessage 来查看发送到我启动的应用程序的消息 - 似乎我的应用程序根本没有识别任何消息,但是启动的程序(通过 CreateProcess ) 正常运行,做它应该做的一切..

我想要实现的是删除发送到应用程序的某些消息,主要是各种 F 键(F1、F2..F12 键),但如果可能的话,我想更改菜单显示在应用程序中(我不知道菜单的技术名称我的意思是,它是您在右上角单击应用程序图标时看到的菜单)-我想添加一个小的“关于”选项。

如果有人能指出我在我的代码中做错了什么,或者有更好的替代方法来阻止某些按键到达已启动的应用程序,我将非常感激。

非常感谢。 :)

这是我目前拥有的代码:

VOID PerformLaunch(LPWSTR lpAppName, LPTSTR lpCmdLine) {
STARTUPINFO si;
PROCESS_INFORMATION pi;
DWORD dwLoopExitCode = NULL;
BOOL cpBool = FALSE;
BOOL finishedLoop = FALSE;
MSG message = { 0 };

ZeroMemory(&pi, sizeof(PROCESS_INFORMATION));
ZeroMemory(&si, sizeof(STARTUPINFO));
si.cb = sizeof(STARTUPINFO);

cpBool = CreateProcess(lpAppName, lpCmdLine, NULL, NULL, TRUE, 0, NULL, NULL, &si, &pi);
if (!cpBool) {
MessageBox(Game_HWND, L"Could not start process!", L"Error:", MB_OK | MB_ICONERROR);
}

//-- Enumerate windows until Game_HWND && Game_Hook are not NULL.
while (Game_Hook == NULL) {
EnumWindows(MainEnumGameWindProc, pi.dwProcessId);
}

while (!finishedLoop) {
DWORD dwWC = WaitForSingleObject(pi.hProcess, 0);
if ((dwWC == WAIT_FAILED) || (dwWC == WAIT_OBJECT_0)|| (dwWC == WAIT_ABANDONED)) {
DWORD dwExitCode;
GetExitCodeProcess(pi.hProcess, &dwExitCode);
CloseHandle(pi.hThread);
CloseHandle(pi.hProcess);
dwLoopExitCode = dwExitCode;
finishedLoop = TRUE;
}
else {
if (PeekMessage(&message, Game_HWND, 0, 0, PM_REMOVE)) {
TranslateMessage(&message);
DispatchMessage(&message);
if (WM_QUIT == message.message) {
finishedLoop = TRUE;
break;
}
}
}
}
}

最佳答案

你不能像那样拦截另一个消息循环。请记住,该进程将执行自己的消息泵 - 您发送它的消息是不合适的,如果您这样做,我预计事情会变得很奇怪。

正确的做法是设置一个钩子(Hook)。使用 SetWindowsHookEx 函数在该窗口上安装 Hook 。

关于c++ - 通过 CreateProcess 启动应用程序但似乎无法使用 PeekMessage?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31561986/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com