利用Delphi全面控制Windows任务栏
使用Windows95/NT/98操作系统的用户知道:Windows正常启动后,在电脑屏幕下方出现一块 任务栏。从系统功能角度而言,整个任务栏包括几个不同的子区域,从左至右依次是:开始 按钮、应用程序切换区(Application Switch Bar)、任务栏通知区(Notification Area)以 及任务栏时钟。与其它Windows应用程序相同,任务栏程序(systray.exe)由几个不同的窗体 组成,这些窗体是具有各自的窗口类名、显示方式等信息。因此,只要得到有关窗口信息, 即可通过编程全面控制Windows任务栏的不同区域。
1. 编程思想
(1)任务栏窗体的窗口信息为:
①任务栏的窗口类名是:ShellTrayWnd。
②开始按钮的窗口类名是:Button。
③应用程序切换区的窗口类名是:ReBarWindow32。
④任务栏通知区的窗口类名是:TrayNotifyWnd。
⑤任务栏时钟的窗口类名是:TrayClockWClass。
(2)调用FindWindow函数得到任务栏的窗口句柄。
(3)调用FindWindowEx函数得到任务栏各子区域的窗口句柄。
(4)根据窗口句柄,调用ShowWindow函数控制任务栏各区域显示或隐藏 (show/hide);调用En ableWindow函数控制任务栏各区域有效或无效(enabled/disabled)。
2. 编程方法
(1)在Delphi3.0 IDE中新建工程Project1, Project1中包含Form1, 窗体如下图所示:
(2)定义窗口句柄数组:Wnd:array[0..4] of THandle;
(3)GetHandles过程代码如下:
procedure TForm1.GetHandles;
begin
//得到Tray Bar的窗口句柄;
Wnd[0]:=FindWindow(′ShellTrayWnd′,nil);
//得到开始按钮的窗口句柄;
Wnd[1]:=FindWindow(′ShellTrayWnd′,nil);
Wnd[1]:=FindWindowEx(Wnd[1],HWND(0),′Button′,nil); //得到应用程序切换区的窗口句柄;
Wnd[2]:=FindWindow(′ShellTrayWnd′,nil);
Wnd[2]]:=FindWindowEx(Wnd[2],HWND(0),′ReBarWindow32′,nil);
//得到任务栏通知区的窗口句柄;
Wnd[3]:=FindWindow(′ShellTrayWnd′,nil);
Wnd[3]:=FindWindowEx(Wnd[3],HWND(0),′TrayNotifyWnd′,nil);
//得到任务栏时钟的窗口句柄;
Wnd[4]:=FindWindow(′ShellTrayWnd′,nil);
Wnd[4]:=FindWindowEx(Wnd[4],HWND(0),′TrayNotifyWnd′,nil);
Wnd[4]:=FindWindowEx(Wnd[4],HWND(0),′TrayCLockWClass′,nil);
end;
(4)EnableOrDisable过程代码如下:
procedure TForm1.EnableOrDisable(Sender:TOBject);
begin
GetHandles;
if TCheckBox(Sender). Checked then
case TCheckBox(Sender). Tag of
0: EnableWindow(Wnd[0], False);
1: EnableWindow(Wnd[1], False);
2: EnableWindow(Wnd[2], False);
3: EnableWindow(Wnd[3], False);
4: EnableWindow(Wnd[4], False);
end
else
case TCheckBox(Sender). Tag of
0: EnableWindow(Wnd[0], True);
1: EnableWindow(Wnd[1], True);
2: EnableWindow(Wnd[2], True);
3: EnableWindow(Wnd[3], True);
4: EnableWindow(Wnd[4], True);
end;
end;
(5)HideOrShow过程代码如下:
procedure TForm1.HideOrShow(Sender:TObject);
begin
GetHandles;
if TCheckBox(Sender). Checked then
case TCheckBox(Sender). Tag of
0: ShowWindow(Wnd[0],SWHIDE);
1: ShowWindow(Wnd[1],SWHIDE);
2: ShowWindow(Wnd[2],SWHIDE);
3: ShowWindow(Wnd[3],SWHIDE);
4: ShowWindow(Wnd[4],SWHIDE);
end
else
case TCheckBox(Sender). Tag of
0: ShowWindow(Wnd[0],SWShow);
1: ShowWindow(Wnd[1],SWShow);
2: ShowWindow(Wnd[2],SWShow);
3: ShowWindow(Wnd[3],SWShow);
4: ShowWindow(Wnd[4],SWShow);
end;
end;
(6)FormClose事件代码如下://将Windows任务栏恢复到正常状态;
procedure TForm1.FormClose(Sender:TObject; var Action: TCloseAction);
var i:Integer;
begin
for i:=0 to 4 do
begin
EnableWindow(Wnd[i],True);
ShowWindow(Wnd[i],SWShow);
end;
end;
(7)按F9运行程序。以上程序在Delphi3.0/4.0、Windows95/98简体中文版环境下调试通过。
(8)说明:本文所述方法同样适用于VB、VC、BC、C++Builder等编程工具,但应注意语法、 变量类型等不同要求。
利用Delphi全面控制Windows任务栏的更多相关文章
- Delphi 全面控制Windows任务栏
核心提示:使用Windows95/NT/98操作系统的用户知道:Windows正常启动后,在电脑屏幕下方出现一块 任务栏. 使用Windows95/NT/98操作系统的用户知道:Windows正常启动 ...
- Delphi全面控制Windows任务栏
使用Windows95/NT/98操作系统的用户知道:Windows正常启动后,在电脑屏幕下方出现一块 任务栏.从系统功能角度而言,整个任务栏包括几个不同的子区域,从左至右依次是:开始 按钮.应用程序 ...
- 利用C# Winform做Windows系统任务栏
最近公司做一个考试系统,需要一个答题栏,要求:占用屏幕上方一部分区域,而且始终置顶,当其他窗口最大化时"答题栏"始终置前并且不遮挡最大化窗口的任何部分!就像windows任务栏一样 ...
- 利用Delphi编程控制摄像头(图)
你的电脑有没有摄像头?看到别人用QQ玩视屏你会不会去想怎么实现的?这里介绍使用DELPHI使用MS的 AVICAP32.DLL就可轻松的实现对摄像头编程,如果再加上你的网络编程水平,实现一个视屏聊天就 ...
- 教程-隐藏/显示任务栏-程序不在任务显示-全面控制Windows
1.隐藏任务条 var h:THandle; //变量h:=FindWindow('Shell_TrayWnd',nil);ShowWindow(h,SW_hide); 2.显示任务条h:=Find ...
- delphi 获取windows任务栏的高度
function GetWinTrayWnd: Integer; // 获取windows任务栏高度 var TrayWnd: HWnd; //任务栏句柄 Rec : TRect; begin Tra ...
- C#实现控制Windows系统关机、重启和注销的方法:
shutdown命令的参数: shutdown.exe -s:关机shutdown.exe -r:关机并重启shutdown.exe -l:注销当前用户 shutdown.exe -s -t 时间:设 ...
- 利用Delphi的File Of Type创建并管理属于你自己的数据库
http://www.360doc.com/content/16/1128/19/28222077_610249962.shtml 利用Delphi的File Of Type创建并管理属于你自己的数据 ...
- 使用WMI来控制Windows目录 和windows共享机制
1.使用WMI来控制Windows目录 本文主要介绍如何使用WMI来查询目录是否存在.文件是否存在.如何建立目录.删除目录,删除文件.如何利用命令行拷贝文件,如何利用WMI拷贝文件 using Sys ...
随机推荐
- python爬虫学习(3):使用User-Agent和代理ip
使用User-Agent方法一,先建立head,作为参数传进去 import urllib.requestimport json content=input("请输入需要翻译的内容:&quo ...
- Python排序功能进阶
sorted和sort() li = [9, 1, 8, 2, 7, 3, 6, 4, 5] s_li = sorted(li) print ('Sorted Variable: \t', s_li) ...
- 影响Acorn for Mac图像打印质量的因素有什么?怎样处理这些因素才能得到打印效果最佳的图像?
Acorn for Mac是Mac OS平台上一款比较不错的图像处理软件.acorn mac版用起来都很像神器 Photoshop,是的,它的设计目标就是成为 Photoshop 的轻量替代者,拥有所 ...
- 电子商务B2B的发展趋势
B2B的发展趋势 尽管B2B市场发展势头良好,但B2B市场还是存在发育不成熟的一面.这种不成熟表现在B2B交易的许多先天性交易优势,比如在线价格协商和在线协作等还没有充分发挥出来. 报告指出,到200 ...
- MySQL - primary key PK unique key,key PK index
primary key PK unique key 总结 primary key = unique + not null 主键不能为空每个字段值都不重复,unique可以为空,非空字段不重复 uniq ...
- Apache中配置数据库连接池(数据源)
由于基于HTTP协议的Web程序是无状态的,因此,在应用程序中使用JDBC时,每次处理客户端请求都会重新建立数据库链接,如果客户端的请求频繁的话,这将会消耗非常多的资源,因此,在Tomcat中提供了数 ...
- 区间dp(二维)——cf1199F
复杂度是O(N^5),枚举所有小矩形,转移时再按每列,每行进行转移 #include<bits/stdc++.h> using namespace std; #define N 55 in ...
- mycat简介
开源数据库中间件-MyCat简介 如今随着互联网的发展,数据的量级也是撑指数的增长,从GB到TB到PB.对数据的各种操作也是愈加的困难,传统的关系性数据库已经无法满足快速查询与插入数据的需求.这个时候 ...
- [bzoj1706]奶牛接力跑 题解 (矩阵快速幂(或者叫倍增Floyd?))
Description FJ的N(2 <= N <= 1,000,000)头奶牛选择了接力跑作为她们的日常锻炼项目.至于进行接力跑的地点 自然是在牧场中现有的T(2 <= T < ...
- ()获取Cookies session
[HttpGet] public string mo() { var httpRequest = HttpContext.Current.Request; var a = httpRequest.Co ...