高手可能也解决不了,分全给,没看到有人能解决的问题,找遍了很多论坛。2天多过去了,问题还没解决!! ( 积分: 46 )

  • 主题发起人 主题发起人 gzxyq
  • 开始时间 开始时间
G

gzxyq

Unregistered / Unconfirmed
GUEST, unregistred user!
在不影响软件A,B正常运行的情况下:
1. 如何写程序去隐藏软件A在托盘上的图标,A(如QQ,msn)。
2.如何写程序去隐藏软件B在任务栏上的按钮,B如word,excel,即不出现在任务栏上。
我找了很多论坛,看到很多人在问,但是没看到有一个朋友能说出正确答案的。
我的分不多,但全部贡献给能回答这个问题的能者。

下面方法是可以隐藏托盘图标,但软件A的Wnd是多少呢??uId又是多少呢?我用CoolTrayIcon做的测试,发现它的hWnd每次运行都不一样的,值如4326152,它也不是窗口Form的handle,uId值为14043088
var
IconData:TNotifyIconData;
begin
IconData.cbSize:=SizeOf(IconData);
IconData.Wnd:=CoolTrayIcon1.IconData.hWnd;
IconData.uID:=CoolTrayIcon1.IconData.uID;
Shell_NotifyIcon(NIM_DELETE,@IconData);
 
在不影响软件A,B正常运行的情况下:
1. 如何写程序去隐藏软件A在托盘上的图标,A(如QQ,msn)。
2.如何写程序去隐藏软件B在任务栏上的按钮,B如word,excel,即不出现在任务栏上。
我找了很多论坛,看到很多人在问,但是没看到有一个朋友能说出正确答案的。
我的分不多,但全部贡献给能回答这个问题的能者。

下面方法是可以隐藏托盘图标,但软件A的Wnd是多少呢??uId又是多少呢?我用CoolTrayIcon做的测试,发现它的hWnd每次运行都不一样的,值如4326152,它也不是窗口Form的handle,uId值为14043088
var
IconData:TNotifyIconData;
begin
IconData.cbSize:=SizeOf(IconData);
IconData.Wnd:=CoolTrayIcon1.IconData.hWnd;
IconData.uID:=CoolTrayIcon1.IconData.uID;
Shell_NotifyIcon(NIM_DELETE,@IconData);
 
具体怎么实现不清楚,但我用过的一些破网软件,在退出后都能够把托盘图标去掉。
 
隐藏软件B在任务栏上的按钮(具体怎么用你看看)
SetWindowLong(Application,Handle,GWL_EXSTYLE,WS_EX_TOOLWINDOW);
隐藏托盘图标
如上你提出的.
关键是找进程ID,窗口ID,
窗口Id 用EnumWindows
进程ID Tool32 具体什么记不住了
 
to crazymoon 你的做法并不行,要么请你试试看。谢谢
 
我知道可以做到的,我见过。
 
to let_it_be,不好意思,我觉得你的说法没什么意义!!呵呵
 
A的Wnd可以用HWND FindWindow(LPCTSTR lpClassName, LPCTSTR lpWindowName)来找,UID我就不知道了
 
还是没有答案,各路高手,请伸出你的手啊!!!
 
参考: http://www.soulan.com/kingron/dispbbs.asp?boardID=6&ID=164&page=2
 
刘麻子:你的方法,图标是隐藏了,但会留下空白区,在空白区上点击,它的菜单还在
 
干脆把整个任务栏和托盘区都隐藏,这编起来就简单了吧!!再把需要的又画上!
 
托盘区的图标你要把uId等记录了别的程序才能消掉的,我做的看门狗就是这么做的,放注册表里。
第二个问题就简单多了,网上代码很多,就是不显示在任务栏的程序,但是想在其他程序里控制他是不是显示在任务栏就要给这个程序加运行参数了,参数对的时候就运行隐藏代码,在winexec()里加你的隐藏参数
 
to pl5th2001,不好意思,能不能具体点,不明白你的意思!!!!!!
 
学习学习吧,没有搞过!
 
我对此没有什么兴趣,但我比较支持这种探索性的劳动。就我能够想到的大约思路你看看行不行:

1.隐藏托盘图标:
托盘图标的产生,是使用了一个Shell的API:Shell_NotifyIcon,从函数的表达来看,应该
是对Shell已经存在的某个列表条目填充我们自己的内容,那么我们追踪一下需要填充些什
么内容:

TNotifyIconData = record
cbSize: DWORD;
Wnd: HWND;
uID: UINT;
uFlags: UINT;
uCallbackMessage: UINT;
hIcon: HICON;
szTip: array [0..63] of WideChar;
end;
其中,它要求我们提供一个窗口的HWND和消息的标识。

好了,机会来了。这也就表明它是使用消息传递来进行的,而且这个消息传递必须使用一个
窗口。那么让我们看看通常编程中是怎么编写托盘图标的程序的,总结一下大约也就二种:
A。直接在主窗体的某些环节写托盘的应用,这时候上面那个HWND就是主窗口自己的句柄。
B。使用AllocateHWnd创建一个不可见窗口,象CoolTrayIcon的做法。

我们知道,大多数情况下,如果我们找到了这个窗口Handle,我们就比较有希望对它进行操
作,比如截获它的窗口过程等手段来改变一些行为。主窗口直接做为托盘图标的消息响应窗
口的情况下,这个找主窗口应该比较好找,对于象CoolTrayIcon的做法我们可以使用另外一
个函数:EnumThreadWindows来查找,要使用这个函数,还要先去获得进程的ID。获取这些
东西从代码来讲没有太大问题,大富翁上有得是代码,就是有点烦。找到窗口、截取窗口
进程以后,就需要你通过分析来把它搞定了,我只是讲我的思路,能不能实现我可不知道。

2。隐藏任务栏按钮。这个主题我曾经在帖子里好像讲到过。现在我也只是从另外角度来讲
我的看法,仅供参考:通常隐藏任务按钮有二个办法:通过RegisterServiceProcess和另外
一个办法是设置窗口的扩展风格。

分析思路也是从这二个方法开始:RegisterServiceProcess需要一个进程ID就可以了,而
进程ID的获取,大富翁上讲了又讲,基本上没什么味道了。改变扩展风格也就是归结为获得
窗口Handle,这好像在大富翁也是讲了又讲的烂主题了。

好了,我的思路发完了,后面就要看你的功力了。呵呵。

另外,这种鸟标题建议以后尽量少用,我支持你的精神,但讨厌你的发帖做法。
 
1。我试过,如果象象CoolTrayIcon这种做法的,它的不可见窗口是没有标题的,我们可能会找出一堆handle,其中一个是我们要的,但不知哪个是。
2。Uid又如何找呢。它应该不是窗口的handle
 
多人接受答案了。
 
后退
顶部