Время создания HWND - PullRequest
5 голосов
/ 19 июня 2009

Я новичок в этом сообществе, работая с 1 из моего скрипта автоматизации, у меня возникла проблема, я хотел получить HWND, время создания.

У меня есть набор HWND в массиве, который я получил из FindWindowEx, Я хочу найти в массиве, какой HWND создается последним в зависимости от системного времени

У меня недостаточно знаний о перехватах окон, но я читал о каком-то CBTproc, у которого есть событие под названием «CBT_CREATEWND», которое может возвращать HWND во время создания временного окна, я очень не уверен, как работать оконные крючки Но если я получу HWND, я могу взять системное время и сравнить с HWND моего массива.

Любой может, пожалуйста, пролить свет на то же самое, а также попросить меня прояснить ситуацию, если я не ясен.

Спасибо, Маниш Бансал

1 Ответ

5 голосов
/ 19 июня 2009

Windows не хранит эту информацию таким образом, чтобы она была доступна через API, поэтому вы должны собрать ее самостоятельно.

Если вы можете изменить код, который создает HWND, вы можете просто сохранить текущее время при обработке WM_CREATE или WM_NCCREATE.

Я бы по возможности избегал хуков окон - они внедряют вашу DLL в каждый процесс, который создает окна. Критическая ошибка в вашей DLL приведет к ужасной смерти каждого приложения на вашем рабочем столе.

Если вам нужно перейти с хуком Windows, вы вводите хук, используя SetWindowsHookEx , например:

HHOOK myHook = SetWindowsHookEx(WH_CBT, MyHookFunction, myHookDll, 0);

Ваш обработчик крюка будет выглядеть так:

LRESULT CALLBACK MyHookFunction(int nCode, WPARAM wParam, LPARAM lParam)
{
   if (nCode == HCBT_CREATEWND)
   {
        // wParam is new window.
   }
   else if (nCode == HCBT_DESTROYWND)
   {
        // wParam is window being destroyed
   }

   return CallNextHookEx(myHook, nCode, wParam, lParam);
}

Процесс ловушки должен присутствовать в DLL, чтобы он мог загружаться другими процессами. Так как ваш хук будет работать в разных процессах, вам нужно перенаправить информацию обратно в ваш первоначальный процесс. Вы можете сделать это с помощью специального сообщения окна, например.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...