@ Пропустите R, и любой другой, кто хочет сделать это в C, с проверенным кодом, скомпилированным в недавнем (самом последнем) mingw на Windows 10 64-битной (но с установленным 32-битным пакетом mingw), похоже, работает в Windows XP / 2003, чтобы избавиться от устаревших значков области уведомлений.
Я установил Mingw через Chocolatey, как это:
choco install mingw --x86 --force --params "/exception:sjlj"
(ваш пробег может варьироваться в зависимости от того, в моей системе компилятор был установлен здесь:
C:\ProgramData\chocolatey\lib\mingw\tools\install\mingw32\bin\gcc.exe
, а затем простой
gcc refresh_notification_area.c
дал файл a.exe, который решил проблему со значком устаревшей области уведомлений, которая была у меня в Windows 2003 (32-разрядная версия).
Код, адаптированный из приведенного выше @Stephen Klancher, (обратите внимание, это может работать только на Windows XP / 2003, которая выполнила мои задачи):
#include <windows.h>
#define FW(x,y) FindWindowEx(x, NULL, y, "")
int main ()
{
HWND hNotificationArea;
RECT r;
//WinXP
// technique found at:
// /65402/mozhete-li-vy-otpravit-signal-v-windows-explorer-chtoby-on-obnovlyal-znachki-sistemnogo-ekrana#65414
GetClientRect(
hNotificationArea = FindWindowEx(
FW(FW(FW(NULL, "Shell_TrayWnd"), "TrayNotifyWnd"), "SysPager"),
NULL,
"ToolbarWindow32",
"Notification Area"),
&r);
for (LONG x = 0; x < r.right; x += 5)
for (LONG y = 0; y < r.bottom; y += 5)
SendMessage(
hNotificationArea,
WM_MOUSEMOVE,
0,
(y << 16) + x);
return 0;
}