发一个专门操作任务栏的类

发一个专门操作任务栏的类

忽然在CSDN上看到别人问怎样操作windows任务栏上的元素,如隐藏任务栏、获得任务栏上的所有托盘图标等信息。在闲暇的时候用Spy++捕捉了一下任务栏的相关消息和各控件句柄。于是将各种操作封装到了一个类中。大致代码如下: (******************************************************) (*              WindowsOperate Unit                   *) (*    Copyright(c) 2007    不得闲                     *) (*    email:[email protected]     QQ:75492895    *) (******************************************************) unit WindowsOperate; interface uses windows,Classes,Messages,SysUtils,forms,ComObj,winsvc, shellapi,CommCtrl,Graphics; type   {任务栏上的任务按扭}   TSysToolbarBtn = class(TPersistent)   private     FBtnInfo: TTBButton;     FBtnIndex: integer;     FBtnCaption: string;     SysHide: boolean;//是否为系统隐藏图标     EventHandle: THandle; //事件处理句柄     FPicture: TBitmap; //图标     FBtnRect: TRect;  //区域     FVisible: boolean;     function GetBtnInfo: TTBButton;     procedure SetVisible(const Value: boolean);   public     Constructor Create;     Destructor Destroy;override;     property BtnInfo: TTBButton read GetBtnInfo;     property BtnIndex: integer read FBtnIndex;     property BtnCaption: string read FBtnCaption;     property BtnRect: TRect read FBtnRect;     procedure AssignBtnInfo(Info: TTBButton);     property isSysHide: boolean read SysHide;     property Picture: TBitmap read FPicture;     property Visible: boolean read FVisible write SetVisible;     procedure Click;     procedure DbClick;     procedure RClick;   end;   TSysTaskBarOperate = Class(TComponent) //任务栏操作类   private     FTrayBtnList,FTaskBtnList: TStringList;     HigherThenXp: boolean; //是否为xp以上的系统版本     FTrayBarHandle: THandle;     FTaskBarHandle: THandle;     FStartBtnHandle: THandle;     FQuitLauchHandle: THandle;     FReBarHandle: THandle;     FProgramToolBarHandle: THandle;     FImeRecHandle: THandle;     FProgramContrainerHandle: THandle; //任务栏容器     FHideTrayBtnHandle: THandle;     FTrayNotifyHandle: THandle;     FClockHandle: THandle;     FShowHideBtn: boolean;     FVisible: boolean;     FquickBarVisible: boolean;     FTaskToolBarVisible: boolean;     FTaskBarVisible: boolean;     FRegBarVisible: boolean;     FStartBtnVisible: boolean;     FImeBarVisible: boolean;     FTrayBarVisible: boolean;     procedure GetIconList;     procedure GetTaskList;     function GetTrayBtnCount: integer;     function IsSysBtnHide(BtnState: Dword): boolean;     procedure SetShowHideBtn(const Value: boolean);     function GetTrayBtns(Index: integer): TSysToolbarBtn;     function GetTaskBtnCount: integer;     function GetTaskBtns(Index: integer): TSysToolbarBtn;     procedure SetVisible(const Value: boolean);     procedure SetquickBarVisible(const Value: boolean);     procedure SetTaskToolBarVisible(const Value: boolean);     procedure SetTaskBarVisible(const Value: boolean);     procedure SetReBaVisible(const Value: boolean);     procedure SetStartBtnVisible(const Value: boolean);     procedure SetImeBarVisible(const Value: boolean);     procedure SetTrayBarVisible(const Value: boolean);   protected     procedure StartBtnWndProc(var Message: TMessage);   public     Constructor Create(AOwner: TComponent);override;     Destructor Destroy;override;     property TrayBarHandle: THandle read FTrayBarHandle;//托盘区句柄     property TaskBarHandle: THandle read FTaskBarHandle;//任务栏句柄     property StartBtnHandle: THandle read FStartBtnHandle;//开始按扭句柄     property QuitLauchHandle: THandle read FQuitLauchHandle;//快速启动栏句柄     property ImeRecHandle: THandle read FImeRecHandle;//输入法选择区域句柄     property ProgramToolBarHandle: THandle read FProgramToolBarHandle;//程序最小化按扭容器     property HideTrayBtnHandle: THandle read FHideTrayBtnHandle;//显示隐藏图标的按扭     property ClockHandle: THandle read FClockHandle;//时钟显示区域句柄     procedure SetTimeDlg;       //设置时间对话框     procedure HideTrayBtnClick; //显示隐藏按扭单击     procedure ImeRectBtnClick;//输入法按扭单击     procedure ClearTrayBtnList; //清除托盘区列表     procedure ClearTaskBtnList;     procedure ShowTime;     procedure StartBtnClick;     procedure HideOn;     procedure ShowOn;     property  TrayBarVisible: boolean read FTrayBarVisible write SetTrayBarVisible;     property  ImeBarVisible: boolean read FImeBarVisible write SetImeBarVisible;     property  StartBtnVisible: boolean read FStartBtnVisible write SetStartBtnVisible;     property  ReBarVisible: boolean read FRegBarVisible write SetReBaVisible;     property  TaskToolBarVisible: boolean read FTaskToolBarVisible write SetTaskToolBarVisible;     property  TaskBarVisible: boolean read FTaskBarVisible write SetTaskBarVisible;     property  quickBarVisible: boolean read FquickBarVisible write SetquickBarVisible;     property  Visible: boolean read FVisible write SetVisible; //是否隐藏任务栏     property  ShowHideBtn: boolean read FShowHideBtn Write SetShowHideBtn;//是否显示系统隐藏的托盘按扭     property  TrayBtnCount: integer read GetTrayBtnCount;//托盘图标的个数     property  TaskBtnCount: integer Read GetTaskBtnCount;     property  TrayBtnList: TStringList read FTrayBtnList;     property  TaskBtnList: TStringList Read FTaskBtnList;     property  TrayBtns[Index: integer]: TSysToolbarBtn read GetTrayBtns; //托盘按扭     Property  TaskBtns[Index: integer]: TSysToolbarBtn read GetTaskBtns; //任务栏按扭   end; implementation { TSysTaskbarOperate } procedure TSysTaskBarOperate.ClearTaskBtnList; begin   while FTaskBtnList.Count > 0 do   begin     FTaskBtnList.Objects[FTaskBtnList.Count - 1].Free;     FTaskBtnList.Delete(FTaskBtnList.Count - 1);   end; end; procedure TSysTaskBarOperate.ClearTrayBtnList; begin   while FTrayBtnList.Count > 0 do   begin     FTrayBtnList.Objects[FTrayBtnList.Count - 1].Free;     FTrayBtnList.Delete(FTrayBtnList.Count - 1);   end; end; constructor TSysTaskbarOperate.Create(AOwner: TComponent); begin   inherited Create(AOwner);   FTrayBtnList := TStringList.Create;   FTaskBtnList := TStringList.Create;   HigherThenXp := (Win32MajorVersion > 5) or ((Win32MajorVersion = 5) and (Win32MinorVersion > 0));   FTaskBarHandle := FindWindow('Shell_TrayWnd',nil);   FStartBtnHandle := FindWindowEx(FTaskBarHandle,0,'Button',nil);   //if (OS.dwMajorVersion = 4) and (OS.dwMinorVersion = 10)  then //98系统   FReBarHandle  := FindWindowEx(FTaskBarHandle,0,'ReBarWindow32',nil);   FQuitLauchHandle := FReBarHandle;   FProgramContrainerHandle := FindWindowEx(FQuitLauchHandle,0,'MSTaskSwWClass',nil);   FImeRecHandle := FindWindowEx(FQuitLauchHandle,0,'CiceroUIWndFrame',nil);   if HigherThenXp then     FProgramToolBarHandle := FindWindowEx(FProgramContrainerHandle,0,'ToolbarWindow32',nil)   else FProgramToolBarHandle := FProgramContrainerHandle;   FTrayBarHandle := FindWindowEx(FTaskBarHandle,0,'TrayNotifyWnd',nil);   FTrayNotifyHandle := FTrayBarHandle;   FClockHandle := FindWindowEx(FTrayBarHandle,0,'TrayClockWClass',nil);   FHideTrayBtnHandle := FindWindowEx(FTrayBarHandle,0,'Button',nil);   if HigherThenXp then     FTrayBarHandle := FindWindowEx(FTrayBarHandle,0,'SysPager',nil);   if (Win32MajorVersion = 5) and (Win32MinorVersion >= 0) then     FTrayBarHandle := FindWindowEx(FTrayBarHandle,0,'ToolbarWindow32',nil);   FQuitLauchHandle := FindWindowEx(FQuitLauchHandle,0,'ToolbarWindow32',nil);//快速启动栏   //SetWindowLong(FStartBtnHandle, GWL_WNDPROC, Longint(MakeObjectInstance(StartBtnWndProc)));   GetIconList;   GetTaskList;   Visible := true;   ReBarVisible := true;   TaskBarVisible := true;   quickBarVisible := true;   TaskToolBarVisible := true;   StartBtnVisible := true;   TrayBarVisible := true;   ImeBarVisible := true; end; destructor TSysTaskbarOperate.Destroy; begin   ClearTrayBtnList;   FTrayBtnList.Free;   ClearTaskBtnList;   FTaskBtnList.Free;   inherited; end; procedure TSysTaskBarOperate.GetIconList; var   ThreadID: THandle;   ThreadHandle:   THandle; //线程句柄   Buff: pchar;   i,BtnCount: integer;   R: Cardinal;   BtnInfo: TTBButton;   SysHide: boolean;   SysToolBtn: TSysToolbarBtn;   S: array[0..512] of char;   BtnRect: TRect; begin   GetWindowThreadProcessId(FTrayBarHandle, @ThreadID);//获取托盘窗口的线程 ID   ThreadHandle := OpenProcess(PROCESS_VM_OPERATION or PROCESS_VM_READ or PROCESS_VM_WRITE, False, ThreadID);//得到线程句柄   Buff := VirtualAllocEx(ThreadHandle,nil,4096,MEM_RESERVE or MEM_COMMIT,PAGE_READWRITE);//指定进程的虚拟空间保留或提交内存区域,除非指定MEM_RESET参数,否则将该内存区域 置0   BtnCount := SendMessage(FTrayBarHandle,TB_BUTTONCOUNT, 0, 0);//得到托盘按扭个数   //SendMessage(FTrayBarHandle,TB_GETIMAGELIST,0,0);   //SendMessage(FTrayBarHandle,TB_GETBITMAPFLAGS,0,0);   try     for i := 0 to BtnCount - 1 do     begin       WriteProcessMemory(ThreadHandle, Buff, @BtnInfo, SizeOf(BtnInfo), R);       SendMessage(FTrayBarHandle, TB_GETBUTTON, i,integer(Buff));       ReadProcessMemory(ThreadHandle, Buff, @BtnInfo, SizeOf(BtnInfo), R);       SysHide := IsSysBtnHide(BtnInfo.fsState);       if SysHide and (not FShowHideBtn) then         Continue;       SysToolBtn := TSysToolbarBtn.Create;       SysToolBtn.SysHide := SysHide;       SysToolBtn.FVisible := not SysHide;       SysToolBtn.AssignBtnInfo(BtnInfo);       //SysToolBtn.FPicture.Canvas       SysToolBtn.FBtnIndex := BtnInfo.idCommand;       SendMessage(FTrayBarHandle,TB_GETBUTTONTEXT,SysToolBtn.FBtnInfo.idCommand,integer(integer(@Buff[0]) + SizeOf(@SysToolBtn.FBtnInfo)));       ReadProcessMemory(ThreadHandle, Pointer(integer(@Buff[0]) + SizeOf(@SysToolBtn.FBtnInfo)),@S[0],SizeOf(S), R);       //if SysToolBtn.FBtnInfo.fsState = 12 then       SysToolBtn.FBtnCaption := String(s);       SysToolBtn.EventHandle := FTrayBarHandle;       if not SysHide then       begin         SendMessage(FTrayBarHandle,TB_GETRECT,BtnInfo.idCommand,integer(integer(@Buff[0]) + SizeOf(BtnInfo)));         ReadProcessMemory(ThreadHandle,Pointer(integer(@Buff[0]) + SizeOf(BtnInfo)), @BtnRect,SizeOf(BtnRect),R);//得到Rect信息         SysToolBtn.FBtnRect := BtnRect;         SysToolBtn.FPicture.Width := BtnRect.Right - BtnRect.Left;         SysToolBtn.FPicture.Height := BtnRect.Bottom - BtnRect.Top;         BitBlt(SysToolBtn.FPicture.Canvas.Handle,0,0,SysToolBtn.FPicture.Width,SysToolBtn.FPicture.Height,                GetDc(FTrayBarHandle),BtnRect.Left,BtnRect.Top,SRCCOPY); //抓图       end;       FTrayBtnList.AddObject(SysToolBtn.FBtnCaption,SysToolBtn);       {if BtnInfo.fsState <> TBSTATE_HIDDEN then //如果是隐藏的,则不显示出来       begin          //FTrayBtnList.Add(s)       end;}     end;   finally     VirtualFreeEx(ThreadHandle, Buff, 0, MEM_RELEASE);     CloseHandle(ThreadHandle);   end; end; function TSysTaskBarOperate.GetTaskBtnCount: integer; begin   result := FTaskBtnList.Count; end; function TSysTaskBarOperate.GetTaskBtns(Index: integer): TSysToolbarBtn; begin                                           if (Index > -1 ) and (Index < FTaskBtnList.Count) then      result := TSysToolbarBtn(FTaskBtnList.Objects[Index])    else result := nil; end; procedure TSysTaskBarOperate.GetTaskList; var   i,BtnCount: integer;   ThreadId: LongInt;   ThreadHandle: THandle;   vBuffer: array[0..255] of Char;   SysToolBtn: TSysToolbarBtn;   BtnInfo: TTBButton;   Buff: pointer;   BtnRect: TRect;   WriteNum: Cardinal;   SysHide: boolean; begin   BtnCount := SendMessage(FProgramToolBarHandle, TB_BUTTONCOUNT,0,0);   GetWindowThreadProcessId(FProgramToolBarHandle,@ThreadId);   ThreadHandle := OpenProcess(PROCESS_VM_OPERATION or PROCESS_VM_READ or                               PROCESS_VM_WRITE, False, ThreadId);   Buff := VirtualAllocEx(ThreadHandle, nil,4096, MEM_RESERVE or MEM_COMMIT,PAGE_READWRITE);   try     for i := 0 to BtnCount - 1 do     begin       WriteProcessMemory(ThreadHandle,Buff,@BtnInfo,Sizeof(BtnInfo),WriteNum);       SendMessage(FProgramToolBarHandle,TB_GETBUTTON, i,integer(Buff));       ReadProcessMemory(ThreadHandle, Buff, @BtnInfo, SizeOf(BtnInfo), WriteNum);       SendMessage(FProgramToolBarHandle,TB_GETRECT,BtnInfo.idCommand,integer(integer(Buff) + SizeOf(BtnInfo)));       ReadProcessMemory(ThreadHandle,Pointer(integer(Buff) + SizeOf(BtnInfo)), @BtnRect,SizeOf(BtnRect),WriteNum);//得到Rect信息       SysHide := (BtnRect.Right - BtnRect.Left = 0) and (BtnRect.Bottom - BtnRect.Top  = 0);       SysHide := IsSysBtnHide(BtnInfo.fsState) or SysHide;       if SysHide and (not FShowHideBtn) then         Continue;       SysToolBtn := TSysToolbarBtn.Create;       SysToolBtn.SysHide := SysHide;       SysToolBtn.FVisible := not SysHide;       SysToolBtn.AssignBtnInfo(BtnInfo);       //SysToolBtn.FPicture.Canvas       SysToolBtn.FBtnIndex := BtnInfo.idCommand;       SendMessage(FProgramToolBarHandle,TB_GETBUTTONTEXT,SysToolBtn.FBtnInfo.idCommand,integer(integer(Buff) + SizeOf(@SysToolBtn.FBtnInfo)));       ReadProcessMemory(ThreadHandle, Pointer(integer(Buff) + SizeOf(@SysToolBtn.FBtnInfo)),@VBuffer,SizeOf(VBuffer), WriteNum);       SysToolBtn.FBtnCaption := String(VBuffer);       SysToolBtn.EventHandle := FProgramToolBarHandle;       SysToolBtn.FBtnRect := BtnRect;       FTaskBtnList.AddObject(SysToolBtn.FBtnCaption,SysToolBtn);     end;   finally     VirtualFreeEx(ThreadHandle, Buff,0, MEM_RELEASE);     CloseHandle(ThreadHandle);   end; end; function TSysTaskBarOperate.GetTrayBtnCount: integer; begin    result := FTrayBtnList.Count; end; function TSysTaskBarOperate.GetTrayBtns(Index: integer): TSysToolbarBtn; begin    if (Index > -1 ) and (Index < FTrayBtnList.Count) then      result := TSysToolbarBtn(FTrayBtnList.Objects[Index])    else result := nil; end; procedure TSysTaskBarOperate.HideTrayBtnClick; begin   PostMessage(FHideTrayBtnHandle,WM_LButtonDown,0,0);   PostMessage(FHideTrayBtnHandle,WM_LButtonUp,0,0); end; procedure TSysTaskBarOperate.ImeRectBtnClick; begin   PostMessage(FImeRecHandle,WM_LButtonDown,0,MakeLParam(4,5));   PostMessage(FImeRecHandle,WM_LButtonUp,0,MakeLParam(4,5)); end; function TSysTaskBarOperate.IsSysBtnHide(BtnState: Dword): boolean; begin   result := GetBitNum(4,BtnState) = 1; end; procedure TSysTaskBarOperate.SetReBaVisible(const Value: boolean); begin   if (FRegBarVisible <> Value) and Visible then   begin     FRegBarVisible := Value;     if Value then       ShowWindow(FReBarHandle,SW_Normal)     else       ShowWindow(FReBarHandle,SW_Hide);   end; end; procedure TSysTaskBarOperate.SetquickBarVisible(const Value: boolean); begin   if (FquickBarVisible <> Value) and TaskBarVisible then   begin     FquickBarVisible := Value;     if Value then       ShowWindow(FQuitLauchHandle,SW_Normal)     else       ShowWindow(FQuitLauchHandle,SW_Hide);   end; end; procedure TSysTaskBarOperate.SetShowHideBtn(const Value: boolean); begin   if FShowHideBtn <> Value then   begin     FShowHideBtn := Value;     ClearTrayBtnList;     GetIconList;     ClearTaskBtnList;     GetTaskList;   end; end; procedure TSysTaskBarOperate.SetTaskBarVisible(const Value: boolean); begin   if (FTaskBarVisible <> Value) and FRegBarVisible then   begin     FTaskBarVisible := Value;     if Value then       ShowWindow(FProgramContrainerHandle,SW_Normal)     else       ShowWindow(FProgramContrainerHandle,SW_Hide);   end; end; procedure TSysTaskBarOperate.SetTaskToolBarVisible(const Value: boolean); begin   if (FTaskToolBarVisible <> Value) and (FTaskBarVisible) then   begin     FTaskToolBarVisible := Value;     if Value then       ShowWindow(FProgramToolBarHandle,SW_Normal)     else       ShowWindow(FProgramToolBarHandle,SW_Hide);   end; end; procedure TSysTaskBarOperate.SetTimeDlg; begin   winexec('rundll32.exe   shell32.dll,Control_RunDLL   timedate.cpl',9); // SendMessage(FClockHandle, WM_LBUTTONDBLCLK,0,MakeLong(2,2)); // SendMessage(FClockHandle,WM_LBUTTONUP,0,MakeLong(2,2)); end; procedure TSysTaskBarOperate.SetVisible(const Value: boolean); begin   if FVisible <> Value then   begin     FVisible := Value;     if FVisible then       ShowWindow(FTaskBarHandle,SW_NORMAL)     else       ShowWindow(FTaskBarHandle,SW_HIDE);   end; end; procedure TSysTaskBarOperate.ShowTime; begin   AddTipTool({FClockHandle}FProgramToolBarHandle,1,pchar('时间显示'), PChar(DateToStr(now)),$00FFBFBF,$00A60053);//添加气泡提示 end; procedure TSysTaskBarOperate.StartBtnClick; begin   SendMessage(self.FStartBtnHandle,WM_LBUTTONDOWN,0,0);   SendMessage(self.FStartBtnHandle,WM_LBUTTONUP,0,0); end; procedure TSysTaskBarOperate.StartBtnWndProc(var Message: TMessage); begin   if Message.Msg = WM_LButtonup then     ShowMessage('sdf'); end; procedure TSysTaskBarOperate.SetStartBtnVisible(const Value: boolean); begin   if (FStartBtnVisible <> Value) and Visible then   begin     FStartBtnVisible := Value;     if Value then       ShowWindow(FStartBtnHandle,SW_Normal)     else       ShowWindow(FStartBtnHandle,SW_Hide);   end; end; procedure TSysTaskBarOperate.SetImeBarVisible(const Value: boolean); begin   if (FImeBarVisible <> Value) and FRegBarVisible then   begin     FImeBarVisible := Value;     if Value then       ShowWindow(FImeRecHandle,SW_Normal)     else       ShowWindow(FImeRecHandle,SW_Hide);   end; end; procedure TSysTaskBarOperate.SetTrayBarVisible(const Value: boolean); begin   if (FTrayBarVisible <> Value) and FVisible then   begin     FTrayBarVisible := Value;     if Value then       ShowWindow(FTrayNotifyHandle,SW_Normal)     else       ShowWindow(FTrayNotifyHandle,SW_Hide);   end; end; procedure TSysTaskBarOperate.HideOn; begin   ReBarVisible := false;   TrayBarVisible := false;   StartBtnVisible := false; end; procedure TSysTaskBarOperate.ShowOn; begin   ReBarVisible := true;   TaskBarVisible := true;   quickBarVisible := true;   TaskToolBarVisible := true;   StartBtnVisible := true;   TrayBarVisible := true;   ImeBarVisible := true; end; { TSysToolbarBtn } procedure TSysToolbarBtn.AssignBtnInfo(Info: TTBButton); begin     FBtnInfo.iBitmap := Info.iBitmap;     FBtnInfo.idCommand := Info.idCommand;     FBtnInfo.fsState := Info.fsState;     FBtnInfo.fsStyle := Info.fsStyle;     FBtnInfo.bReserved := Info.bReserved;     FBtnInfo.dwData := Info.dwData;     FBtnInfo.iString := Info.iString; end; procedure TSysToolbarBtn.Click; begin   SendMessage(EventHandle,WM_LBUTTONDOWN,0,MakeLong(FBtnRect.Left + 2,FBtnRect.Top + 2));   SendMessage(EventHandle,WM_LBUTTONUP,0,MakeLong(FBtnRect.Left + 2,FBtnRect.Top + 2)); end; constructor TSysToolbarBtn.Create; begin   Inherited Create;   FillChar(FBtnInfo,SizeOf(FBtnInfo), 0);   FPicture := TBitMap.Create; end; procedure TSysToolbarBtn.DbClick; begin    SendMessage(EventHandle, WM_LBUTTONDBLCLK,0,MakeLong(FBtnRect.Left + 2,FBtnRect.Top + 2));    SendMessage(EventHandle,WM_LBUTTONUP,0,MakeLong(FBtnRect.Left + 2,FBtnRect.Top + 2)); end; destructor TSysToolbarBtn.Destroy; begin   FPicture.Free;   if (not isSysHide) and (not FVisible) then     Visible := true   else if IsSysHide and FVisible then     Visible := false;   ZeroMemory(Pointer(@FBtnInfo),Sizeof(FBtnInfo));   inherited; end; function TSysToolbarBtn.GetBtnInfo: TTBButton; begin   result := FBtnInfo; end; procedure TSysToolbarBtn.RClick; begin   SendMessage(EventHandle,WM_RBUTTONDOWN,0,MakeLong(FBtnRect.Left + 2,FBtnRect.Top + 2));   SendMessage(EventHandle,WM_RBUTTONUP,0,MakeLong(FBtnRect.Left + 2,FBtnRect.Top + 2)); end; procedure TSysToolbarBtn.SetVisible(const Value: boolean); begin   if FVisible <> Value then   begin     FVisible := Value;     if FVisible then       SendMessage(EventHandle,TB_HIDEBUTTON,BtnInfo.idCommand,0)     else       SendMessage(EventHandle,TB_HIDEBUTTON,BtnInfo.idCommand,1);   end; end; end. 使用Demo unit Unit1; interface uses   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,   Dialogs, RzButton, StdCtrls, RzLstBox, ExtCtrls, RzPanel, ToolWin,   ComCtrls,WindowsOperate, RzChkLst, RzRadChk, RzLabel, RzTabs; type   TForm1 = class(TForm)     RzPageControl1: TRzPageControl;     TabSheet1: TRzTabSheet;     RzCheckList1: TRzCheckList;     RzLabel1: TRzLabel;     RzRadioButton1: TRzRadioButton;     RzRadioButton2: TRzRadioButton;     TabSheet2: TRzTabSheet;     Image2: TImage;     RzLabel2: TRzLabel;     RzCheckList2: TRzCheckList;     RzLabel3: TRzLabel;     RzRadioButton4: TRzRadioButton;     RzRadioButton3: TRzRadioButton;     RzButton1: TRzButton;     procedure FormCreate(Sender: TObject);     procedure RzCheckList1Change(Sender: TObject; Index: Integer;       NewState: TCheckBoxState);     procedure RzRadioButton1Click(Sender: TObject);     procedure RzCheckList1Click(Sender: TObject);     procedure RzButton2Click(Sender: TObject);     procedure RzRadioButton3Click(Sender: TObject);     procedure RzCheckList2Change(Sender: TObject; Index: Integer;       NewState: TCheckBoxState);     procedure RzCheckList2DblClick(Sender: TObject);     procedure RzButton1Click(Sender: TObject);     procedure RzCheckList1DblClick(Sender: TObject);   private     { Private declarations }     OldProc:FARPROC;     procedure StartBtnWndProc(var Message: TMessage);     procedure ReSetList(ShowHideBtn: boolean=false);   public     { Public declarations }     nn: TSysTaskBarOperate;   end; var   Form1: TForm1; implementation {$R *.dfm} uses   CommCtrl,ShellApi; procedure TForm1.FormCreate(Sender: TObject); begin   nn := TSysTaskBarOperate.Create(self);   RzRadioButton2.Checked := true;   RzRadioButton3.Checked := true; end; procedure TForm1.StartBtnWndProc(var Message: TMessage); begin end; procedure TForm1.RzCheckList1Change(Sender: TObject; Index: Integer;   NewState: TCheckBoxState); begin   if NewState = CbChecked then     TSysToolbarBtn(nn.TrayBtnList.Objects[index]).Visible := true   else     TSysToolbarBtn(nn.TrayBtnList.Objects[index]).Visible := false;   nn.HideTrayBtnClick; end; procedure TForm1.RzRadioButton1Click(Sender: TObject); begin   ReSetList(not RzRadioButton2.Checked);   RzRadioButton3.Checked := RzRadioButton2.Checked;   RzRadioButton4.Checked := RzRadioButton1.Checked; end; procedure TForm1.ReSetList(ShowHideBtn: boolean); var   i: integer; begin   nn.ShowHideBtn := ShowHideBtn;   self.RzCheckList1.Items := nn.TrayBtnList;   self.RzCheckList2.Items := nn.TaskBtnList;   for i := 0 to RzCheckList1.Items.Count - 1 do     RzCheckList1.ItemChecked := not TSysToolbarBtn(nn.TrayBtnList.Objects).isSysHide;   for i := 0 to RzCheckList2.Items.Count - 1 do     RzCheckList2.ItemChecked := not nn.TaskBtns.isSysHide end; procedure TForm1.RzCheckList1Click(Sender: TObject); begin   if RzCheckList1.ItemIndex <> -1 then   begin     Image2.Width := nn.TrayBtns[RzCheckList1.ItemIndex].Picture.Width;     Image2.Height := nn.TrayBtns[RzCheckList1.ItemIndex].Picture.Height;     Image2.Picture.Assign(nn.TrayBtns[RzCheckList1.ItemIndex].Picture);   end; end; procedure TForm1.RzCheckList1DblClick(Sender: TObject); begin    if RzCheckList1.ItemIndex <> -1 then       nn.TrayBtns[RzCheckList1.ItemIndex].Click; end; procedure TForm1.RzButton2Click(Sender: TObject); begin    nn.TrayBtns[RzCheckList1.ItemIndex].DbClick end; procedure TForm1.RzRadioButton3Click(Sender: TObject); begin   RzRadioButton2.Checked := RzRadioButton3.Checked;   RzRadioButton1.Checked := RzRadioButton4.Checked; end; procedure TForm1.RzCheckList2Change(Sender: TObject; Index: Integer;   NewState: TCheckBoxState); begin   if NewState = CbChecked then     nn.TaskBtns[index].Visible := true   else     nn.TaskBtns[index].Visible := false; end; procedure TForm1.RzCheckList2DblClick(Sender: TObject); begin    if RzCheckList2.ItemIndex <> -1 then      nn.TaskBtns[RzCheckList2.ItemIndex].Click; end; procedure TForm1.RzButton1Click(Sender: TObject); begin   nn.HideOn; end; end.

你可能感兴趣的:(image,function,Integer,任务,Constructor,destructor)