Windows虚拟桌面
PROCESS_INFORMATION ProcessInfo;
STARTUPINFO StartupInfo;
HDESK hDesktop;
HDESK hOriginalThread;
HDESK hOriginalInput; //核心代码: //创建名称为“Virtual”的虚拟桌面
hDesktop = CreateDesktop("Virtual", NULL, NULL, , GENERIC_ALL , NULL); //初始化创建进程必须的结构体
ZeroMemory(&StartupInfo, sizeof(StartupInfo));
ZeroMemory(&ProcessInfo, sizeof(ProcessInfo));
StartupInfo.cb = sizeof(StartupInfo);
StartupInfo.lpDesktop = "Virtual"; //记录原始桌面的句柄
hOriginalThread = GetThreadDesktop(GetCurrentThreadId());
hOriginalInput = OpenInputDesktop(, FALSE, DESKTOP_SWITCHDESKTOP); //创建桌面外壳进程
CreateProcess(NULL, "explorer", NULL, NULL, FALSE, , NULL, NULL, &StartupInfo, &ProcessInfo); //下面是桌面切换代码: SetThreadDesktop(hDesktop); //设置桌面活动焦点是虚拟桌面
SwitchDesktop(hDesktop); //切换到虚拟桌面 SetThreadDesktop(hOriginalThread);
SwitchDesktop(hOriginalInput);
CloseDesktop(hDesktop); //关闭虚拟桌面 //核心代码就是这些,然后加入热键,设置程序切换时的特效什么的就自由添加好了 附上程序源代码: //stdafx.h //由于用到渐显渐隐的效果,需要加入AnimateWindow,由于VC6的限制,要在最上面加入 #undef WINVER
#define WINVER 0X500 //VitualDesktopDlg.h public:
PROCESS_INFORMATION ProcessInfo;
STARTUPINFO StartupInfo;
HDESK hDesktop;
HDESK hOriginalThread;
HDESK hOriginalInput;
BOOL IsOriginalDesktopActive; //是否在原始桌面rz
BOOL IsInitialDesktop; //是否初始化桌面,防止灰色按钮克星造成不可估计的后果
BOOL IsWindowShow; //程序是否可见 protected: afx_msg LRESULT OnHotKey(WPARAM wParam, LPARAM lParam);//自定义热键消息 //VitualDesktopDlg.cpp #include <WINUSER.H>
#pragma comment(lib, "user32.lib") //这两个是AnimateWindow要的头和库 BEGIN_MESSAGE_MAP(CVitualDesktopDlg, CDialog)
//{{AFX_MSG_MAP(CVitualDesktopDlg)
ON_MESSAGE(WM_HOTKEY, OnHotKey) //链接热键消息
//}}AFX_MSG_MAP
END_MESSAGE_MAP() BOOL CVitualDesktopDlg::OnInitDialog()
{
CDialog::OnInitDialog();
ModifyStyleEx(WS_EX_APPWINDOW, WS_EX_TOOLWINDOW); //设置窗体样式为工具样式,这样任务栏就没有图标了 SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon IsOriginalDesktopActive = FALSE;
IsInitialDesktop = TRUE;
IsWindowShow = TRUE;
RegisterHotKey(m_hWnd, , MOD_WIN, 'X'); //设置显示程序热键为 Win+X return TRUE; // return TRUE unless you set the focus to a control
} void CVitualDesktopDlg::OnOK()
{
if (IsInitialDesktop) //第一次运行时初始化程序,加上判断防止灰色按钮克星
{
//创建名称为“Virtual”的虚拟桌面
hDesktop = CreateDesktop("Virtual", NULL, NULL, , GENERIC_ALL , NULL); //初始化创建进程必须的结构体
ZeroMemory(&StartupInfo, sizeof(StartupInfo));
ZeroMemory(&ProcessInfo, sizeof(ProcessInfo));
StartupInfo.cb = sizeof(StartupInfo);
StartupInfo.lpDesktop = "Virtual"; //记录原始桌面的句柄
hOriginalThread = GetThreadDesktop(GetCurrentThreadId());
hOriginalInput = OpenInputDesktop(, FALSE, DESKTOP_SWITCHDESKTOP); //创建桌面外壳进程
CreateProcess(NULL, "explorer", NULL, NULL, FALSE, , NULL, NULL, &StartupInfo, &ProcessInfo); //完成初始化,以后不会再次被调用,防止打开虚拟桌面出现资源管理器
IsInitialDesktop = !IsInitialDesktop; SetThreadDesktop(hDesktop); //设置桌面活动焦点是虚拟桌面
SwitchDesktop(hDesktop); //切换到虚拟桌面 GetDlgItem(IDOK)->EnableWindow(FALSE); //设置初始化按钮失效,只允许热键操作
RegisterHotKey(m_hWnd, , MOD_ALT, 'Z'); //设置热键为 Alt+Z
} return;
CDialog::OnOK();
} void CVitualDesktopDlg::OnClose()
{
//注销热键
UnregisterHotKey(m_hWnd, );
UnregisterHotKey(m_hWnd, ); //关闭创建的explorer
if (!IsInitialDesktop)
{
HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, ProcessInfo.dwProcessId); //获取虚拟桌面的explorer句柄
if(hProcess)
{
TerminateProcess(hProcess, ); //结束虚拟桌面的explorer
}
CloseHandle(hProcess);
}
exit();
CDialog::OnClose();
} LRESULT CVitualDesktopDlg::OnHotKey(WPARAM wParam, LPARAM lParam)
{
if (wParam == ) //消息为 Alt+Z 时
{
if (IsOriginalDesktopActive) //是否在原始桌面
{
hDesktop = CreateDesktop("Virtual", NULL, NULL, , GENERIC_ALL , NULL); //创建虚拟桌面(与CloseDesktop相对应)
SetThreadDesktop(hDesktop);
SwitchDesktop(hDesktop);
}
else
{
SetThreadDesktop(hOriginalThread);
SwitchDesktop(hOriginalInput);
CloseDesktop(hDesktop); //关闭虚拟桌面
}
IsOriginalDesktopActive = !IsOriginalDesktopActive;
}
if (wParam == )
{
if (IsWindowShow)
{
AnimateWindow(m_hWnd, , AW_BLEND|AW_HIDE); //隐藏窗口
}
else
{
AnimateWindow(m_hWnd, , AW_BLEND); //显示窗口
}
IsWindowShow = !IsWindowShow;
} return TRUE;
}
Windows虚拟桌面的更多相关文章
- Windows 虚拟桌面工具 Desktops v2.0
https://technet.microsoft.com/en-us/sysinternals/cc817881.aspx
- NVIDIA GRID 和 NICE DCV 技术用于实现 Linux 和 Windows® 图形加速虚拟桌面
NVIDIA GRID 和 NICE DCV 技术用于实现 Linux 和 Windows® 图形加速虚拟桌面. NICE DCV: 满足 LINUX 和 WINDOWS 的远程 3D 通过 NICE ...
- vmware 桌面虚拟化 horizon view 介绍(使用微软的RDP协议或vmware 专有的PCoIP协议,连接到虚拟桌面,并且可以使用本地的USB设备、本地存储)
虚拟化(一):虚拟化及vmware产品介绍 虚拟化(二):虚拟化及vmware workstation产品使用 虚拟化(三):vsphere套件的安装注意及使用 虚拟化(四):vsphere高可用功能 ...
- Windows 10 虚拟桌面切换
从Windows 10开始,终于有了和Mac一样的虚拟桌面了.但总感觉用着非常的别扭.在Mac中,切换虚拟桌面的操作可谓方便至极:除了触控板和Magic Mouse原生的支持外,通过罗技M557/55 ...
- 开发者神器!Windows上最强大的虚拟桌面工具-Dexpot
简介 : 用过Linux和Mac计算机的人都知道 , 这两个系统上都有个多桌面的功能非常使用 . 而在Windows上并没有该项功能 , 虽然目前Win10已经增加了多桌面的程序 , 但使用上仍体验不 ...
- virgo虚拟桌面
转载: http://www.appinn.com/virgo-virtual-desktop-for-windows/ virgo 是一款 Windows 下的极简虚拟桌面,源程序自身只有 7KB, ...
- [IT新应用]如何部署CITRIX 虚拟桌面
1.搭建AD,并部署dhcp. 2.安装ddc服务器,加入域.这台服务器就是用来发布后端服务器或者WIN7的PC给用户使用.相当于调度. 3.安装windows server或者win7,用于发布给用 ...
- 虚拟桌面基础架构(VDI)与终端服务和传统PC对比
VDI(Virtual Desktop Infrastructure),即虚拟桌面基础架构,正迅速成为一个热门词汇,它将颠覆企业向终端用户交付应用的游戏规则.这篇专题就是想通过VDI与两种传统技术的对 ...
- 从零开始部署小型企业级虚拟桌面 -- Vmware Horizon View 6 For Linux VDI -- 结构规划
环境说明 注,本套环境所用机器全部是64位的. 管理服务器载体:安装win7操作系统,通过VMware Workstation安装4台虚拟机,用作vCenter,Connection Server,D ...
随机推荐
- 深入理解js里面的this
闲聊两句(可以忽略): 毕业有半年了,时间还过得真快,不过还好,感觉自己相对于刚毕业那会确实成长了很多:好久没有打游戏了(自己决心要戒掉的),消磨时光的时候就看看电影或者追追电视剧,再无聊就洗洗衣服. ...
- Code-NFine:变量修改
ylbtech-Code-NFine:Cookie变量修改 1. NFine.Code返回顶部 1.Operator 1.1.OperatorProvider.cs /**************** ...
- 架构-MVVM:MVVM核心概念
ylbtech-架构-MVVM:MVVM核心概念 1.返回顶部 1. MVVM模式是Model.View.ViewModel的简称,最早出现在WPF,现在Silverlight中也使用该模式,MVVM ...
- apple-touch-startup-image 制作iphone web应用程序的启动画面
为ipad制作web应用程序的启动画面时发现个问题,只能显示竖屏图,横屏图出不来,如下: 首先页面头部里要加入(这个是APP启动画面图片,如果不设置,启动画面就是白屏,图片像素就是手机全屏的像素) & ...
- bzoj1783
博弈论+dp 从未做过博弈论... 思路是这样的,我们倒着考虑,分别设f[i]表示先手选了a[i]后能取得的最大值,g[i]表示先手取了a[i]后后手能获得的最大值 g[i]=f[mx],f[mx]是 ...
- LXD安装
#安装 #初始化(一路next) sudo lxd init #启动容器 lxc launch ubuntu:16.04 first #进到容器内 lxc exec first -- /bin/bas ...
- 洛谷 - P1433 - 吃奶酪 - dfs
https://www.luogu.org/problemnew/show/P1433 并不是每一个求最短距离就是bfs,这个肯定是dfs. 直接计算15!可以知道枚举必定超时,但是! 我们dfs非常 ...
- 洛谷 - P1361 - 小M的作物 - 最小割 - 最大权闭合子图
第一次做最小割,不是很理解. https://www.luogu.org/problemnew/show/P1361 要把东西分进两类里,好像可以应用最小割的模板,其中一类A作为源点,另一类B作为汇点 ...
- 开挂的map
转自:http://blog.csdn.net/sunshinewave/article/details/8067862 #include<iostream> #include<ma ...
- LuoguP1370 Charlie的云笔记序列 【dp】By cellur925
题目传送门 题目大意:给你一个序列,求出它所有区间的本质不同的子序列个数.(空序列也算作本质不同),数据范围$1e5$. 我们肯定是不能一个个枚举区间的...而且这个复杂度下,也就大概$O(n)$或$ ...