成人午夜激情影院,小视频免费在线观看,国产精品夜夜嗨,欧美日韩精品一区二区在线播放

利用Delphi控制Windows任務欄

2010-08-28 10:50:01來源:西部e網作者:

    使用Windows95/NT/98操作系統的用戶知道:Windows正常啟動后,在電腦屏幕下方出現一塊 任務欄。從系統功能角度而言,整個任務欄包括幾個不同的子區域,從左至右依次是:開始 按鈕、應用程序切換區(Application Switch Bar)、任務欄通知區(Notification Area)以 及任務欄時鐘。與其它Windows應用程序相同,任務欄程序(systray.exe)由幾個不同的窗體 組成,這些窗體是具有各自的窗口類名、顯示方式等信息。因此,只要得到有關窗口信息, 即可通過編程全面控制Windows任務欄的不同區域。

  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簡體中文版環境下調試通過。 

  (8)說明:本文所述方法同樣適用于VB、VC、BC、C++Builder等編程工具,但應注意語法、 變量類型等不同要求。
主站蜘蛛池模板: 寿光市| 太白县| 洮南市| 六安市| 环江| 澄城县| 临潭县| 辛集市| 陆河县| 阿瓦提县| 三台县| 洛浦县| 田阳县| 凭祥市| 定日县| 莆田市| 项城市| 宣化县| 阳山县| 金湖县| 鄂托克旗| 玛曲县| 姚安县| 常宁市| 武夷山市| 大竹县| 山东| 大名县| 敖汉旗| 望奎县| 肇州县| 西乌珠穆沁旗| 巴彦淖尔市| 云安县| 南充市| 靖江市| 龙山县| 淅川县| 昆山市| 廉江市| 容城县|