Я пытаюсь создать приложение, которое будет уведомлено о каждом активном изменении окна в Windows, чтобы оно могло выполнять некоторые задачи, такие как обнаружение заголовков окон, поэтому «наказывать» плохих людей, обращающихся к плохому контенту на нашем ПК машины. Таким образом, это действительно важно для приложения, потому что целью является запись «плохих» приложений из истории.SetWindowHookEx() возвращает NULL
Итак, в моей основной функции я начал тему для своего WindowLogger
.
windowThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE) WindowLogger,
(LPVOID) argv[0], 0, NULL);
if (windowThread)
{
// Also a bit of protection here..
return WaitForSingleObject(windowThread, INFINITE);
}
Тогда, вот моя WindowLogger
процедура:
// Function called by main function to install hook
DWORD WINAPI
WindowLogger(LPVOID lpParameter)
{
HHOOK hWinHook;
HINSTANCE hExe = GetModuleHandle(NULL);
if (!hExe)
{
return 1;
}
else
{
hWinHook = SetWindowsHookEx(WH_CBT, (HOOKPROC) CBTProc, hExe, 0);
MSG msg;
// I AM UNSURE ABOUT THIS PART..
// Probably wrong code :D ..
while (GetMessage(&msg, NULL, 0, 0) != 0)
{
if (msg.message == HCBT_ACTIVATE) {
// my code to log the window name
}
}
UnhookWindowsHookEx(hWinHook);
}
return 0;
}
И, наконец, моя CBTProc
функция обратного вызова, он записывает окна используя мою log()
функцию:
LRESULT CALLBACK
CBTProc(int nCode, WPARAM wParam, LPARAM lParam)
{
switch (nCode)
{
case HCBT_ACTIVATE:
{
HWND foreground = GetForegroundWindow();
char window_title[50];
if (foreground)
GetWindowText(foreground, window_title, 25);
log("|");
log(&window_title[0]);
log("|");
}
}
}
Так я отлаженный программа и то, что я понял, что hWinHook
становится NULL
после SetWindowsHookEx()
- это то, что, вероятно, заставляет мою программу использовать функцию почты. .. Не могли бы вы мне помочь?
Заранее спасибо.
Опишите Windows версию и состояние UAC. –
Отходы времени. «Плохие» люди могут использовать приложение для сообщений без сообщений или использовать драйвер режима ядра или что-то еще. – user2120666
Nick K - Windows 10 x64, UAC - default (Уведомить меня, когда приложения пытаются внести изменения в мой компьютер). user2120666 - я знаю, что это не лучший метод, но я доволен этой концепцией. – user3752782