|
|
导航: |
论坛 -> DELPHI技术
斑竹:liumazi,sephil |
|
作者: |
|
2003/11/18 11:03:43 |
标题: |
高手请进-如何获得你想要的系统托盘图标? |
浏览:2178 |
|
加入我的收藏 |
楼主: |
最近做了一个试验,从系统托盘(桌面右下角一排图标)里获取你想要的任意一个应用程序的图标,并把它显示出来,我对API不是很熟,很希望和大家交流。 我当时用下面语句: hdicon := FindWindow(@wndClass[0], nil);//(@wndClass[0]是应用程序名称 image1.Picture.Icon.handle := CopyIcon(hdicon); 但是这样好像不行。
----------------------------------------------
网络,数据库,IOCP应用,API应用等,欢迎交流: http://blog.163.com/huangjian_w/ |
作者: |
bios (阿贡) |
★☆☆☆☆ |
-
|
盒子中级会员 |
|
2003/11/18 11:17:42 |
1楼: |
???
----------------------------------------------
|
作者: |
|
2003/11/18 11:44:35 |
2楼: |
你说的没错,hdicon 与aa.handle 结果都是0 ,所以这样就取不到托盘图标了。 我现在也想不出为什么,不过我想最大可能问题是在findwindow函数,它返回的值就是0,如果它找不到应该返回nil,如果找到了干吗要返回0 ?
----------------------------------------------
网络,数据库,IOCP应用,API应用等,欢迎交流: http://blog.163.com/huangjian_w/
|
作者: |
bios (阿贡) |
★☆☆☆☆ |
-
|
盒子中级会员 |
|
2003/11/18 16:19:53 |
3楼: |
调用: GetFileIcon(File.c_str(),Handle,(LPARAM)Image1);
函数: void GetFileIcon(char *File,HANDLE Handle,LPARAM lParam) { Graphics::TIcon *Icon1 = new Graphics::TIcon(); try { TImage *img=(TImage *)lParam; HICON icon; if((int)ExtractIcon(Handle,File,-1)) { icon=ExtractIcon(Handle,File,0); ICONINFO info; if(GetIconInfo(icon,&info)) { if(info.fIcon && info.hbmMask && info.hbmColor) { Icon1->ReleaseHandle(); Icon1->Handle=icon; char *Tmp="~temp.ico"; Icon1->SaveToFile(Tmp); img->Picture->LoadFromFile(Tmp); DeleteFile(Tmp); } } } } catch(...) { }; delete Icon1; }
----------------------------------------------
|
作者: |
|
2003/11/19 20:19:22 |
4楼: |
我并不是想从静态的文件里取得,我是想从当前运行的进程里获得图标,有的程序在系统托盘上随时间或其他条件可以变化托盘图标的,我就想随时取得它每一个变化的图标,只要它变了我就知道。我想这个跟从文件里取是有点不一样的。
----------------------------------------------
网络,数据库,IOCP应用,API应用等,欢迎交流: http://blog.163.com/huangjian_w/
|
作者: |
bios (阿贡) |
★☆☆☆☆ |
-
|
盒子中级会员 |
|
2003/11/19 20:50:44 |
5楼: |
是啊这些取图标的API函数都是以文件路径做参数啊 偶只能取全部的 只取 系统托盘的偶也不会啊!
此帖子包含附件:
大小:53.3K |
----------------------------------------------
|
作者: |
|
2003/11/19 21:30:50 |
6楼: |
以前做的托盘图标动画显示,就是把连续几个icon放到imagelist里面,用timer来控制,一定间隔时间就把应用程序图标切换到下一个,我想关键就是要正确获得当前运行应用程序的进程句柄, 然后再想办法看看如何取得它的图标。
----------------------------------------------
网络,数据库,IOCP应用,API应用等,欢迎交流: http://blog.163.com/huangjian_w/
|
作者: |
bios (阿贡) |
★☆☆☆☆ |
-
|
盒子中级会员 |
|
2003/11/19 21:34:29 |
7楼: |
这些取图标的API函数都是以文件路径做参数啊
取得进程句柄,还要进一步取到他们所在路径才行啊
----------------------------------------------
|
作者: |
|
2003/11/19 21:46:37 |
8楼: |
我试过好像如果以文件路径做参数,取得图标都是一个样,没有什么变化。不管你在运行期间怎么变,结果都是一样,所有我才想能否不通过文件路径做参数,想想其他办法,或者不用windows API,自己写个什么函数试试。
----------------------------------------------
网络,数据库,IOCP应用,API应用等,欢迎交流: http://blog.163.com/huangjian_w/
|
作者: |
bios (阿贡) |
★☆☆☆☆ |
-
|
盒子中级会员 |
|
2003/11/20 17:30:38 |
9楼: |
啊,偶们这些 面向“WINDOWS可视化编程 大多底层”都是API 包括 开发工具本身 你看看DELPHI的底层代码 你会发现 最终这些 控件代码 都会追述到API或汇编
----------------------------------------------
|
作者: |
|
2003/11/20 22:59:57 |
10楼: |
你说的倒是事实,我的意思是我们不必局限于windows提供的API,可以自己写,或者根本就没有那么负责,只是思路问题。我觉得这个试验很有挑战性,不到山穷水尽我是不会放弃的,除非microsoft告诉我你这个试验根本就不可能实现。 很希望和你再次交流。我想考虑的人多了,总是有思路的。
----------------------------------------------
网络,数据库,IOCP应用,API应用等,欢迎交流: http://blog.163.com/huangjian_w/
|
作者: |
bios (阿贡) |
★☆☆☆☆ |
-
|
盒子中级会员 |
|
2003/11/21 11:21:01 |
11楼: |
1)那要偶们修改或重新编写一个适合偶们思想的API接口 要把路径接口改为 句柄类型
2)但API是一些 IN OUT的类型的 底层 接口代码写起来的, 所以 真想不出 微软是如何建立 这些 句柄机制,硬盘文件格式读写, 和这么友好的图形界面!
----------------------------------------------
|
|