完全控制你的Windows桌面 (轉)
完全控制你的桌面
對於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 下執行透過。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-987934/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Delphi程式設計:完全控制桌面的實現 (轉)程式設計
- 用Tweak UI改變你的 Windows 98 桌面設定(轉)UIWindows
- Windows下透過xmanager遠端桌面控制Linux(轉貼)WindowsLinux
- Dos下的滑鼠完全控制類 --- 使用它可以很好的控制你的Dos程式中的滑鼠事件! (轉)事件
- 玩轉Windows桌面圖示 (轉)Windows
- VNC遠端控制Linux桌面(轉)VNCLinux
- 全部控制檔案丟失後的完全恢復(轉)
- Dos下的XMS完全控制類 --- 使用它,讓你的DOS程式使用XMS不再是夢想! (轉)
- Ubuntu 完全關閉桌面特效Ubuntu特效
- 徹底玩轉你的Windows Update(轉)Windows
- WinXP控制遠端桌面中的“雕蟲小技”(轉)
- 轉: Windows控制程式碼數的限制Windows
- 用DLL控制Windows中程式的方法(轉)Windows
- windows 7桌面你不知道的實用功能Windows
- 為你的 Windows 98 加把鎖(轉)Windows
- 中國可能放棄 Windows 完全轉用 Linux 嗎?WindowsLinux
- (轉)LINUX和windows下完全解除安裝ORACLELinuxWindowsOracle
- 【Xmanager】Windows下通過Xmanager遠端桌面控制Redhat5WindowsRedhat
- 用BCB在windows桌面建立快捷方式 (轉)Windows
- 在.NET的Windows桌面應用中使用Amazon的Web Services (轉)WindowsWeb
- Windows XP下用xmanager遠端桌面控制Linux之redhat 5WindowsLinuxRedhat
- 讓Windows XP的控制皮膚“屬於自己”(轉)Windows
- Dos下鍵盤的完全控制 ------- 一系列的BIOS級別的鍵盤控制函式! (轉)iOS函式
- Windows下ORACLE的完全解除安裝WindowsOracle
- 將HTML文件設定為Windows桌面背景(轉)HTMLWindows
- Windows 98 桌面主題和使用者管理(轉)Windows
- Novell釋出新版桌面Linux 期望超越Windows(轉)LinuxWindows
- 拓林思加大桌面Linux投入 建完全開源社群專案(轉)Linux
- 完全用GNU/Linux工作,擯棄Windows---你我共勉 (轉)LinuxWindows
- 使用Windows訊息控制Winamp(VB) (轉)Windows
- 使用Windows訊息控制Winamp(Delphi) (轉)Windows
- Mac軟體推薦:NoMachine輕鬆帶你遠端控制桌面Mac
- 不強佔每一個桌面:Linux不是Windows(轉)LinuxWindows
- Windows XP 輕鬆恢復“顯示桌面”按鈕(轉)Windows
- 資料庫版本控制完全指南資料庫
- Microsoft Remote Desktop for Mac v10.9.6啟用版:掌控你的Windows桌面ROSREMMacWindows
- Windows XP 用控制檯解決PC故障(轉)Windows
- Windows Xp修復控制檯詳細用法(轉)Windows