`

Windows桌面切换VC代码

    博客分类:
  • MFC
阅读更多
用向导建立一个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切换不同的桌面了

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

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

相关推荐

    C++虚拟桌面,实现桌面的切换等

    在IT领域,虚拟桌面是一种技术,它允许用户创建并切换多个独立的工作空间,每个...虽然Windows 8及更高版本引入了内置的虚拟桌面功能,但这个项目依然对那些仍然使用Windows 7或者喜欢自定义桌面环境的用户具有价值。

    VC写的windows虚拟桌面

    - 桌面切换:快捷键或任务视图中的操作可以方便地在多个桌面间切换。 - 应用程序分配:每个桌面可以独立运行应用程序,用户可以选择哪些应用在哪个桌面显示。 - 桌面预览:用户可以查看所有桌面的缩略图,以便快速...

    vc windows如何快速切换用户

    3. `EsXPSwitchUser.cpp` 和 `EsXPSwitchUser.h` - 这是主程序类的实现和声明,可能包含了调用Windows API进行用户切换的代码。 4. `StdAfx.cpp` 和 `StdAfx.h` - 这些是预编译头文件,用于提高编译速度,包含了常用...

    VC写的windows虚拟桌面.visual c++

    3. **桌面切换**:通过调整窗口的可见性和Z顺序(前台和后台),实现桌面间的切换。 4. **多线程处理**:为了保证程序的稳定性和响应性,可能需要在每个桌面窗口上运行独立的线程,以处理各自的事件。 5. **用户交互...

    VC实现的虚拟桌面程序

    在虚拟桌面程序中,需要扩展消息处理机制,以便在桌面切换时正确处理窗口的可见性和焦点。 6. **资源管理**:每个桌面可能需要独立的资源,如壁纸、图标等。开发者需要考虑如何有效地分配和释放这些资源,避免内存...

    用VC在XP及Win7下显示模式切换

    在Windows XP和Windows 7操作系统中,用户有时需要根据需求调整显示器的显示模式,例如从单显示器模式切换到扩展桌面模式,或者在多个显示器之间设置主显示器。在编程环境中,这些功能可以通过调用特定的API函数来...

    DesktopPic.rar_ DesktopPic_DesktopPic_VC 图片切换_桌面背景

    标题中的"DesktopPic.rar_ DesktopPic_DesktopPic_VC 图片切换_桌面背景"表明这是一个使用Visual C++(简称VC)开发的项目,主要用于实现桌面背景图片的自动切换功能。这个项目可能是一个小型实用程序,它能搜索指定...

    VC++改变windows桌面壁纸

    在Windows操作系统中,桌面壁纸是用户个性化电脑环境的重要元素之一。使用VC++编程语言,我们可以编写应用程序来改变或设置桌面壁纸。这篇描述提及的源码就是为此目的而设计的,适用于初学者学习如何通过编程来操作...

    纯代码编写与ib 创建的VC之间的切换

    在编程领域,特别是Windows应用程序开发中,Visual C++(简称VC)是一种常用的语言工具,用于创建桌面应用、游戏以及各种系统级别的软件。本教程主要关注的是"纯代码编写"与"使用Interface Builder(ib)创建的VC...

    VC/MFC多页浏览器源代码

    在软件开发领域,尤其是Windows桌面应用程序设计中,Visual C++(简称VC)和Microsoft Foundation Classes (MFC)是常用的开发工具和框架。MFC提供了一套面向对象的类库,简化了Win32 API的使用,使得开发者可以更...

    VC写的虚拟桌面小程序,完全用VC实现,对学习进程方面和窗体控制很有用.rar

    标题中的“VC写的虚拟桌面小程序,完全用VC实现”指的是使用Microsoft Visual C++(简称VC)这个编程环境开发的一个小型应用程序,它实现了虚拟桌面的功能。虚拟桌面是指在单个显示器上创建多个独立的工作空间,每个...

    VC全屏显示的源代码

    总的来说,VC全屏显示涉及到Windows API的多个方面,包括窗口管理、设备上下文操作和消息处理,理解并掌握这些知识点对于进行Windows桌面应用程序开发至关重要。通过实践和调试,开发者可以灵活地实现各种全屏效果,...

    C++控制Windows桌面切换

    摘要:VC/C++源码,系统相关,桌面切换 C++编写一个小程序用于控制Windows 系统的桌面切换,功能在于控制两个系统桌面切换,同样是C++BUILDER 源码,使用C++BUILDER编程的新手,这是一个不错的范例参考。

    VC2008写的多功能桌面时钟程序

    【标题】"VC2008写的多功能...综上所述,"VC2008写的多功能桌面时钟程序"涵盖了从基本的C++编程到复杂的Windows应用程序开发的多个知识点,对有兴趣深入学习Windows桌面应用程序开发的人员来说,是一个宝贵的实践项目。

    VC++写的虚拟桌面程序源代码

    通过研究这份源代码,开发者不仅可以学习如何在VC++中创建虚拟桌面程序,还能深入理解Windows编程、多线程处理、GUI设计以及C++的高级特性。这对于提升C++编程技能,特别是系统级编程能力,是非常有价值的。不过,...

    VC开发漂亮界面,开发源代码

    标题中的"VC开发漂亮界面,开发源代码"意味着这个压缩包包含了一些示例代码,这些代码展示了如何使用MFC来设计吸引人的用户界面。开发者可以通过学习和分析这些源代码,了解并掌握创建对话框、单文档(SDI)以及多...

    切换桌面程序

    综上所述,这个名为DESK_SRC的压缩包文件很可能包含了一个用Visual C++编写的桌面切换程序的源代码,该程序具有精美的代码结构、丰富的功能,如启动画面、系统托盘支持、多桌面切换以及方便的程序移动方式。...

    界面实现代码文档vc

    Visual C++是一款功能强大的集成开发环境,尤其适合构建Windows平台上的桌面应用程序。 界面实现通常涉及到以下几个关键知识点: 1. **MFC(Microsoft Foundation Classes)框架**:Visual C++主要通过MFC库来简化...

    VC ++多视图切换

    总的来说,VC++中的多视图切换涉及到了MFC框架、窗口管理、视图对象以及用户交互等多个方面,熟练掌握这些概念和技术对于开发复杂的桌面应用程序至关重要。在实际项目中,开发者需要根据具体需求来定制视图的切换...

    VC单文档切换页面+页卡+线程

    在VC++(Visual C++)开发环境中,"VC单文档...理解和掌握这些知识点对于进行高效且用户友好的Windows桌面应用开发至关重要。在实际项目中,可以根据具体需求对这些技术进行灵活应用和扩展,以满足各种复杂的业务场景。

Global site tag (gtag.js) - Google Analytics