В настоящее время я использую глобальный хук, который отслеживает определенное окно, а затем закрывает его с помощью PostMessage(hWnd,WM_CLOSE,0,0);
DLL, содержащая хук:
LRESULT CALLBACK MyFunc(int code, WPARAM wParam, LPARAM lParam)
{
switch(code)
{
case HCBT_CREATEWND:
{
HWND hWnd = (HWND)wParam;
//GetWindowText(hWnd, wintext, 80) returns nothing
//if ( strcmp(wintext, ("Kaspersky Internet Security: license notification")) == 0 )
// {
// Beep(70,100);
// PostMessage(hWnd,WM_CLOSE,0,0);
// }
break;
}
case HCBT_ACTIVATE:
{
HWND hWnd = (HWND)wParam;
GetWindowText(hWnd, wintext, 80);
if ( strcmp(wintext, ("Kaspersky Internet Security: license notification")) == 0 )
{
Beep(70,100);
PostMessage(hWnd,WM_CLOSE,0,0);
}
break;
}
}
...
Как вы видите, я использую GetWindowText(hWnd, wintext, 80)
, чтобы определить по заголовку окна, является ли текущее активированное окно тем, которое должно быть закрыто. я
закрытие окна, когда оно активируется, а не когда оно создается. Я хотел бы закрыть окно, когда оно создается, то есть когда HCBT_CREATEWND
истинно.
Дело в том, что я не могу использовать GetWindowText(hWnd, wintext, 80)
, чтобы получить заголовок окна и тем самым определить, должно ли окно быть закрыто, потому что когда вызывается HCBT_CREATEWND
, окно не было полностью создано и не имеет заголовка, GetWindowText(hWnd, wintext, 80)
ничего не возвращает.
Подводя итог моему вопросу: можно ли получить заголовок окна или каким-либо другим способом определить, что это за окно, когда HCBT_CREATEWND
истинно?