用代码实现windows10下的虚拟桌面创建功能

自windows10开始windows有了类似macOS的虚拟桌面功能,可以开多个虚拟桌面,甚是方便,如何用代码来新增、删除、切换前后虚拟桌面呢?方法如下:

1、新增虚拟桌面:

    keybd_event(VK_LWIN, 0, 0 ,0);
    keybd_event(VK_CONTROL, 0, 0 ,0);
    keybd_event(BYTE('D'), 0, 0 ,0);
    keybd_event(BYTE('D'), 0, KEYEVENTF_KEYUP ,0);
    keybd_event(VK_CONTROL, 0, KEYEVENTF_KEYUP ,0);
    keybd_event(VK_LWIN, 0, KEYEVENTF_KEYUP,0);

2、删除虚拟桌面:

    keybd_event(VK_LWIN, 0, 0 ,0);
    keybd_event(VK_CONTROL, 0, 0 ,0);
    keybd_event(VK_F4, 0, 0 ,0);
    keybd_event(VK_F4, 0, KEYEVENTF_KEYUP ,0);
    keybd_event(VK_CONTROL, 0, KEYEVENTF_KEYUP ,0);
    keybd_event(VK_LWIN, 0, KEYEVENTF_KEYUP,0);

3、切换到前个虚拟桌面:

    keybd_event(VK_LWIN, 0, 0 ,0);
    keybd_event(VK_CONTROL, 0, 0 ,0);
    keybd_event(VK_LEFT, 0, 0 ,0);
    keybd_event(VK_LEFT, 0, KEYEVENTF_KEYUP ,0);
    keybd_event(VK_CONTROL, 0, KEYEVENTF_KEYUP ,0);
    keybd_event(VK_LWIN, 0, KEYEVENTF_KEYUP,0);

4、切换到后个虚拟桌面:

    keybd_event(VK_LWIN, 0, 0 ,0);
    keybd_event(VK_CONTROL, 0, 0 ,0);
    keybd_event(VK_RIGHT, 0, 0 ,0);
    keybd_event(VK_RIGHT, 0, KEYEVENTF_KEYUP ,0);
    keybd_event(VK_CONTROL, 0, KEYEVENTF_KEYUP ,0);
    keybd_event(VK_LWIN, 0, KEYEVENTF_KEYUP,0);

5、在创建的那个虚拟桌面上创建一个快捷键:

uses
ShlObj, ActiveX, ComObj ;
function CreateShortcut(Exe:string; Lnk:string = ''; Dir:string = ''; ID:Integer = -1):Boolean;
var
  IObj: IUnknown;
  ILnk: IShellLink;
  IPFile: IPersistFile;
  PIDL: PItemIDList;
  InFolder: array[0..MAX_PATH] of Char;
  LinkFileName: WideString;
begin
  Result := False;
  if not FileExists(Exe) then Exit;
  if Lnk = '' then Lnk := ChangeFileExt(ExtractFileName(Exe), '');
  IObj := CreateComObject(CLSID_ShellLink);
  ILnk := IObj as IShellLink;
  ILnk.SetPath(PChar(Exe));
  ILnk.SetWorkingDirectory(PChar(ExtractFilePath(Exe)));
  if (Dir = '') and (ID = -1) then ID := CSIDL_DESKTOP;
  if ID > -1 then
  begin
    SHGetSpecialFolderLocation(0, ID, PIDL);
    SHGetPathFromIDList(PIDL, InFolder);
    LinkFileName := Format('%s/%s.lnk', [InFolder, Lnk]);
  end else
  begin
    Dir := ExcludeTrailingPathDelimiter(Dir);
    if not DirectoryExists(Dir) then Exit;
    LinkFileName := Format('%s/%s.lnk', [Dir, Lnk]);
  end;
  IPFile := IObj as IPersistFile;
  if IPFile.Save(PWideChar(LinkFileName), False) = 0 then Result := True;
end; {CreateShortcut 函数结束}

6、如何使用createshortcut并使用edit控件来发送命令:

var
  TMPSTR: string[32];
begin
    CreateShortcut(Application.ExeName);
    TMPSTR:=Edit1.Text;
    keybd_event(VK_LWIN, 0, 0 ,0);
    keybd_event(VK_CONTROL, 0, 0 ,0);
    keybd_event(BYTE(TMPSTR[1]), 0, 0 ,0);
    keybd_event(BYTE(TMPSTR[1]), 0, KEYEVENTF_KEYUP ,0);
    keybd_event(VK_CONTROL, 0, KEYEVENTF_KEYUP ,0);
    keybd_event(VK_LWIN, 0, KEYEVENTF_KEYUP,0);
end;

还是比较简单的吧,请试一下。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值