自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;
还是比较简单的吧,请试一下。