刷新托盘区域
我用杀进程的方式,关闭掉一个程序后,其托盘图标还在托盘区,没有给消失,需要鼠标移动上去后,才会消失,如何用程序来实现刷新托盘区域呢? 也可以在我程序杀掉进程前,删除/隐藏该托盘图标。
我找到了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# 中没有,并且这段代码不全。 不知道如何修改,
那位大哥,高人帮忙解决解决, 谢谢。 在线。