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

完全控制你的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 下运行通过。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/563012.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

windows查看linux文件中文,Linux 系统下无法查看Windows 中创建的中文文件名

标 题: Linux 系统下无法查看Windows 中创建的中文文件名我是Linux初学者,在网上搜索了很久,经过多次尝试仍然无法解决问题,只好在这里发贴请教了,还望各位高手指点一下。问题描述:Linux 系统下无法查看Windows 中创建…

arm-none-linux-gnueabi-gcc:未找到命令,“make: arm-none-linux-gnueabi-gcc:命令未找到”

Ubuntu12.04下编译飞凌嵌入式OK6410开发板提供的内核android2.3_kernel_v1.01-2012-09-23.tar已经执行export PATH/usr/local/arm/arm-none-linux-gnueabi/bin:$PATH,但还是出现如下问题make: arm-none-linux-gnueabi-gcc:命令未找到CHK include/lin…

linux 内核入口地址,linux内核的加载地址和入口地址

编译完内核之后,会产生zImage,而把它直接导入0x30008000,会出现Bad Magic Number.查明是需要将内核加一个0x40大小的头,由mkimage工具来添加.mkimage在编译u-boot时在u-boot-1.1.6/tools下生成,可以为编译的内核添加头信息的.在bootm命令中会解析这个头,…

linux脚本监控某一进程,linux监控某个进程的运行shell脚本

该脚本实现了对指定进程名的进程进行每隔2的扫描监控,一旦发现进程不存在便重新启动。#!/bin/sha10;while [[ a -gt 5 ]]; doif test $(pgrep -f $1|wc -l) -eq 2;thensh stop.shgnome-terminal -x sh start.sh &fi;sleep 2;done;总结:(1)&表示当…

kali linux conky配置文件,7个美丽的Conky配置为您的Linux桌面 | MOS86

现在,大多数Linux用户非常熟悉Conky包括多少人都没有今天我们Note:其中一些不仅仅是一个习惯。conkyrc文件。许多都配有专门的字体或附加软件,有些则作为更大的桌面主题的一部分打包。此处列出的所有配置都提供了到原始下载位置以及每个包的链接此外&…

sd卡linux错误检测,android系统正在准备SD卡正在检测是否有错误且SD卡无法读取解决办法...

手机android系统,也许您会碰到这样的情况。错误提示:正在准备SD卡 正在检测是否有错误。这时sd卡(即内存卡)不能正常使用,不管手机自带的程序,还是通过usb口连接到电脑都无法识别sd卡。这可能是由于没有正常卸载sd卡导致的原因。比…

linux+系统优化基础,Linux入门基础(三):Linux用户及权限基础

用户基础用户和组每个用户都拥有一个userid每个用户都属于一个主组,属于一个或多个附属组每个组拥有一个groupid每个进程以一个用户身份运行,受该用户可访问资源限制每个可登陆用户拥有一个指定的shell用户userid为32位,从0开始,为了和老式系统兼容,用户id限制在60000以下用户分…

linux dhcp 负载均衡,dhcp双机负载均衡

dhcp双机负载均衡1:环境介绍:我是用两个linux机器(dhcpd server 一个是master ,一个是slave)和一个windows xp机器来做的(测试用的client!) ,master:ip:172.17.61.124netmask:255.255.255.0gw:1…

c语言 字节转换成位,C语言中的字节序和指针转换

我在计算机上用以下代码部分编写了一个C程序:uint32_t test 0x01020304;uint8_t array[4];memcpy(array, &test, 4);printf("%02x %02x %02x %02x",array[0], array[1], array[2], array[3]);它打印04030201,但我希望是01020304。我是否必…

C语言顺序结构程序设计PPT,C语言习题集与实验指导 教学课件 伍鹏、杜红、王圆妹、邓绍金 第3章 顺序结构程序设计.pdf...

[摘要]第3章 顺序结构程序设计 第3章 顺序结构程序设计 当你对C语言程序设计有了一定了解和掌握后, 在处理一些简单的任务时,若想根据程序书写的过程 顺序执行程序,这时应该如何处理呢? •顺序结构 •顺序结构 程序的三种结构 程序…

c语言调用exe并传递参数,如何使用execlp将命令行参数传递给C程序

This page包括大量的使用示例....编辑:从链接 从链路的代码段添加的代码片段上方static void show_info_page(const char *git_cmd){const char *page cmd_to_page(git_cmd);setenv("INFOPATH", system_path(GIT_INFO_PATH), 1);execlp("info"…

c语言include math.h,在C语言中,若需调用数学类库函数第数据进行处理,则需包含头文件______. 答案:math.h;#includemath.h;math.h;“math....

相关问题设随机变量X的密度函数为,则c .e339fd828a3e5af974ac21fd9ebc7f0b.gif有函数f(x,y,z),其中x∈[1900,2100],y∈[1,12],z∈[1,31]的。请写出该函数采用边界值分析法设计的测试用例函数重写与函数重载的相同之处是&#xff1…

c语言sin函数返回nan,C语言入口函数和LD_PRELOAD环境变量

零.C语言入口函数从第一天学习C语言开始,我们的脑子里就深深烙下这样一个概念:C语言程序总是从main()函数开始执行,main()函数结束,程序也就结束了.在平时的练习中貌似这没有问题,但事实真的是这样吗?测试一下,点击(此处)折叠或打开#include #include #include int enter(void…

c语言字符串传给swift,如何把字符串数组从 Swift 传递给 C

作者:Natasha The Robot,原文链接,原文日期:2016-10-27译者:BigbigChai;校对:walkingway;定稿:CMBSwift 允许我们将原生的字符串直接传递给一个接受 C String(即 char *)…

c语言上机题库程序设计,C语言上机程序设计题库及答案.docx

C语言上机程序设计题库及答案C语言上机程序设计题库【程序设计】功能:根据整型形参m,计算如下公式的值:ysin(m)*10。【参考代码】 double y0; ysin(m)*10; return(y);功能:若x、y为奇数,求x到y之间的奇数和&#xff1b…

Android端发送字符到Wed端,android应用端向web端获取字符串。

一 发送和接收普通的JSONArray(仅仅包含字符串的数组)1)web端:PrintWriter out response.getWriter();ListorderAllList new USER().getListStr();JSONArray jsonArray JSONArray.fromObject(orderAllList);System.out.println("wowowo"jsonArray);whil…

three.js使用精灵模型Sprite渲染森林

效果&#xff1a; 源码&#xff1a; <template><div><el-container><el-main><div class"box-card-left"><div id"threejs" style"border: 1px solid red"></div><div class"box-right&quo…

android logcat 系统 分析,Android日志系统Logcat源代码简要分析

原文出处——>[Android日志系统Logcat源代码简要分析](http://blog.csdn.net/luoshengyang/article/details/6606957)在前面两篇文章Android日志系统驱动程序Logger源代码分析和Android应用程序框架层和系统运行库层日志系统源代码中&#xff0c;介绍了Android内核空间层、系…

android订阅管理,RXJAVA取消订阅封装-kotlin-Android

因为好几次自己想要在别的项目使用&#xff0c;每次都要重写一遍太麻烦&#xff0c;整理了一下发布到 jcenter 。利用官方lifecycle库与kotlin语言特性。lifecycle官方 support 27 自带。库代码数少于100行。用法&#xff1a;1、添加依赖implementation com.sjianjun:rxutils:1…

android 动画完成后不可点击事件,android – TranslateAnimation后按钮不可点击

点击后,我想移动按钮(带动画).我希望它在第一次点击时移动100个像素,底部移动100个像素,第二个100像素,第三个底部的100个像素,依此类推.我有简单的布局文件(main.xml)&#xff1a;android:id"id/button"android:layout_width"wrap_content"android:layout…