Can you send a signal to Windows Explorer to make it refresh the systray icons?

前端 未结 8 795
执笔经年
执笔经年 2020-12-03 00:22

This problem has been afflicting me for quite a while and it\'s been really annoying.

Every time I login after a reboot/power cycle the explorer takes some time to s

8条回答
  •  遥遥无期
    2020-12-03 00:48

    @Skip R, and anyone else wanting to do this in C, with this code verified compiled in a recent (most recent) mingw on Windows 10 64 bit (but with the mingw 32 bit package installed), this seems to work in Windows XP / 2003 to get rid of stale notification area icons.

    I installed mingw via Chocolatey, like this:

    choco install mingw --x86 --force --params "/exception:sjlj"
    

    (your mileage may vary on that, on my system, the compiler was then installed here:

    C:\ProgramData\chocolatey\lib\mingw\tools\install\mingw32\bin\gcc.exe
    

    and then a simple

    gcc refresh_notification_area.c
    

    yielded an a.exe which solved a stale notification area icon problem I was having on Windows 2003 (32 bit).

    The code, adapted from @Stephen Klancher above is (note this may only work on Windows XP/2003, which fulfilled my purposes):

    #include 
    
    #define FW(x,y) FindWindowEx(x, NULL, y, "")
    
    int main ()
    {
    
        HWND hNotificationArea;
        RECT r;
    
        //WinXP
        // technique found at:
        // https://stackoverflow.com/questions/74723/can-you-send-a-signal-to-windows-explorer-to-make-it-refresh-the-systray-icons#18038441
        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;
    
    }
    

提交回复
热议问题