Я написал свою собственную замену панели задач, я использую ее в течение многих лет (вроде), но у меня есть некоторые нерешенные проблемы. Пожалуйста помоги! У меня есть «подсказка» окна появляются в моей панели задач. Те (обычно желтые) окна, которые появляются, когда вы наводите указатель мыши на вкладку в браузере, кнопку или ссылку в какой-либо программе. Обычно эти окна должны исчезать после перемещения мыши, и обычно они не должны распознаваться как отдельные окна и не должны отображаться на панели задач. Бот для меня они часто не закрываются и остаются на экране навсегда, до перезагрузки, или закрываются частично, желтое окно с текстом подсказки исчезает, но «тень», которая его окружает, остается на месте (иногда с белой рамкой
).
Пожалуйста, помогите понять, как избежать того, чтобы эти окна были обнаружены как «нормальные окна», и объясните, почему я их закрыл.
Я изучил исходный код панели задач 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);
}
Я не знаю, как вы пропустили это, глядя на исходный код ReactOS, но всплывающие подсказки имеют WS_EX_TOOLWINDOW
расширенный стиль. Окна с таким набором стилей не должны отображаться на панели задач.
Соответствующая строка в ReactOS.
Что касается вопроса о:
«тень», которая его окружает, остается на месте
Я не понял, как это связано с проблемой. Вы приложили скриншот Chrome. Значит ли это, что ваша панель задач заставляет тень всплывающей подсказки оставаться на экране?
Других решений пока нет …