0

我写了我自己的任务栏替换,我很高兴地使用了很多年(有点)但我有一些问题没有解决。请帮忙!我的任务栏中出现了“提示”窗口。当您将鼠标悬停在浏览器中的选项卡或某些程序中的按钮或链接上时出现的那些(通常为黄色)窗口。通常,一旦您移动鼠标,这些窗口就会消失,通常它们不应被检测为单独的窗口,也不应显示在任务栏中。对我来说,机器人通常不会关闭并且永远停留在屏幕上,直到重新启动或部分关闭,带有提示文本的黄色窗口会消失,但围绕它的“阴影”会保持原位(有时带有白色框

处理不当截图)。

请帮助了解如何避免这些窗口被检测为“正常窗口”并解释为什么我没有关闭它们。

我查看了 ReactOS 任务栏源代码,但对我来说它看起来与我自己的实现非常相似,我找不到任何严重的区别。所以我一定错过了一些东西。这是我使用的一些代码:

//making taskbar window
SHELLHOOK = RegisterWindowMessageA("SHELLHOOK");
SetTaskmanWindow(prog->handle);
RegisterShellHookWindow(prog->handle);
prog->setCaption("Shell_TrayWnd");
SendMessage(prog->handle, SHELLHOOK, 0, 0);
SendMessage((void*)0xffff, tray.WM_TASKBARCREATED, 0, 0);


//enumerating windows to put into taskbar
int __stdcall enum_proc(void * H, WindowsList &L)
{
       // try to filter out unnecessary windows
     if (H == mainWindow.handle) return true;
     if (
        GetWindow(H, GW_OWNER)
        || !IsWindowVisible(H)
        || !IsWindow(H)
        || GetParent(H) != 0
     ) return true;
     str s; s.setLength(1024); // try to filter out 'tooltips' by classname or size
     s.setLength(GetClassNameA(H, *s, s.length));
     s.lower();
     if (s.pos("tooltip") >= 0) return true; //did it work? (nope)
     int S = GetWindowLong(H, GWL_STYLE);
     RECT R; GetWindowRect(H, &R); int h = R.bottom - R.top;
     //if (h > 10 && h < 30) return true; // this is not a solution sadly..
     if (S & TTS_NOPREFIX) return true;
     if (S & TTS_ALWAYSTIP) return true;
     L.addWindowHandle(H); 
     return true;
}


void get_sys_window_list(WindowsList &L)
{
   EnumWindows(enum_proc, &L);
}
4

1 回答 1

0

我不知道你在看 ReactOS 的源代码时是怎么错过的,但是工具提示有WS_EX_TOOLWINDOW扩展的样式。具有此样式集的 Windows 不应显示在任务栏上。

ReactOS 中的相关行

关于以下问题:

围绕它的“阴影”留在原地

我不明白这与这个问题有什么关系。您附上了 Chrome 的屏幕截图。这是否意味着您的任务栏以某种方式导致工具提示的阴影留在屏幕上?

于 2013-10-24T14:45:26.627 回答