• 多桌面切换


    unit Unit1;  
      
    interface  
      
    uses  
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,  
      Dialogs, Menus, StdCtrls, Buttons, ExtCtrls,  
      TrayIconForm, AppEvnts;  
      
    type  
      TShareInfo = record  
        Actived : array [ 1..4 ] of boolean;  
      end;  
      PShareInfo = ^TShareInfo;  
      
      TForm1 = class(TForm)  
        N1: TMenuItem;  
        N2: TMenuItem;  
        N3: TMenuItem;  
        N11: TMenuItem;  
        N21: TMenuItem;  
        N31: TMenuItem;  
        N41: TMenuItem;  
        BitBtn2: TBitBtn;  
        Panel1: TPanel;  
        Image1: TImage;  
        Label1: TLabel;  
        Label2: TLabel;  
        Edit1: TEdit;  
        Label3: TLabel;  
        Label4: TLabel;  
        N4: TMenuItem;  
        PopupMenu1: TPopupMenu;  
        ApplicationEvents1: TApplicationEvents;  
        procedure N3Click(Sender: TObject);  
        procedure N2Click(Sender: TObject);  
        procedure BitBtn2Click(Sender: TObject);  
        procedure N4Click(Sender: TObject);  
        procedure FormCreate(Sender: TObject);  
        procedure ApplicationEvents1Minimize(Sender: TObject);  
        procedure N11Click(Sender: TObject);  
        procedure TrayIcon1DblClick(Sender: TObject);  
      private  
        { Private declarations }  
        RunningOnDesktop: integer;  
        Failed : boolean;  
        procedure OnHotKey(var Msg: TMessage); message WM_HOTKEY;  
      public  
        { Public declarations }  
      end;  
      
    var  
      Form1: TForm1;  
      
    implementation  
      
    {$R *.dfm}  
    {$R UAC.res}  
      
    procedure SwitchToDesktop(number: integer);  
    var name: string;  
      DsktpHandle: HDESK;  
      SysPath: array[1..MAX_PATH] of char;  
      PPath: PChar;  
      StrPath: string;  
      len: integer;  
      si: STARTUPINFO;  
      pi: PROCESS_INFORMATION;  
    begin  
      if number = 1 then  
        name := 'Default'  
      else  
        name := 'NewDesktop' + inttostr(number);  
      
      ZeroMemory(@si, sizeof(STARTUPINFO));  
      si.cb := sizeof(STARTUPINFO);  
      si.dwFlags := STARTF_USESHOWWINDOW or STARTF_USESTDHANDLES;  
      si.wShowWindow := SW_SHOW;  
      si.lpDesktop := PChar(Name);  
      
      DsktpHandle := OpenDesktop(pchar(Name),  
        DF_ALLOWOTHERACCOUNTHOOK, true,  
        DESKTOP_CREATEMENU or DESKTOP_CREATEWINDOW or  
        DESKTOP_ENUMERATE or DESKTOP_HOOKCONTROL or  
        DESKTOP_JOURNALPLAYBACK or  
        DESKTOP_JOURNALRECORD or DESKTOP_READOBJECTS or  
        DESKTOP_SWITCHDESKTOP or DESKTOP_WRITEOBJECTS);  
      if DsktpHandle = 0 then  
      begin  
        //  桌面不存在,创建桌面  
        DsktpHandle := CreateDesktop(PChar(Name), nil, nil,  
          DF_ALLOWOTHERACCOUNTHOOK,  
          DESKTOP_CREATEMENU or DESKTOP_CREATEWINDOW or  
          DESKTOP_ENUMERATE or DESKTOP_HOOKCONTROL or  
          DESKTOP_JOURNALPLAYBACK or  
          DESKTOP_JOURNALRECORD or DESKTOP_READOBJECTS or  
          DESKTOP_SWITCHDESKTOP or DESKTOP_WRITEOBJECTS,  
          nil);  
        if DsktpHandle = 0 then  
        begin  
          ShowMessage('打开桌面失败! ' + SysErrorMessage(GetLastError));  
          exit;  
        end;  
      
        PPath := @SysPath;  
        len := GetWindowsDirectory(@SysPath, MAX_PATH);  
        SetString(StrPath, PPath, len);  
        if (not CreateProcess(PChar(StrPath + '/explorer.exe'), nil, nil, nil, True, 0, nil, nil, si, pi)) then  
        begin  
          ShowMessage('进程创建失败! ' + SysErrorMessage(GetLastError));  
          CloseDeskTop(DsktpHandle);  
          exit;  
        end;  
      
      end;  
      
      SwitchDesktop(DsktpHandle);  
    end;  
      
    procedure TForm1.N3Click(Sender: TObject);  
    begin  
      Close;  
    end;  
      
    procedure TForm1.N11Click(Sender: TObject);  
    begin  
      if Sender is TMenuItem then  
        SwitchToDesktop((Sender as TMenuItem).Tag);  
    end;  
      
    procedure TForm1.N2Click(Sender: TObject);  
    begin  
      Show;  
    end;  
      
    procedure TForm1.ApplicationEvents1Minimize(Sender: TObject);  
    begin  
      Hide;  
    end;  
      
    procedure TForm1.BitBtn2Click(Sender: TObject);  
    begin  
      Hide;  
    end;  
      
    procedure TForm1.N4Click(Sender: TObject);  
    begin  
      TrayForm.Show;  
    end;  
      
    procedure TForm1.OnHotKey(var Msg: TMessage);  
    begin  
      if Msg.WParam >0 then  
      if Msg.WParam <=4 then  
        SwitchToDesktop(Msg.WParam);  
      
      //if Msg.WParam=5 then  
    //    TrayIcon1.Visible := not TrayIcon1.Visible;  
    end;  
      
    procedure TForm1.TrayIcon1DblClick(Sender: TObject);  
    begin  
      Show;  
    end;  
      
    procedure TForm1.FormCreate(Sender: TObject);  
    begin  
      RegisterHotKey(Handle, 1, MOD_CONTROL, VK_F1);  
      RegisterHotKey(Handle, 2, MOD_CONTROL, VK_F2);  
      RegisterHotKey(Handle, 3, MOD_CONTROL, VK_F3);  
      RegisterHotKey(Handle, 4, MOD_CONTROL, VK_F4);  
      RegisterHotKey(Handle, 5, MOD_CONTROL, VK_F5);  
    end;  
      
    end. 
    View Code
  • 相关阅读:
    cucumbe无法识别中文场景的问题
    springboot启动报错Failed to configure a DataSource
    ADB interface驱动
    stock1114
    ojdbc6下载地址
    用count sql做jmeter的while条件
    python各模块组合实例
    python csv与字典操作
    python OrderDict
    python3 aes加解密
  • 原文地址:https://www.cnblogs.com/key-ok/p/3417735.html
Copyright © 2020-2023  润新知