博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
显示系统托盘列表(并执行隐藏与显示)
阅读量:6997 次
发布时间:2019-06-27

本文共 2388 字,大约阅读时间需要 7 分钟。

代码文件:


unit Unit1;interfaceuses  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,  Dialogs, StdCtrls, ComCtrls;type  TForm1 = class(TForm)    Button1: TButton;    Button2: TButton;    Button3: TButton;    ListView1: TListView;    procedure FormCreate(Sender: TObject);    procedure Button1Click(Sender: TObject);    procedure Button2Click(Sender: TObject);    procedure Button3Click(Sender: TObject);  end;var  Form1: TForm1;implementation{$R *.dfm}uses Commctrl;{获取托盘句柄的函数}function TrayHWnd: HWND;var  h,hTmp: HWND;begin  h := FindWindow('Shell_TrayWnd', nil);  h := FindWindowEx(h, 0, 'TrayNotifyWnd', nil);  hTmp := FindWindowEx(h, 0, 'SysPager', nil);  if hTmp <> 0 then h := hTmp;  hTmp := FindWindowEx(h, 0, 'ToolbarWindow32', nil);  if hTmp <> 0 then h := hTmp;  Result := h;end;{控件初始化}procedure TForm1.FormCreate(Sender: TObject);begin  ListView1.Align := alLeft;  ListView1.Columns.Add;  ListView1.Columns.Items[0].Caption := '托盘图标列表';  ListView1.Columns.Items[0].Width := 500;  Listview1.ViewStyle := vsReport;  Button1.Caption := '显示托盘列表';  Button2.Caption := '全部隐藏';  Button3.Caption := '取消隐藏';  Button2.Enabled := False;  Button3.Enabled := False;end;{提取列表}procedure TForm1.Button1Click(Sender: TObject);var  h: HWND;  count,size,num: Cardinal;  pid, ph: Cardinal;  p: Pointer;  icoBtn: TTBButton;  buf: array[0..255] of WideChar;  i: Integer;  item: TListItem;begin  h := TrayHWnd;  count := SendMessage(h, TB_BUTTONCOUNT, 0, 0);  size := SizeOf(TTBButton);  GetWindowThreadProcessId(h, pid);  ph := OpenProcess(PROCESS_VM_READ, False, pid);  for i := 0 to count - 1 do  begin    SendMessage(h, TB_GETBUTTON, i, DWORD(p));    ReadProcessMemory(ph, p, @icoBtn, size, num);    ReadProcessMemory(ph, Pointer(icoBtn.iString), @buf, Length(buf)*SizeOf(buf[0]), num);    item := ListView1.Items.Add;    item.Caption := buf;  end;  CloseHandle(ph);  Button2.Enabled := True;  Button3.Enabled := True;end;{全部隐藏}procedure TForm1.Button2Click(Sender: TObject);var  h: HWND;  count,i: Cardinal;begin  h := TrayHWnd;  count := SendMessage(h, TB_BUTTONCOUNT, 0, 0);  for i := 0 to count - 1 do SendMessage(h, TB_HIDEBUTTON, i, 1);end;{全部显示}procedure TForm1.Button3Click(Sender: TObject);var  h: HWND;  count,i: Cardinal;begin  h := TrayHWnd;  count := SendMessage(h, TB_BUTTONCOUNT, 0, 0);  for i := 0 to count - 1 do SendMessage(h, TB_HIDEBUTTON, i, 0);end;end.

转载地址:http://xhbvl.baihongyu.com/

你可能感兴趣的文章
golang笔记——函数与方法
查看>>
Linux LVM硬盘管理及LVM扩容
查看>>
针对某个数据库error做systemstate dump
查看>>
iOS开发--SWRevealViewController
查看>>
JSP--百度百科
查看>>
TCP/IP详解学习笔记(2)-数据链路层
查看>>
VMware+Windgb+Win7内核驱动调试
查看>>
initWithFrame、initWithCoder、awakeFromNib的区别和调用次序 & UIViewController生命周期 查缺补漏...
查看>>
客户端请求新页面
查看>>
VMware安装CentOS时,无法以图形界面安装解决办法
查看>>
SpringMvc文件资源防止被外链链接
查看>>
Spring 4 官方文档学习(十一)Web MVC 框架
查看>>
使用 Spring Boot 快速构建 Spring 框架应用--转
查看>>
document.ready()的用法
查看>>
C# 压缩文件
查看>>
JSP之include动态包含与静态包含
查看>>
Atitit usrqbg1834 html的逻辑化流程化 规范标准化解决方案
查看>>
Jquery中ajax方法data参数的用法
查看>>
sqlserver巧用row_number和partition by分组取top数据
查看>>
Quartz 2D
查看>>