C++刷新托盘程序

不念不忘少年蓝@ 2022-03-14 20:58 463阅读 0赞

项目中需要重启一个托盘程序。但是重启之后,任务栏的托盘程序图标增加了一个,原来的图标并没有消失。
原来任务栏的托盘程序图标,当鼠标在上面移动过之后才会刷新。所以一个解决办法就是模拟鼠标事件,模拟鼠标在上面的所有图标都移动过。但是这种办法对于图标在隐藏任务栏中则不起作用。

  1. #include <windows.h>
  2. #include <iostream>
  3. int main() {
  4. HWND shell_tray_wnd_handle = FindWindow(L"Shell_TrayWnd", NULL);
  5. HWND tray_notify_wnd_handle = FindWindowEx(shell_tray_wnd_handle, 0, L"TrayNotifyWnd", NULL);
  6. HWND sys_paper_handle = FindWindowEx(tray_notify_wnd_handle, 0, L"SysPager", NULL);
  7. HWND tool_bar_handle = NULL;
  8. if ( sys_paper_handle != NULL ) {
  9. tool_bar_handle = FindWindowEx(sys_paper_handle, 0, L"ToolbarWindow32", NULL);
  10. } else {
  11. tool_bar_handle = FindWindowEx(tray_notify_wnd_handle, 0, L"ToolbarWindow32", NULL);
  12. }
  13. if ( tool_bar_handle == NULL ) {
  14. return 0;
  15. }
  16. RECT rect;
  17. GetWindowRect(tool_bar_handle, &rect);
  18. int width = rect.right - rect.left;
  19. int height = rect.bottom - rect.top;
  20. for (int x = 1; x < width; x += 2) {
  21. for (int y = 1; y < height; y += 2) {
  22. SendMessage(tool_bar_handle, WM_MOUSEMOVE, 0, MAKELPARAM(x, y));
  23. }
  24. }
  25. return 0;
  26. }

发表评论

表情:
评论列表 (有 0 条评论,463人围观)

还没有评论,来说两句吧...

相关阅读

    相关 swing 托盘

    参考文章:[swing 托盘][swing] [JFrame实现系统托盘功能缩放在任务栏,窗体图标自定义][JFrame] [swing 最小化成托盘][swing 1]

    相关 C++刷新托盘程序

    项目中需要重启一个托盘程序。但是重启之后,任务栏的托盘程序图标增加了一个,原来的图标并没有消失。 原来任务栏的托盘程序图标,当鼠标在上面移动过之后才会刷新。所以一个解决办法