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 下運行通過。
總結
以上是生活随笔為你收集整理的windows控制linux桌面图标,完全控制你的Windows桌面 (转)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java note项目_Java Req
- 下一篇: 鸿蒙系统新手教程,鸿蒙灭神决新手入门全流