Имам просто (Windows) приложение, което стартира друго приложение с помощта на функцията CreateProcess. След това получава правилния hwnd, като използва EnumWindows и идентификатора на процеса на новосъздадения процес.
След като 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;
}
}
}
}
}