完全控制你的Windows桌面 (转)[@more@]

完全控制你的桌面

对于Windows的桌面界面相信大家已经十分熟悉了,占据屏幕大半部分的是桌面,在上面排列的是桌面图标。

任务栏一般位于桌面的下面,也可以在桌面其它边缘。在最左边是“开始按钮”,接下来是“启动按钮”区、

按钮区,再下来是任务栏图标区,在上面一般会有音量调节图标和输入法调节图标和时钟等。

本文首先介绍如何隐藏任务栏中的上面介绍的部分。我们知道利用Windows的ShowWindow可以隐藏或

者显示窗口,关键是如何得到窗口的句柄。在Windows下的每一个窗口不但有一个窗口句柄标示窗口,还有一个称

为类名的字符串标示窗口。如果知道窗口的类名,通过FindWindow函数就可以获得窗口的句柄。而Windows桌面

本身就是一个窗口,桌面图标区、任务栏以及任务栏下的开始按钮等都是它的子窗口。我们可以通过FindWindowEx

函数来寻找这些窗口。再利用ShowWindow函数隐藏或显示窗口。下面通过一个的范例来演示如何控制任务栏。

首先建立一个新的Delphi工程,然后在Form1中加入7个CheckBox,然后在Form1中添加下面的代码:

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

StdCtrls;

type

TForm1 = class(TForm)

CheckBox1: TCheckBox;

CheckBox2: TCheckBox;

CheckBox3: TCheckBox;

CheckBox4: TCheckBox;

CheckBox5: TCheckBox;

CheckBox6: TCheckBox;

CheckBox7: TCheckBox;

procedure FormCreate(Sender: T);

private

procedure CheckButtonClick(Sender:TObject);

{ Private declarations }

public

{ Public declarations }

end;

Const

义不同窗口的类名

sTrayWindow = '_TrayWnd';

sTrayNotify = 'TrayNotifyWnd';

sStartButton = 'Button';

sAppSwitchBar = 'ReBarWindow32';

sAppSwitch = 'MSTaskSwWClass';

sAppIcon = 'ToolbarWindow32';

sTrayClock = 'TrayClockWClass';

sDesktopIcon = 'ShellDll_DefView';

sProgman = 'Progman';

var

Form1: TForm1;

wnd:Integer;

implementation

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);

begin

CheckBox1.Caption := '隐藏任务栏';

CheckBox1.OnClick := CheckButtonClick;

CheckBox2.Caption := '隐藏开始按钮';

CheckBox2.OnClick := CheckButtonClick;

CheckBox3.Caption := '隐藏任务栏图标';

CheckBox3.OnClick := CheckButtonClick;

CheckBox4.Caption := '隐藏程序按钮';

CheckBox4.OnClick := CheckButtonClick;

CheckBox5.Caption := '隐藏任务栏时钟';

CheckBox5.OnClick := CheckButtonClick;

CheckBox6.Caption := '隐藏桌面图标';

CheckBox6.OnClick := CheckButtonClick;

CheckBox7.Caption := '隐藏快速运行图标';

CheckBox7.OnClick := CheckButtonClick;

end;

个CheckBox控件的Click处理函数

procedure TForm1.CheckButtonClick(Sender:TObject);

var

i:Integer;

begin

到任务栏窗口的窗口句柄

wnd := FindWindow(sTrayWindow, nil);

if (TCheckBox(Sender).Name)=  'CheckBox2' then

wnd := FindWindowEx(wnd, 0, sStartButton, nil);

if (TCheckBox(Sender).Name)=  'CheckBox3' then

wnd := FindWindowEx(wnd, 0, sTrayNotify, nil);

if (TCheckBox(Sender).Name)=  'CheckBox4' then begin

wnd := FindWindowEx(wnd, 0, sAppSwitchBar, nil);

wnd := FindWindowEx(wnd, 0, sAppSwitch, nil);

end;

if (TCheckBox(Sender).Name)=  'CheckBox5' then begin

wnd := FindWindowEx(wnd, 0, sTrayNotify, nil);

wnd := FindWindowEx(wnd, 0, sTrayClock, nil);

end;

if (TCheckBox(Sender).Name)=  'CheckBox6' then begin

wnd := FindWindow(sProgman, nil);

wnd := FindWindowEx(wnd, 0, sDesktopIcon, nil);

end;

if (TCheckBox(Sender).Name)=  'CheckBox7' then begin

wnd := FindWindowEx(wnd, 0, sAppSwitchBar, nil);

wnd := FindWindowEx(wnd, 0, sAppIcon, nil);

end;

if TCheckBox(Sender).Checked then

ShowWindow (wnd, SW_H)

Else

ShowWindow (wnd, SW_SHOW);

end;

end.

运行程序,分别点击不同的选择框,可以分别隐藏任务栏或任务栏上的不同部分。

下面再来介绍如何操控桌面图标。设置图标文本的背景和颜色以及设置图标的排列。通过上面的介绍

上面我们知道,Windows的桌面也是一个窗口,不同的它是一个ListView类窗口,对于ListView类窗口,有

一系列的以LVM_开头的消息,通过Windows API函数SendMessage向ListView类窗口发送这些消息就可以控

制窗口的一些属性,而且在Delphi中还有一系列的以ListView_开头的函数,这些函数可以代替LVM_类消息。

具体的范例如下:首先建立一个新的Delphi工程,然后在Form1中加入两个Commanutton控件,然后在

Form1中加入以下的代码:

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

ComCtrls, StdCtrls,Commctrl;

type

TForm1 = class(TForm)

Button1: TButton;

Button2: TButton;

procedure Button1Click(Sender: TObject);

procedure Button2Click(Sender: TObject);

procedure FormCreate(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

implementation

{$R *.DFM}

procedure SetDesktopIconColor(Forground, Background: TColor; Trans: Boolean);

var

Window: HWND;

begin

Window := FindWindow('Progman', 'Program Manager');

到桌面窗口

Window := FindWindowEx(Window, HWND(nil), 'SHELLDLL_DefView', '');

到放置桌面图标的ListView窗口

Window := FindWindowEx(Window, HWND(nil), 'SysListView32', '');

if Trans then  置透明的文字背景色

ListView_SetTextBkColor(Window, $ffffffff) // back color

else  置不透明的文字背景色

ListView_SetTextBkColor(Window, Background); // back color

ListView_SetTextColor(Window, Forground); // foreground color

新绘制桌面图标

ListView_RedrawItems(Window, 0, ListView_GetItemCount(Window) - 1);

UpdateWindow(Window);  新绘制窗口

end;

procedure SetDeskTopIconArr(iWidth,iHeight:Integer);

var

Window: HWND;

i,i1,i2,iCount:integer;

begin

Window := FindWindow('Progman', 'Program Manager');

Window := FindWindowEx(Window, HWND(nil), 'SHELLDLL_DefView', '');

Window := FindWindowEx(Window, HWND(nil), 'SysListView32', '');

置图标与边界的距离。

i1:=20;i2:=20;

得桌面图标的个数

iCount:=ListView_GetItemCount(Window)-1;

for i:=0 to iCount do begin

置图标位置

ListView_SetItemPosition(Window,i,i1,i2);

i1:=i1+iWidth;

if i1>(Screen.Width-32) then begin

i1:=20;

i2:=i2+iHeight;

end;

end;

ListView_RedrawItems(Window, 0, ListView_GetItemCount(Window) - 1);

UpdateWindow(Window);

end;

procedure SetDefaultIconColors;

var

Kind: Integer;

Color: TColor;

begin

Kind := COLOR_DESKTOP;

Color := GetSylor(COLOR_DESKTOP);

SetSysColors(1, Kind, Color);

end;

procedure TForm1.Button1Click(Sender: TObject);

begin

可以改变clWhite,clBlack为其它的颜色值看看

标文本颜色的变化

SetDesktopIconColor(clWhite,clBlack,True);

end;

procedure TForm1.Button2Click(Sender: TObject);

begin

置图标的间距为100个像素

SetDeskTopIconArr(100,100);

end;

procedure TForm1.FormCreate(Sender: TObject);

begin

Button1.Caption := '设置图标文本颜色';

Button2.Caption := '设置图标排列';

end;

end.

在上面的程序中,函数SetDesktopIconColor设置图标文本的前景色、背景色和透明,参数ForeGround

BackGround分别指定文本的前景色和背景色,参数Trans指定文本的背景是否透明(如果有背景图案的话)。

函数SetDeskTopIconArr排列桌面图标,参数iWidth,iHeight分别指定图标之间的横向纵向距离。如果要使

SetDeskTopIconArr函数生效,就需要将桌面图标的自动排列选项去掉。另外ListView类还有其它的控制消息

利用这些消息可以控制更多的桌面图标选项。有兴趣的朋友可以察看MSDN库。

以上程序由Delphi5编写,在Windows98 下运行通过。

windows控制linux桌面图标,完全控制你的Windows桌面 (转)相关推荐

  1. 计算机桌面图标怎么显示出来,显示桌面图标不见了怎么办?显示桌面图标不见了解决方法...

    我们的 电脑桌 面有着许多本机自带的图标,如我的电脑, 我的文档 ,回收站等等.点击这些图标进入,就能方便快速地进行电脑操作.而其中有一个名为"显示桌面"的图标,这个图标是用来进行 ...

  2. Nginx的安装基础配置(windows、linux)以及搭建图片服务器(windows、阿里云),文件上传

    Nginx的安装基础配置(windows.linux)以及搭建图片服务器(windows.阿里云),文件上传 本文目录 文章目录 Nginx的安装基础配置(windows.linux)以及搭建图片服务 ...

  3. html桌面图标怎么改,怎样更改桌面图标,手把手教你怎样更改桌面图标

    打开桌面,桌面上摆放了放多程序的快捷方式,我们每天打开电脑最先接触的就是这些快捷方式图标.时间长了,是不是感觉乏味了.可以换一换.比如,在我的电脑桌面上有这样一个图标,那怎样更改桌面图标?下面,小编给 ...

  4. 计算机桌面图标怎样变大变小,桌面图标怎么变小,小编告诉你电脑桌面图标的太大怎么调小...

    电脑桌面图标变得很大,也没有改屏幕分辨率,一直看习惯了小图标很不习惯这种大图标,不习惯win7系统默认的大图标,图标面积太大,不美观,为了不被快速发展的社会所淘汰,快速了解和掌握的知识是必须的,下面, ...

  5. linux mint图标大小,Cinnamon:LinuxMint 15桌面设置小技巧

    touchwiz自身也在做不断的革新,例如7屏分页,桌面切换3d效果,增强型的下拉菜单设置等.win10多桌面最多可以支持7个桌面开启,而且win10切换多桌面是有快捷键的,可以帮助用户迅速切换或创建 ...

  6. w ndows7中桌面图标,七仔教你学习Windows 7:桌面初体验

    [IT168 软件技巧]朋友,你还在坚守"XP"吗?你还在忍受"Vista"吗?为什么不试试Windows 7?只要你曾领略她卓越的性能.华丽的外表,就一定会为 ...

  7. 计算机桌面图标管理,酷点--很酷的桌面图标管理软件

    酷点桌面图标管理软件可以帮助你打造很酷很炫的个性化桌面.喜欢的朋友可以用用. (电脑入门到精通网 www.58116.cn) (电脑入门到精通网 www.58116.cn) 官方的介绍: (电脑入门到 ...

  8. 计算机启动进入不了桌面图标,电脑开机后不显示桌面图标如何通过修改注册表解决问题...

    ‍ 近来有用户发现电脑开机后不显示桌面图标,一般遇到这样的问题,我们会进入任务管理器结束explorer.exe资源管理器进程,再重新启动来解决这个问题.但是,如果这样还无法解决不显示电脑系统桌面图标 ...

  9. 怎么删除w7桌面计算机图标,w7桌面图标箭头怎么去掉?w7桌面图标箭头去掉方法...

    win7现在是比较受广大网友欢迎的一套系统,Windows 7 系统是小编感觉最棒的一款系统,但是在默认的系统中在我们桌面上有着各式各样的快捷方式,它们有个共同的特点就是在左下角有个小箭头.对于小编这 ...

最新文章

  1. 利用nginx泛域名解析配置二级域名和多域名
  2. libxml2中文支持
  3. 收集100条实用的网络知识
  4. 最具体的历史centos下一个 postfix + extmail + dovecot + maildrop 安装注意事项2014更新...
  5. cmd窗口使用python提示“Python not found”,可能是环境变量配置的原因
  6. Linux——VIM开发C++自动补全(STL、括号)和开发环境配置
  7. SSH抛出org.apache.ibatis.exceptions.PersistenceException: 异常
  8. 基于javaweb的前台展示+后台管理结合的在线购书系统(java+springboot+ssm+mysql)
  9. db4o数据库文件_繁忙的Java开发人员指南db4o,使用db4o进行数据库重构
  10. 关于微软必应词典客户端的案例分析
  11. vs c++ 判断注册表键值是否存在
  12. 原来这就是公文写作年终总结材料末尾段首句参考例句
  13. (伪)原创,采集工具应用
  14. 混沌工程-为什么推广的如此困难
  15. 轮盘赌算法原理(ACO算法概率选择方法)
  16. 程序员找工作难吗?我用亲身经历来告诉大家
  17. 什么是 Redis ?
  18. 位运算符+位运算的应用
  19. 【Web开发】Python实现Web服务器(Ubuntu下Flask使用MySQL数据库)
  20. 2021404209陈聪blog

热门文章

  1. echarts 折线上写数值_前端ECharts数据可视化图表案例与介绍
  2. 内网python 仓库_GitHub - xanarry/LanTrans-desktop: 这是一个用python写的局域网传文件工具, 跨平台, 仓库中还有安卓版的工程...
  3. php 正则mac地址,正则表达式匹配MAC地址、邮箱地址、IP地址
  4. mysql 字段等于select_mysql_select_计算字段_数据处理函数_5
  5. Win10系统电脑查看无线密码的方法
  6. 微软为Win11用户更新了剪贴工具、计算器以及邮件和日历应用
  7. Android平台RTMP推流或轻量级RTSP服务(摄像头或同屏)编码前数据接入类型总结
  8. ArrayList类contains方法实现原理
  9. Spring 事务方法与非事务方法相互调用 @Transactional 注解失效不回滚?
  10. python 折线图中文乱码_彻底解决 Python画图中文乱码问题--Pyplotz组件