DELPHI盒子
!实时搜索: 盒子论坛 | 注册用户 | 修改信息 | 退出
检举帖 | 全文检索 | 关闭广告 | 捐赠
技术论坛
 用户名
 密  码
自动登陆(30天有效)
忘了密码
≡技术区≡
DELPHI技术
lazarus/fpc/Free Pascal
移动应用开发
Web应用开发
数据库专区
报表专区
网络通讯
开源项目
论坛精华贴
≡发布区≡
发布代码
发布控件
文档资料
经典工具
≡事务区≡
网站意见
盒子之家
招聘应聘
信息交换
论坛信息
最新加入: eyang11
今日帖子: 21
在线用户: 14
导航: 论坛 -> DELPHI技术 斑竹:liumazi,sephil  
作者:
男 huangjian_w (海纳百川) ★☆☆☆☆ -
盒子活跃会员
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楼: ???
----------------------------------------------
按此在新窗口浏览图片
按此在新窗口浏览图片
作者:
男 huangjian_w (海纳百川) ★☆☆☆☆ -
盒子活跃会员
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;
}



----------------------------------------------
按此在新窗口浏览图片
按此在新窗口浏览图片
作者:
男 huangjian_w (海纳百川) ★☆☆☆☆ -
盒子活跃会员
2003/11/19 20:19:22
4楼: 我并不是想从静态的文件里取得,我是想从当前运行的进程里获得图标,有的程序在系统托盘上随时间或其他条件可以变化托盘图标的,我就想随时取得它每一个变化的图标,只要它变了我就知道。我想这个跟从文件里取是有点不一样的。
----------------------------------------------
网络,数据库,IOCP应用,API应用等,欢迎交流:
http://blog.163.com/huangjian_w/
作者:
男 bios (阿贡) ★☆☆☆☆ -
盒子中级会员
2003/11/19 20:50:44
5楼: 是啊这些取图标的API函数都是以文件路径做参数啊
偶只能取全部的 
只取 系统托盘的偶也不会啊!
此帖子包含附件:
JPEG 图像
大小:53.3K
----------------------------------------------
按此在新窗口浏览图片
按此在新窗口浏览图片
作者:
男 huangjian_w (海纳百川) ★☆☆☆☆ -
盒子活跃会员
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函数都是以文件路径做参数啊

取得进程句柄,还要进一步取到他们所在路径才行啊
----------------------------------------------
按此在新窗口浏览图片
按此在新窗口浏览图片
作者:
男 huangjian_w (海纳百川) ★☆☆☆☆ -
盒子活跃会员
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或汇编
----------------------------------------------
按此在新窗口浏览图片
按此在新窗口浏览图片
作者:
男 huangjian_w (海纳百川) ★☆☆☆☆ -
盒子活跃会员
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的类型的 底层 接口代码写起来的,
所以 真想不出 微软是如何建立 这些 句柄机制,硬盘文件格式读写,
和这么友好的图形界面!
----------------------------------------------
按此在新窗口浏览图片
按此在新窗口浏览图片
信息
登陆以后才能回复
Copyright © 2CCC.Com 盒子论坛 v3.0.1 版权所有 页面执行85.9375毫秒 RSS