求一个能隐藏系统托盘区任何图标的代码?
如音量图标
网上找到一些,但看不懂!
如音量图标
网上找到一些,但看不懂!
解决方案 »
- memorystring数据类型的position的作用
- treeview实现图标的动态显示?急!急!急!
- 有关TOOLBAR的问题
- delphi 返回 sqlserver 2000的两位小数浮点数变为多位,如何解决显示问题?
- delphi5 developer guide 书中的问题
- fastreport问题,高分赠送
- 有谁知道这个 SQL(SQLServer中) 语句怎么写....
- 如何把DLL中用CreatWindows产生的窗口Dock到我的Panel1上来?
- 关于delphi数据库的问题,我转不过弯儿来,还望各位指教
- 高手们,你怎样学midas结构?
- delphi的线程调用
- 关于消息
从Hide窗口的角度来考虑,是找不到这个图标的句柄。那是因为它一个ImageList,是找不到句柄的(这个和时钟区域不同)。代码:
uses
shellapi;
procedure TForm1.Button1Click(Sender: TObject);
var
nt: TNotifyIconData;
begin
with nt do
begin
cbSize := SizeOf(nt); //#32770
Wnd := FindWindow(nil,'记事本(Top)' );
uid := 0;
uFlags := NIF_ICON or NIF_MESSAGE or NIF_TIP;
uCallbackMessage := WM_USER + 17;
hIcon := 0;
szTip := '';
end;
Shell_NotifyIcon(NIM_DELETE, @nt);
end;
http://topic.csdn.net/u/20080413/14/e470a307-9394-444a-a307-14bdf0c69c63.html之所以献分,是因为我没弄成功,想知道您的答案
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;
如果稍微修改一下,则可隐藏任何一个图标
SendMessage(ShellHandle,TB_HIDEBUTTON,i,1); 这句则可隐藏!I就是图标在托盘中的索引。
http://www.why100000.com/Htmls/_bian_cheng_zhuan_qu435.htm
另外,注意,我刚刚看了下mwy654321的代码
他的代码并不能隐藏托盘的图标,只不过是得到托盘而已。
Info: _TBBUTTON;
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;type
TForm1 = class(TForm)
Button1: TButton;
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}
USES Commctrl,ShellAPI;
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;
procedure TForm1.FormCreate(Sender: TObject);
begin
GetSysTrayWnd;
end;end.
似乎并没有隐藏全部图标?
代码如果你已经下载了,我就删除1.rar了。
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;type
TForm1 = class(TForm)
Button1: TButton;
Memo1: TMemo;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm} USES Commctrl,ShellAPI;
procedure TForm1.Button1Click(Sender: TObject);
var TBHWND:HWND;
i,count:integer;
PID,PRC: THandle;
Buff: PChar;
Info: _TBBUTTON;
R: Cardinal;
S: array[0..1024] of char;
begin
TBHWND := FindWindow('Shell_TrayWnd', nil); // Shell_TrayWnd: 任务栏窗口
TBHWND := FindWindowEx(TBHWND, 0, 'TrayNotifyWnd', nil); // TrayNotifyWnd:任务栏类
TBHWND := FindWindowEx(TBHWND, 0, 'ToolbarWindow32', nil); // ToolbarWindow32:托盘类,是一个toolbarif TBHWND=0 then exit;GetWindowThreadProcessId(TBHWND, @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(TBHWND,TB_BUTTONCOUNT,0 , 0); //托盘中button的个数,不一定是图标的个数,有些button是隐藏的。for i:=0 to count-1 do
begin
FillChar(Info, SizeOf(Info), 0);
WriteProcessMemory(PRC, Buff, @Info, SizeOf(Info), R); //消息使用的内存空间必须在Shell之内,所以利用ReadProcessMemoery和WriteProcessMemory。
SendMessage(TBHWND, TB_GETBUTTON, i, integer(Buff));
ReadProcessMemory(PRC, Buff, @Info, SizeOf(Info), R); SendMessage(TBHWND, TB_GETBUTTONTEXT, Info.idCommand, integer(integer(@Buff[0]) + SizeOf(Info)));
ReadProcessMemory(PRC, Pointer(integer(@Buff[0]) + SizeOf(Info)), @S[0], SizeOf(S), R); if pos('QQ',StrPas(S))>0 then //如果button的TEXT中包含'QQ'
SendMessage(TBHWND, TB_DELETEBUTTON, i, 0); //删除
Form1.Memo1.Lines.Add(StrPas(S)); //在MEMO1中记录所有button的TEXT
end;
VirtualFreeEx(PRC, Buff, 0, MEM_RELEASE);
CloseHandle(PRC);
end;end.
这是我找到的代码,也没有隐藏指定的图标?
代码,我没有测试清楚!是可以隐藏的!但是有的图标我还是没有隐藏成功!遗憾!
用了一下,这个软件,感觉比较理想
程序员在深圳QQ群大集 专业分类:
程序员在深圳JAVA群4247660
程序员在深圳c++群15195967
程序员在深圳.NET群Ⅱ:12203296
程序员在深圳TCP/IP协议栈开发:16956462
程序员在深圳JS & AJAX群:12578377
程序员在深圳英语学习群:23864353
深序员在深圳VB:11055959
程序员在深圳c++Ⅱ17409451
程序员在深圳c++群15195967
程序员在深圳嵌入式开发群37489763
程序员在深圳移动开发群31501597
程序员在深圳创业群33653422 不限专业分类:
高级群:17538442
第三群:2650485
第二群:7120862
第五群:29537639
第四群:28702746
第六群:10590618
第七群:10543585
第八群:12006492
第九群:19063074
第十群:2883885
第十一群:25460595
第十二群:9663807 深圳程序员QQ群联盟成立两年多,拥有三十个以上的QQ群,人数达两千多人,有30%以上的成员的经验丰富 的老手,包括国内外顶级大公司的成员(如微软、IBM,SUN,华为)、国内著名高校和研究院成员,和有 丰富实践经验的高级程序(包括参加过上亿元的项目的架构师),有很热爱技术的成员(包括自己写过嵌入 式操作系统),还有少数女程序员。 现推介如下QQ群,如有兴趣速速加入:深程高级群:17538442(此群不欢迎新手,已经在深圳工作的,月薪 6K以下的不欢迎)c++:15195967 .NET:12203296 mobile:31501597嵌入式:37489763 JAVA:4247660
——————————————————————————————————————————
希望大家不要认为群能给你送来什么,这只是一个平台,让同等水平的程序员有个交流的机会或许能得到 一点信息或许能带来一点启发。
有人说常聊QQ的人肯定技术不怎么样,但其实很多技术高朋友不需要做一些简单的重复劳动所以还是有 时间聊天的。 *****************************************************************************
count:=SendMessage(TBHWND,TB_BUTTONCOUNT,0 , 0); //托盘中button的个数,不一定是图标的个数,有些button是隐藏托盘中的Button的个数就是图标的个数!想想ToolBar的原理,那个东西其实就是一个ToolBar了,
图标就是附于Button上的!我的那个代码其实是可以隐藏所有图标的!
你看看这里:
http://community.csdn.net/help/GetUsablePoint.htm
每次发贴提问都可以免费得到30分,如果发贴低于30分,那么虽然是在提问问题表面上是花费可用分了,实际上反而赚分了。基本上低于80分的贴子我在回答的时候都会要求加分,否则只帮楼主顶下贴子算了。你看我提问过的问题,每次给分都不低于100分,我不是那种没有诚意的人。有些人在贴子标题中注明非常焦急,可是贴子才给了20分,我不相信他仅有这20分的这种解释,因为每次发贴都可以得到30分。楼主还算不错了,我的问题不是针对楼主。