文档章节

显示系统托盘列表(并执行隐藏与显示) - 回复 "anybet" 的问题

涂孟超
 涂孟超
发布于 2014/09/26 15:37
字数 492
阅读 9
收藏 0
问题来源: http://www.cnblogs.com/del/archive/2008/12/30/1364557.html#1417716

本例效果图:



代码文件:
unit Unit1;

interface

uses
  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
  end
end

 
 
 
 
 

 

 

  

本文转载自:http://www.cnblogs.com/del/archive/2008/12/31/1365745.html

共有 人打赏支持
涂孟超
粉丝 12
博文 2011
码字总数 14107
作品 0
深圳
程序员
Deepin Dock 隐藏功能等功能说明

经过Deepin开发和设计师团队不懈的努力,深度桌面环境2.0不断地走向了成熟。由于深度桌面环境2.0部分模块功能已经发生改变,所以本次我们介绍一下当前Dock的改变。 隐藏功能 Dock是用户启动程...

cxbii
2014/07/29
2.6K
6
Linux Deepin 12.12 RC 发布

一、概述 LinuxDeepin 12.12 RC 版本来袭! 继 3 月 28 日 Beta 版本,现在,Linux Deepin 12.12 RC 版本发布了! Linux Deepin 12.12 RC 版本是 Beta 版本的功能增强和改进版本,也是正式版...

火耳
2013/05/24
1K
12
隐身专家

使用隐身专家,按下鼠标中键隐藏桌面上所有窗口,隐身专家还可以隐藏托盘图标。使用隐身专家聊QQ不怕被别人发现,挂游戏不怕被别人发现,使用炒股软件不怕别人发现,看新闻,干私活不怕别人发...

董大鹏
2011/03/23
2.1K
0
william/JTTextView

JTTextView JTTextView是一个Android的EditText扩展,集成了较多的功能,简单易用,免去了开发很多的工作量。 注意:由于Android密码框明文显示也是受保护的,所以再录制明文显示时会黑屏,而...

william
08/25
0
0
QT 托盘类QSystemTrayIcon

QSystemTrayIcon为应用程序在系统托盘中提供一个图标 关于系统托盘的介绍就节省了,但是并不是所有的系统都支持系统托盘,来检查一个系统是 否支持系统托盘,使用静态函数QSystemTrayIcon::...

晨曦之光
2012/04/13
1K
0

没有更多内容

加载失败,请刷新页面

加载更多

jdk 1.8 在线文档

https://docs.oracle.com/javase/8/docs/api/

kuchawyz
11分钟前
1
0
python:有个叫strip的东西.....

strip.....脱.......呃,这个嘛,好吧,也许python的开发团队并不忌讳strip这个词的意思[] lstrip() >>> b' spacious '.lstrip()b'spacious '>>> b'www.example.com'.lstrip(b'cmowz......

Oh_really
24分钟前
0
0
Rails 用现代 Rails 逃离单页面应用 “兔子洞”

在工作共总是觉得turbolinks非常爽,但是却总是被说成是过时的技术,大家都喜欢spa,哪怕不用的spa的人也是禁用掉的多,找不到很好的理由劝说别人使用,这篇文章说的很到位,或者说至少是牛人...

wmzsonic
44分钟前
0
0
Hive 分布式搭建,Spark集成Hive记录

本帖详细介绍搭建步骤,仅仅记录自己搭建过程以及采坑经历。 前提环境: Hadoop集群 版本2.7.2 Spark集群 版本2.1.0 Linux版本 Centos7 准备搭建 MySql版本5.5.61 ,Hive-2.1.0 去官网下载M...

我爱春天的毛毛雨
47分钟前
3
0
打包QML程序

1、windeployqt执行路径(D:\Qt\5.12.0\msvc2017_64\bin)加入到PATH中 2、使用Qt自带的命令行交互 Command 终端(Qt 5.12.0 64-bit for Desktop (MSVC 2017))切换到 Release 编译成功的exe...

渣渣曦
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部