使用Windows95/NT/98操作系统的用户知道:Windows正常启动后,在电脑屏幕下方出现一块 任务栏。从系统功能角度而言,整个任务栏包括几个不同的子区域,从左至右依次是:开始 按钮、应用程序切换区(Application Switch Bar)、任务栏通知区(Notification Area)以 及任务栏时钟。与其它Windows应用程序相同,任务栏程序(systray.exe)由几个不同的窗体 组成,这些窗体是具有各自的窗口类名、显示方式等信息。因此,只要得到有关窗口信息, 即可通过编程全面控制Windows任务栏的不同区域。

任务栏按钮没有句柄的,只能取按钮ID后,通过消息来隐藏,这是任务栏结构

Shell_TrayWnd
     |- Button
     |- TrayNotifyWnd
     |        |- TrayClockWClass
     |        \- ToolbarWindow32
     \- ReBarWindow32
              |- MSTaskSwWClass
              |         \- SysTabControl32
              \- ToolbarWindow32

任务栏换栏是 SysTabControl32类的,只有依次取得上级窗口句柄才能逐次取得SysTabControl32
的句柄,然后通过消息取按钮id,但不知为什么取到ReBarWindow32的句柄后,始终无法取得MSTaskSwWClass
类控件的句柄,所以无法取SysTabControl32的句柄,哪位高手研究一下.

通过ShowWindow来隐藏窗口的任务栏图标是不持久的。某些动作会使任务栏图标重现。你可以将隐藏的应用程序窗口设为

Tool Window来移走程序的任务栏图标而避免它再次出现。Tool windows永远不会有任务栏图标。 使应用程序窗口成为一个Tool

Window有一个副作用:当用户按下Alt-TAB时它将不在程序列表中出现。你可以调用API函数GetWindowLong和SetWindowLong来使

应用程序窗口成为一个Tool Window。

WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
        DWORD dwExStyle = GetWindowLong(Application->Handle, GWL_EXSTYLE);
        dwExStyle |= WS_EX_TOOLWINDOW;
        SetWindowLong(Application->Handle, GWL_EXSTYLE, dwExStyle);
        try
        {
             Application->Initialize();
             Application->CreateForm(__classid(TForm1), &Form1);
             Application->Run();
        }
        catch (Exception &exception)
        {
             Application->ShowException(&exception);
        }
        return 0;
}

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简体中文版环境下调试通过。

转载于:https://www.cnblogs.com/absolute8511/archive/2007/01/22/1649703.html

全面控制Windows任务栏相关推荐

  1. Windows任务栏上显示网页的超酷玩法!!!!!!!!!!!

    Windows任务栏上显示网页的超酷玩法!!!!!!!!!!! 作者:lee1892 -----------整理者:lnboy 众所周知,windows的任务栏可以显示一个被称为QuickLaunch ...

  2. asp.net 控制windows服务

    asp.net 控制windows服务 最近做一个小的项目,经理要求winform与web都可操作.于是将其做成服务,winform下调用很简单.asp.net下大部分过程是一样的.但需要涉及到用户的 ...

  3. 设置计算机关机静音,Shortcuts 捷径控制 Windows 电脑:静音开关、音量调节、待机、关机...

    在 iPhone 上通过 Shortcuts 捷径控制 Windows 电脑:静音开关.音量调节.待机.关机 演示视频 : 教程: 一.使用方法: 1.Windows 上安装一个 SSH 服务器软件并 ...

  4. C#使用ServiceController控制windows服务

    C#中,使用ServiceController类控制windows服务,使用之前要先添加引用:System.ServiceProcess,然后在命名空间中引用:using System.Service ...

  5. java控制系统音量_Java 控制 Windows 系统音量-Go语言中文社区

    目录 1.使用 Java 来控制 Windows 系统音量,使用 JNA 调用 windows 底层 API 因为有点麻烦,所以这里采用纯 Java API结合 VBS 脚本的方式进行控制. 2.可以 ...

  6. bcb隐藏窗口_BCB隐藏Windows任务栏的方法

    BCB隐藏Windows任务栏的方法 来源:互联网  宽屏版  评论 2006-01-09 12:27:01 void __fastcall TForm1::FormCreate(TObject *S ...

  7. 【Ansible】Ansible控制windows插件安装及运行error与解决方法

    一. 问:因pip版本问题无法安装kerberos 答:安装提示需要先安装pip升级包 下载pip9.0.1升级包: ![1_2] 二.问:安装kerberos报错 答:需要先安装libkrb5开发包 ...

  8. 隐藏windows任务栏中的窗口显示

    在实际应用中遇到类似下列需要: 隐藏windows窗口,在windows任务栏中窗口不可见,但应用程序在后台运行. windows应用程序的窗口默认会在任务栏中添加一个可见的窗口项,方便用户操作和在不 ...

  9. jQuery开发之windows边栏小工具开发(Gadget development)- wi...

    为什么80%的码农都做不了架构师?>>>    jQuery开发之windows边栏小工具开发(Gadget development)- windows小工具实现的电话薄查询工具 作 ...

最新文章

  1. tez 0.9.0 配置
  2. excel求期望_商务数据分析考试:决策树分析(Excel)-安聪
  3. Spring入门第五课
  4. Python+selenium 自动化-获取当前页面的url地址,打开指定的url地址
  5. 一文盘点数据行业的动态演变
  6. 三联《少年》创刊,各领域佼佼者畅言新知,帮少年建立思维素养体系!
  7. Js中Date的应用
  8. 特斯拉标准续航版Model Y为什么下架?马斯克这么回答
  9. 【SPI】java基础之SPI框架实现
  10. iOS 10 推送的简单使用
  11. Struts2 Result 类型和对应的用法详解 2
  12. 大数据学习入门级书籍推荐
  13. CYQ.Data V5 分布式自动化缓存设计介绍
  14. 使用vue实现的人物关系图谱
  15. 计算机科学与技术如何创新,计算机科学与技术专业创新能力的培养途径
  16. fastapi之tortoise-orm
  17. “双花”问题及解决之道
  18. UVALive 8076 Workout for a Dumbbell
  19. Linux中断——request_irq
  20. dockermount与volume的区别

热门文章

  1. Selenium不打开浏览器采爬取数据 Java
  2. 最近点对问题(分治法)
  3. 【小程序】【Tips】image 组件中 null 和 undefined 的区别和对策
  4. vista系统服务器,Vista系统中怎么设置IIS服务器
  5. html怎么显示数学公式,怎么使用html数学公式显示库MathJax - js笔记
  6. 网页没有横向滚动条_【第四课】网页里的表单
  7. python表示数字6_Python3 数字Number(六)
  8. ue4 运行禁用鼠标_从零开始——三:关闭电脑无用服务提高运行速度
  9. php sql获取字段名称,mssql获取字段名及注释,以及一系列问题
  10. ubuntu安装python下载包_Ubuntu安装Python的包管理工具Pip