多个桌面






4.71/5 (21投票s)
一个简单的基于对话框的 Win32 应用程序,为 Windows 平台提供多个桌面,就像 Linux 系统中的一样。
引言
这是一个简单的基于 Win32 对话框的应用程序,它在 Windows 平台上提供了多桌面支持,类似于 LINUX 系统。该应用程序允许您创建 1 到 3 个桌面。通过这些不同的桌面,您可以轻松地分隔您的应用程序。当您有一些不想因错误关闭的应用程序时,这非常有用,因为您可以将其放在其他桌面上。该应用程序还在默认桌面中显示每个新创建的桌面快照的最后状态。
屏幕截图
以下是显示所有其他桌面最后状态的窗口的屏幕截图。只有当您在默认桌面中时才能看到此窗口(如果您在另一个桌面中,只需按 WIN + 1 键切换到默认桌面)。只需单击托盘图标即可查看此窗口。您可以通过简单地单击该桌面的图像转到另一个桌面。

背景
该应用程序使用 CreateDesktop
和 SwitchDesktop()
API 来创建和切换桌面。 它还使用 StretchBlt
API 来捕获桌面并显示它。
CreateDesktop
: 它创建一个新的桌面SwitchDesktop
: 它使桌面可见并激活它。 这使桌面能够接收来自用户的输入StretchBlt
: 它用于通过拉伸或压缩将源矩形复制到目标矩形
为了更好地理解以上 API,可以参考 MSDN。
Using the Code
此应用程序中使用了三个不同的对话框。 主对话框用于创建和切换桌面。
以下是 Multidesktop
中使用的代码
//Check the registry for previous setting.
//It show the Number of desktops user require
INT NoOfDesk = CheckRegValue(_T("NoOfDesk"));
//Put the Application ICON in system Tray
PutInTaskBar(hWndDlg);
//Add the Applications path in the System Startup
AddToRun(AppPath)
//registers the Hot key
AddHotKey(hWndDlg);
//function retrieves a handle to the desktop that receives user input
//i.e. Default Desktop.
hOriginalInput = OpenInputDesktop(0, FALSE, DESKTOP_SWITCHDESKTOP);
// Create new Desktops Depends on Last Setting
for (int i=0 ; i<NoOfDesk; i++)
{
hDesktop[i] = CreateDesktop(DeskName[i], NULL, NULL, 0, GENERIC_ALL, NULL);
}
//Will Open Process in new desktop
//user init process is required to start the explorer and
//initialize the new desktop
//At First time only
if(FirstTime)
{
for (int i=0; i<NoOfDesk; i++)
{
//Will Start the Init Process in Each Desktop
OpenProc(_T("userinit.exe"),DeskName[i]);
}
FirstTime = FALSE;
}
现在我们已经创建了新的桌面并保存了默认桌面的句柄。 以下代码显示了如何切换到新桌面。 我使用了两种技术来切换到新桌面。
- 通过热键切换桌面
我使用了四个热键来切换到和切换出新桌面
- Win + 1 用于切换到默认桌面
- Win + 2 用于切换到第一个桌面
- Win + 3 用于切换到第二个桌面
- Win + 4 用于切换到第三个桌面
以下代码显示了我如何做到这一点
case WM_HOTKEY: { HDESK hNewDesk; //WIN + 1 Pressed Change to Default Desktop if (wParam == GlobalAddAtom(L"First_Desk")) { hNewDesk = hOriginalInput; DeskNo = -1; //WIN + 2 || WIN+ 3 || WIN + 4 Pressed Previously if (OtherKey) { flag = TRUE; OtherKey = FALSE; } else // WIN + 2 || WIN+ 3 || WIN + 4 NOT PRESSED PREVIOUSLY { flag = FALSE; } } //WIN + 2 Pressed Changed to New Desktop if (wParam == GlobalAddAtom(L"Second_Desk")) { hNewDesk = hDesktop[0]; PrvDeskNo = 0; OtherKey = TRUE; } .... //Same for Win + 3 and Win + 4 .... SwitchDesktop( hNewDesk ) //Switch to Desired Desktop. if ( flag ) { //Capture the Screen of Desktop and Show in dialog Box. CaptureScreen(hStaticDesk[PrvDeskNo]); } }
- 当您单击桌面屏幕截图时,切换桌面。
以下代码显示了我如何做到这一点
case WM_COMMAND: if (LOWORD(wParam) == IDC_Desk2 ) { SwitchDesktop( hDesktop[0] ); OtherKey = TRUE; PrvDeskNo = 0; break; } ... ... //almost same for other Click Events.
关注点
我在一家软件公司工作,我们当地的网站列出了所有的歌曲和播放它的软件。 但是,由于它作为 Web 浏览器打开,因此大多数时候,人们在浏览时会错误地将其关闭。 我的一位朋友问我是否可以帮助他,我想到了一个提供多个桌面的软件的想法。 我认为最好开发自己的软件,而不是从互联网上下载。 然后我发现了这个漂亮而有用的应用程序。
历史
- 提交于 2007 年 10 月 27 日