65.9K
CodeProject 正在变化。 阅读更多。
Home

多个桌面

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.71/5 (21投票s)

2007年10月27日

CPOL

3分钟阅读

viewsIcon

96115

downloadIcon

5696

一个简单的基于对话框的 Win32 应用程序,为 Windows 平台提供多个桌面,就像 Linux 系统中的一样。

引言

这是一个简单的基于 Win32 对话框的应用程序,它在 Windows 平台上提供了多桌面支持,类似于 LINUX 系统。该应用程序允许您创建 1 到 3 个桌面。通过这些不同的桌面,您可以轻松地分隔您的应用程序。当您有一些不想因错误关闭的应用程序时,这非常有用,因为您可以将其放在其他桌面上。该应用程序还在默认桌面中显示每个新创建的桌面快照的最后状态。

屏幕截图

以下是显示所有其他桌面最后状态的窗口的屏幕截图。只有当您在默认桌面中时才能看到此窗口(如果您在另一个桌面中,只需按 WIN + 1 键切换到默认桌面)。只需单击托盘图标即可查看此窗口。您可以通过简单地单击该桌面的图像转到另一个桌面。

Screenshot - MultiDesktop.gif

背景

该应用程序使用 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;
}

现在我们已经创建了新的桌面并保存了默认桌面的句柄。 以下代码显示了如何切换到新桌面。 我使用了两种技术来切换到新桌面。

  1. 通过热键切换桌面

    我使用了四个热键来切换到和切换出新桌面

    1. Win + 1 用于切换到默认桌面
    2. Win + 2 用于切换到第一个桌面
    3. Win + 3 用于切换到第二个桌面
    4. 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]); 
            }
       }
  2. 当您单击桌面屏幕截图时,切换桌面。

    以下代码显示了我如何做到这一点

    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 日
© . All rights reserved.