刷新托盘区域

gctren gctren 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
我用杀进程的方式,关闭掉一个程序后,其托盘图标还在托盘区,没有给消失,需要鼠标移动上去后,才会消失,如何用程序来实现刷新托盘区域呢? 也可以在我程序杀掉进程前,删除/隐藏该托盘图标。

我找到了DEPHI的:
function GetSysTrayWnd: HWND;
begin
result := FindWindow('Shell_TrayWnd',nil);
result := FindWindowEx(result,0,'TrayNotifyWnd',nil);
result := FindWindowEx(result,0,'SysPager',nil);
result := FindWindowEx(result,0,'ToolbarWindow32',nil);
end;

procedure FreeIcon;
var
ShellHandle: THandle;
PID: THandle;
PRC: THandle;
Buff: pchar;
i,Count: integer;
Info: _TBBUTTON;
R: Cardinal;
S: array[0..1024] of char;
begin
ShellHandle := GetSysTrayWnd; //得到托盘处句炳
GetWindowThreadProcessId(ShellHandle, @PID);
PRC := OpenProcess(PROCESS_VM_OPERATION or PROCESS_VM_READ or PROCESS_VM_WRITE, False, PID);
Buff:=VirtualAllocEx(PRC, nil, 4096, MEM_RESERVE or MEM_COMMIT, PAGE_READWRITE);
Count := SendMessage(ShellHandle, TB_BUTTONCOUNT, 0, 0);
for i := 0 to Count - 1 do
begin
FillChar(Info, SizeOf(Info), 0);
WriteProcessMemory(PRC, Buff, @Info, SizeOf(Info), R);
SendMessage(ShellHandle, TB_GETBUTTON, i,integer(Buff));
ReadProcessMemory(PRC, Buff, @Info, SizeOf(Info), R);
SendMessage(ShellHandle, TB_GETBUTTONTEXT, Info.idCommand, integer(integer(@Buff[0]) + SizeOf(Info)));
ReadProcessMemory(PRC, Pointer(integer(@Buff[0]) + SizeOf(Info)), @S[0], SizeOf(S), R);
SendMessage(ShellHandle,TB_HIDEBUTTON,i,1);
SendMessage(ShellHandle, TB_AUTOSIZE, 0, 0)
end;
VirtualFreeEx(PRC, Buff, 0, MEM_RELEASE);
CloseHandle(PRC);
end;

但其实的FILLCHAR 在C# 中没有,并且这段代码不全。 不知道如何修改,

那位大哥,高人帮忙解决解决, 谢谢。 在线。
...全文
评论 20
收藏 已收藏
分享
返回顶部
gctren
C# 111,128 成员 642,537 内容