使用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任务栏的更多相关文章

  1. Delphi 全面控制Windows任务栏

    核心提示:使用Windows95/NT/98操作系统的用户知道:Windows正常启动后,在电脑屏幕下方出现一块 任务栏. 使用Windows95/NT/98操作系统的用户知道:Windows正常启动 ...

  2. Delphi全面控制Windows任务栏

    使用Windows95/NT/98操作系统的用户知道:Windows正常启动后,在电脑屏幕下方出现一块 任务栏.从系统功能角度而言,整个任务栏包括几个不同的子区域,从左至右依次是:开始 按钮.应用程序 ...

  3. 利用C# Winform做Windows系统任务栏

    最近公司做一个考试系统,需要一个答题栏,要求:占用屏幕上方一部分区域,而且始终置顶,当其他窗口最大化时"答题栏"始终置前并且不遮挡最大化窗口的任何部分!就像windows任务栏一样 ...

  4. 利用Delphi编程控制摄像头(图)

    你的电脑有没有摄像头?看到别人用QQ玩视屏你会不会去想怎么实现的?这里介绍使用DELPHI使用MS的 AVICAP32.DLL就可轻松的实现对摄像头编程,如果再加上你的网络编程水平,实现一个视屏聊天就 ...

  5. 教程-隐藏/显示任务栏-程序不在任务显示-全面控制Windows

    1.隐藏任务条 var  h:THandle; //变量h:=FindWindow('Shell_TrayWnd',nil);ShowWindow(h,SW_hide); 2.显示任务条h:=Find ...

  6. delphi 获取windows任务栏的高度

    function GetWinTrayWnd: Integer; // 获取windows任务栏高度 var TrayWnd: HWnd; //任务栏句柄 Rec : TRect; begin Tra ...

  7. C#实现控制Windows系统关机、重启和注销的方法:

    shutdown命令的参数: shutdown.exe -s:关机shutdown.exe -r:关机并重启shutdown.exe -l:注销当前用户 shutdown.exe -s -t 时间:设 ...

  8. 利用Delphi的File Of Type创建并管理属于你自己的数据库

    http://www.360doc.com/content/16/1128/19/28222077_610249962.shtml 利用Delphi的File Of Type创建并管理属于你自己的数据 ...

  9. 使用WMI来控制Windows目录 和windows共享机制

    1.使用WMI来控制Windows目录 本文主要介绍如何使用WMI来查询目录是否存在.文件是否存在.如何建立目录.删除目录,删除文件.如何利用命令行拷贝文件,如何利用WMI拷贝文件 using Sys ...

随机推荐

  1. Spring Security + JWT学习

    开胃:Oauth2认证流程分析 现在第三方登录已经很普遍了,随便哪个App都会有使用微信登录,使用手机号码登录,或者使用支付宝登录等功能... 下面我们就以使用微信登录,做一个简单的流程分析分析 开胃 ...

  2. 【Nacos】本地集群部署

    关于Nacos已经展开了四篇入门文章: 初探Nacos(一)-- 单机模式启动 初探Nacos(二)-- SpringCloud使用Nacos的服务注册与发现 初探Nacos(三)-- SpringB ...

  3. Shiro学习(8)拦截器机制

    8.1 拦截器介绍 Shiro使用了与Servlet一样的Filter接口进行扩展:所以如果对Filter不熟悉可以参考<Servlet3.1规范>http://www.iteye.com ...

  4. webpack 添加eslint代码审查

    1). 添加包 npm install eslint --save-dev npm install eslint-loader --save-dev npm install eslint-plugin ...

  5. error LNK2019: 无法解析的外部符号 "__declspec(dllimport) long __stdcall RtlGetVersion(struct _OSVERSIONINFOW

    虽然ntdll.lib库也引用了,但还是提示找不到RtlGetVersion函数定义,工程中头文件的定义如下: NTSYSAPI NTSTATUS NTAPI RtlGetVersion(     _ ...

  6. hexo next博客之无敌之舒服之美妙之轻松之发布博客(mweb,github自主开发插件)

    文章目录 **前言:** 具体用法 **mweb for mac** 注意 **github插件下载** 个人博客:https://mmmmmm.me 源码:https://github.com/da ...

  7. TLS/SSL 协议 - ServerKeyExchange、ServerHelloDone

    ServerKeyExchange ServerKeyExchange消息的目的是携带密钥交换的额外数据.消息内容对于不同的协商算法套件都会存在差异.在某些场景中,服务器不需要发送任何内容,这意味着在 ...

  8. HDU 6685 Rikka with Coin (枚举 思维)

    2019 杭电多校 9 1006 题目链接:HDU 6685 比赛链接:2019 Multi-University Training Contest 9 Problem Description Rik ...

  9. jQuery validate验证隐藏表单(hidden)域

    validate很不错的一个jQuery表单验证插件.升级到了1.9版的后,发现隐藏表单域验证全部失效,特别是在jquery.ui.tabs.min.js构造的Tabs里的验证!网上一搜,也没查到是怎 ...

  10. 43-Ubuntu-用户管理-08-chown-chgrp

    1.修改文件|目录的拥有者 sudo chown 用户名 文件名|目录名 2.递归修改文件|目录的主组 sudo chgrp -R 组名 文件名|目录名 例1: 桌面目录下有test目录,拥有者为su ...