程序控制桌面切换

原创 2004年06月25日 19:10:00

用向导建立一个Win32程序“hello, world!”,然后用下面的内容替换整个CPP文件内容就可以了


#include "stdafx.h"
#include "resource.h"

#include "ShellApi.h"

HINSTANCE hInst = NULL;

HDESK hDesktopCurrent;
HDESK hDesktopLlx;

LONG APIENTRY WndProc(
    HWND hWnd,
    UINT message,      // type of message
    WPARAM wParam,     // additional information
    LPARAM lParam)     // additional information
{
 int wmId, wmEvent;
 PAINTSTRUCT ps;
 HDC hdc;

 switch (message)
 {
  case WM_COMMAND:
   wmId    = LOWORD(wParam);
   wmEvent = HIWORD(wParam);
   // Parse the menu selections:
   switch (wmId)
   {
    case IDM_ABOUT:
       //DialogBox(hInst, (LPCTSTR)IDD_ABOUTBOX, hWnd, (DLGPROC)About);
       break;
    case IDM_EXIT:
       DestroyWindow(hWnd);
       break;
    default:
       return DefWindowProc(hWnd, message, wParam, lParam);
   }
   break;
  case WM_PAINT:
   hdc = BeginPaint(hWnd, &ps);
   // TODO: Add any drawing code here...
   RECT rt;
   GetClientRect(hWnd, &rt);
   //DrawText(hdc, szHello, strlen(szHello), &rt, DT_CENTER);
   EndPaint(hWnd, &ps);
   break;
  /*
  case WM_DESTROY:
   PostQuitMessage(0);
   break;
  //*/
  case WM_LBUTTONDOWN:
   break;
  case WM_HOTKEY:
   if(7777 == wParam)
   {
    PostQuitMessage(0);
   }
   else if(7778 == wParam)
   {
    SwitchDesktop(hDesktopCurrent);
   }
   else if(7779 == wParam)
   {
    SwitchDesktop(hDesktopLlx);
   }
   break;
  case WM_QUIT:
  case WM_DESTROY:
   SwitchDesktop(hDesktopCurrent);
   return DefWindowProc(hWnd, message, wParam, lParam);
  default:
   return DefWindowProc(hWnd, message, wParam, lParam);
   }
   return 0;
}

void StartMyExplore(void)
{
 STARTUPINFO sui;         // Process startup info
 PROCESS_INFORMATION pi;  // info returned from CreateProcess
 //
 // Most sui members will be 0
 //
 ZeroMemory ((PVOID)&sui, sizeof(sui));

 sui.cb = sizeof (sui);
 //
 // Need the lpDesktop member so the new process runs on this desktop
 // The lpDesktop member was reserved in previous versions of NT
 //
 sui.lpDesktop = _T("llx");
 CreateProcess (NULL,   // image name
      "explorer", // command line
      NULL,   // process security attributes
      NULL,   // thread security attributes
      TRUE,   // inherit handles
      CREATE_DEFAULT_ERROR_MODE|CREATE_SEPARATE_WOW_VDM,
      NULL,   // environment block
      NULL,   // current directory
      &sui,   // STARTUPINFO
      &pi);   // PROCESS_INFORMATION
}

int CALLBACK WinMain( HINSTANCE hInstance,
      HINSTANCE hPrevInstance,
      LPSTR lpCmdLine,
      int nCmdShow)
{
 WNDCLASS wc;
 wc.style = CS_DBLCLKS | CS_HREDRAW | CS_VREDRAW;
 wc.lpfnWndProc = WndProc;
 wc.cbClsExtra = 0;
 wc.cbWndExtra = 0;
 wc.hInstance = hInstance;
 wc.hIcon = LoadIcon (NULL, "IDI_SETTHREADDESKTOP");
 wc.hCursor = LoadCursor (NULL, IDC_ARROW);
 wc.hbrBackground = (HBRUSH)GetStockObject (WHITE_BRUSH);
 wc.lpszMenuName = NULL;
 wc.lpszClassName = "lilinxiang";
 if(!RegisterClass(&wc))
 {
  return TRUE;
 }

 hDesktopCurrent = NULL;
 hDesktopCurrent = GetThreadDesktop(GetCurrentThreadId());

 hDesktopLlx = NULL;
 hDesktopLlx = OpenDesktop("llx", 0, FALSE, NULL);
    if (hDesktopLlx != NULL)
 {
  CloseDesktop(hDesktopLlx);
 }

 SECURITY_ATTRIBUTES sa;
 sa.bInheritHandle = TRUE;
 sa.nLength = sizeof(SECURITY_ATTRIBUTES);
 sa.lpSecurityDescriptor = NULL;

 hDesktopLlx = CreateDesktop("llx", NULL,
                                    NULL,0,MAXIMUM_ALLOWED,
                                    NULL);
 if(hDesktopLlx == NULL)
 {
  return 0;
 }

 if(!SetThreadDesktop(hDesktopLlx))
 {
  char szError[256] = {0};
  ltoa( (long)(GetLastError()) , szError, 10);
 }
 SwitchDesktop(hDesktopLlx);

 HWND hWnd = NULL;
 hWnd = CreateWindow ("lilinxiang",
        "hello, world!",
        WS_OVERLAPPEDWINDOW,
        CW_USEDEFAULT,
        0,
        CW_USEDEFAULT,
        0,
        NULL,
        NULL,
        hInstance,
        NULL
        );
 if(NULL == hWnd)
 {
  return TRUE;
 }

 //register hotkey for exit this desktop or switch to another desktop
 //ShowWindow(hWnd, SW_SHOW);
 //UpdateWindow(hWnd);
 if(!RegisterHotKey(hWnd, 7777, MOD_CONTROL, 'Q'))
 {//exit process
  return TRUE;
 }
 if(!RegisterHotKey(hWnd, 7778, MOD_CONTROL | MOD_SHIFT, 'Q'))
 {//switch to new desktop
  return TRUE;
 }
 if(!RegisterHotKey(hWnd, 7779, MOD_CONTROL | MOD_SHIFT, 'W'))
 {//switch to original desktop
  return TRUE;
 }
 
 StartMyExplore();

 MSG msg;
 while (GetMessage(&msg, NULL,  0, 0))
    {
                 TranslateMessage(&msg);// Translates virtual key codes
                 DispatchMessage(&msg); // Dispatches message to window
    }

 SwitchDesktop(hDesktopCurrent);
 return TRUE;
}


//   : )  好东西噢

用CreateDesktop新建一个桌面,什么都没有的桌面,然后在新桌面环境中运行了explorer所以就有了和windows一样功能的桌面,这个时候你就有了两个桌面了,下面要做的就是用SwitchDesktop切换不同的桌面了

在不同桌面中打开的程序在其他桌面的任务栏包括系统托盘上不可见,不过任务管理器中还是可见的这样你就非常方便的做很多事了,很多...  而且还可以非常快的转到正常状态上可以让会责骂你的人比如老板什么的无话可说,因为他们什么也看不到  : )

或者你也可以给你用户定制一个个性化的桌面。改改上面的代码可以得到你要的效果的。

好东西吧,还不帮我顶!!!!!!!  : )

程序控制桌面切换

程序控制桌面切换   [ 日期:2006-01-03 ]   [ 来自:转贴 ]魔法表情function MM_showHideLayers() {var i,p,v,obj,args=MM_show...
  • goingup
  • goingup
  • 2006年03月07日 22:36
  • 4255

Mac 快速切换桌面快捷键

Mac系统可以新建多个桌面,我习惯开三个桌面,第一个桌面放浏览器、QQ等娱乐窗口,第二个chu'a'g'n'k...
  • win_ann
  • win_ann
  • 2014年07月08日 23:07
  • 15886

linux-ubuntu终端切换桌面方法

ubuntu入门指南  http://wiki.ubuntu.org.cn/Ubuntu%E6%A1%8C%E9%9D%A2%E5%85%A5%E9%97%A8%E6%8C%87%E5%8D%9...
  • fanxianshi
  • fanxianshi
  • 2013年06月18日 13:13
  • 9431

debian 切换默认桌面命令

update-alternatives --config x-session-manager 选择gnome-session
  • meandmyself
  • meandmyself
  • 2015年07月22日 17:40
  • 4132

WINDOWS下多个桌面切换

主要的函数:CreateDesktop()                        OpenDesktop()                        SwitchDesktop()   ...
  • zhaohan7
  • zhaohan7
  • 2007年05月13日 22:15
  • 3041

Linux命令行环境与桌面环境护切换

1、前言 在大部分情况下,我们在使用Linux时习惯使用命令行环境,但是有时候也还是会使用到安装桌面环境,所以在这里介绍一下如何给没有安装桌面环境的系统安装桌面环境。以Centos 6.5 为例...
  • esricd
  • esricd
  • 2014年10月11日 11:45
  • 3232

linux下字符界面与桌面切换的快捷键总结

首先桌面版的是带有图形化的,最出名的windows,专业点的用的linux。 我比较喜欢Ubuntu的和centos的版本。 如果想要界面互相切换,前提是你得装了桌面版的,如果没装肯定切换不了的。...
  • u012965373
  • u012965373
  • 2015年01月10日 18:26
  • 1805

Ubuntu桌面和命令行切换

桌面切换到命令行: Ctrl + Alt + F2~F6 命令行切换到桌面: Ctrl + Alt + F7
  • shenwenbin0106
  • shenwenbin0106
  • 2017年04月17日 16:56
  • 237

如何从KDE中切換到openSUSE的GNOME桌面环境

openSUSE的是建立在Linux内核之上的通用操作系统,由社区支持openSUSE项目开发和SUSE和其他一些公司的赞助。 Novell收购SUSE Linux的2004年1月後,Novell公...
  • liangyihuai
  • liangyihuai
  • 2016年04月08日 23:54
  • 6066

主动挂起程序,返回ios手机屏幕桌面

http://code.cocoachina.com/detail/315948/91桌面类似的设置壁纸和Home键的效果/
  • ETmanwenhan
  • ETmanwenhan
  • 2015年09月17日 15:43
  • 780
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:程序控制桌面切换
举报原因:
原因补充:

(最多只允许输入30个字)