【发布时间】:2009-08-23 20:47:54
【问题描述】:
我目前正在运行一个全局钩子,它监视某个窗口,然后用 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 时,窗口不是fully created 并且没有标题, GetWindowText(hWnd, wintext, 80) 不返回任何内容。
总结一下我的问题:当HCBT_CREATEWND 为真时,是否可以获得窗口的标题或以任何其他方式确定它是什么类型的窗口?
【问题讨论】: