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

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

  hot3.png

问题来源:

本例效果图:
26153718_YnJJ.png

代码文件:

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.
窗体文件:

object Form1: TForm1  Left = 0  Top = 0  Caption = 'Form1'  ClientHeight = 142  ClientWidth = 300  Color = clBtnFace  Font.Charset = DEFAULT_CHARSET  Font.Color = clWindowText  Font.Height = -11  Font.Name = 'Tahoma'  Font.Style = []  OldCreateOrder = False  OnCreate = FormCreate  PixelsPerInch = 96  TextHeight = 13  object Button1: TButton    Left = 182    Top = 14    Width = 106    Height = 25    Caption = 'Button1'    TabOrder = 0    OnClick = Button1Click  end  object ListView1: TListView    Left = 8    Top = 8    Width = 169    Height = 119    Columns = <>    TabOrder = 1  end  object Button2: TButton    Left = 182    Top = 59    Width = 106    Height = 25    Caption = 'Button2'    TabOrder = 2    OnClick = Button2Click  end  object Button3: TButton    Left = 182    Top = 102    Width = 106    Height = 25    Caption = 'Button3'    TabOrder = 3    OnClick = Button3Click  endend

转载于:https://my.oschina.net/hermer/blog/320436

你可能感兴趣的文章
Fedora/Redhat 在线安装更新软件包,yum 篇 ── 给新手指南 (转载)
查看>>
cxgrid上如何取FOOTER上合计的值
查看>>
superobject 序列数据集
查看>>
linux目录和文件权限修改
查看>>
做人比做事更重要
查看>>
防止MDaemon的POP和SMTP泄露你的信息
查看>>
C#发现之旅第二讲 C#-XSLT开发
查看>>
《网站说服力——营销型网站策划》
查看>>
具体数学第二版第三章习题(1)
查看>>
如何高效地管理时间
查看>>
UML及其StarUML介绍
查看>>
一起谈.NET技术,MonoTouch中的MVC简介
查看>>
将WPF UI单元复制到“.NET研究”剪贴板
查看>>
USB Blaster驱动无法安装的解决办法
查看>>
ibatis sqlMap.xml 文件 like 查询的三种方案
查看>>
UIWebView捕捉点击事件
查看>>
关于Java继承问题
查看>>
Yii - 直接执行SQL语句(转)
查看>>
C#事件-事件处理
查看>>
Android——线程通讯类Handler(转)
查看>>