win11系统托盘程序读取失败

手里有一个软件,其中有一个功能需要读取windows系统的托盘程序。就是获取窗口句柄,读取托盘程序图标,然后遍历图标获取每个程序的信息。关键代码大概如下:
HWND hWnd,hWndPaper;
unsigned long lngPID;
long ret,lngButtons;
HANDLE hProcess;
LPVOID lngAddress;
long lngTextAdr,lngHwndAdr,lngHwnd,lngButtonID;
TCHAR strBuff[1024]={0};
TRAYDATA trayData = {0};
TBBUTTON btnData={0};

hWnd = FindWindow(_T("Shell_TrayWnd"), NULL);
hWnd = FindWindowEx(hWnd, 0, _T("TrayNotifyWnd"), NULL);
hWndPaper = FindWindowEx(hWnd, 0, _T("SysPager"), NULL);
if(!hWndPaper)
hWnd = FindWindowEx(hWnd, 0, _T("ToolbarWindow32"), NULL);
else
hWnd = FindWindowEx(hWndPaper, 0, _T("ToolbarWindow32"), NULL);
ret = GetWindowThreadProcessId(hWnd, &lngPID);
hProcess = OpenProcess(PROCESS_ALL_ACCESS|PROCESS_VM_OPERATION|PROCESS_VM_READ|PROCESS_VM_WRITE,0,lngPID);
lngAddress = VirtualAllocEx(hProcess,0, 0x4096, MEM_COMMIT, PAGE_READWRITE);
lngButtons = SendMessage(hWnd, TB_BUTTONCOUNT, 0, 0);
RECT rc; POINT point;
LPVOID lngRect = VirtualAllocEx(hProcess,0,sizeof(RECT), MEM_COMMIT, PAGE_READWRITE);

CRect rect;
for(int i=0 ;i< lngButtons;i++)
{
int j = i;
ret = SendMessage(hWnd,TB_GETBUTTON,j,long(lngAddress));
ret = ReadProcessMemory(hProcess, LPVOID(long(lngAddress) + 16),&lngTextAdr,4,0);
if(lngTextAdr != -1)
{
ret = ReadProcessMemory(hProcess, LPVOID(lngTextAdr),strBuff,1024,0);
CString str(strBuff);
if (str.Compare(m_NotifyIconData.szTip) == 0)
{
::SendMessage(hWnd,TB_GETITEMRECT,(WPARAM)j,(LPARAM)lngRect);
ReadProcessMemory(hProcess,lngRect,&rc, sizeof(rc),0); //获取托盘图标区域
CWnd::FromHandle(hWnd)->ClientToScreen(&rc);
}
}
}

上面的程序只是示意,并非程序中的代码,程序中的代码还写了很多其他代码,就没复制。之前代码一直都是正常运行的,但是最近win11出了一个更新KB5018490,把托盘功能给改了,导致上面的代码不能正常读取了,读取到托盘图标的个数为零。
我对windows编程不是很懂,现在就想让程序能在系统更新后继续正常读取托盘。请各位熟悉托盘的朋友帮帮忙,告诉我win11的更新到底改了什么,最新的读取方法是怎样的,程序该如何对应修改。
谢谢。

spy++定位托盘图标区域,类名没变化吗?

感谢回复。现在的问题就是不知道系统哪个地方变了,毫无头绪,我连查文档都不知道该从哪查起。最新的win11更新中,托盘图标支持拖动移动位置,托盘的逻辑应该变了,读取托盘图标的方法应该也相应变了。

我很想知道啥软件

类名没变化吗

方案一:
点“开始”图标,然后点用户头像,点击注销,重启后系统托盘可正常调出。
此方案解决本机问题。

方案二:
下载Dism++软件,把系统优化里面的“隐藏操作中心任务栏托盘”关闭。
此方案未尝试。
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\SOFTWARE\Policies\Microsoft\Windows\Explorer]

"DisableNotificationCenter"=dword:00000000

方案三:
取消禁用操作中心

图标默认显示在托盘中,如果没有的话应该无法调取。可以插入符号按钮查看所有图标,拖入一个图标到托盘,永久显示。看看这样是否能调取到。

读取不到右下角托盘程序?那托盘程序确定在右下角那里么?

参考链接