程序控制桌面切换

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

用向导建立一个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切换不同的桌面了

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

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

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

创建一个简易的虚拟桌面 文字性的描述留到后续文章再交代,还是先放一个小小的'大招',毕竟眼镜看见的东西,比起抽象的东西,更能引起初学者的注意, 如果你对这个感兴趣的话,这里有个链接,你可以去看看, >                  http://bbs.pediy.com/showthread.php?t=173271 1.用vs2013创建一个空项目,添加一个cpp文件, #include T 阅读详情

相关推荐

按键切换多个应用程序窗口的编程方法

这样的功能可以提高用户体验,使他们可以轻松地在不同的应用程序之间进行切换,而无需使用鼠标或其他复杂的操作。当用户按下Alt键时,我们将检测到该按键的按下事件,并执行相应的切换操作。现在,我们可以编写一个主循环来监听Alt键的按下事件,并在按下Alt键时执行窗口切换操作。需要注意的是,上述代码片段仅演示了如何监听Alt键的按下事件和获取当前活动窗口的标题。具体的窗口切换逻辑需要根据你的应用程序的需求来实现。总结起来,要实现按键切换多个应用程序窗口的功能,你需要选择一个合适的按键来触发切换操作,使用。

git_web425的博客 323

Windows任务管理器开发原理与实现

   说了这么多,我们也该谈谈如何实现了。   1.窗口信息  MS为我们提供了打开特定桌面和枚举桌面窗口的函数。  hDesk=OpenDesktop(lpszDesktop,0,FALSE,DESKTOP_ENUMERATE);  //打开我们默认的Default桌面;  EnumDesktopWindows(hDesk,(WNDENUMPROC)EnumWindowProc,0);  //枚

xgbing 2682

开源项目推荐:Switch-Desktop

开源项目推荐:Switch-Desktop Switch-Desktop 是一个开源项目,旨在通过键盘驱动的命令来快速导航您的应用程序。该项目主要使用 TypeScript、SCSS、JavaScript 和 HTML 等编程语言进行开发。 项目基础介绍 Switch-Desktop 的目的是为了让用户能够更加高效地在多个应用程序之间切换。它通过提供一个简洁的 UI 界面(Switch deskt...

gitblog_00750的博客 515

开源项目教程:Switch Desktop 使用指南

开源项目教程:Switch Desktop 使用指南 1. 项目介绍 Switch Desktop 是一个由 ahkohd 开发的开源工具,旨在简化桌面环境之间的切换过程。它为那些在多个操作系统或窗口管理器中频繁工作的人提供了高效的方式来配置和切换他们的工作环境。通过自定义脚本和配置,用户能够实现快捷的环境迁移,从而提升多平台开发的流畅性与便捷性。 2. 项目快速启动 要快速启动 Switch D...

gitblog_00493的博客 789

计算机快捷键大全

创建虚拟桌面 Windows键+ctrl+D 或 Control + up (MAC) 2. 虚拟桌面切换: Windows键 + Ctrl 或 Control键(MAC) 3. 关闭虚拟桌面: Windows键+Ctrl+F4 或 option+x(MAC) 4. 从程序切换桌面: Windows键+M/, 全部窗口最小化 或 Command+F...

Xiong-er 的博客 742

Windows系统学快捷键

一、windows键 1、很多时候,需要暂时离开座位去做别的事情,如果对自己的电脑安全很重视,不妨按住windows键后,再键,这样电脑就直接锁屏了,这样就不用担心电脑的资料外泄啦 2、要找电脑上的文件时,一般人会先找到“我的电脑”,然后点击打开,而高手总是很酷的,轻轻按下键盘上的Windows键不放然后再按E键,直接打开电脑的资源管理器,而一般人还在慢慢寻找“我的电脑”的图标呢,嗯,高手

分享交流技术 443

电脑键盘上你所不知道的秘密。

转自:微点阅读 https://www.weidianyuedu.com1.很多时候,需要暂时离开座位去做别的事情,如果对自己的电脑安全很重视,不妨按住windows键后,再按L键,这样电脑就直接锁屏了,这样就不用担心电脑的资料外泄啦2.要找电脑上的文件时,一般人会先找到“我的电脑”,然后点击打开,而高手总是很酷的,轻轻按下键盘上的Windows键不放然后再按E键,直接打开电脑的资源管理器,而一般人还在慢慢寻找“我的电脑”的图标呢,嗯,高手就是这样直接把一般人给秒杀了的3. 正在玩游戏或看羞羞的东西的时候

xiaoweids的博客 298

Jellium Desktop快捷键参考指南:掌握高效操作的终极技巧

Jellium Desktop是一款非官方的Jellyfin桌面客户端,为用户提供便捷的媒体播放体验。本文将详细介绍Jellium Desktop的实用快捷键,帮助您快速掌握操作技巧,提升使用效率。 [![Jellium Desktop logo](https://raw.gitcode.com/GitHub_Trending/je/jellium-desktop/raw/e9df081fee1

gitblog_00837的博客 315

vb6.0版本SendMessage键盘按键参数和代码

filePath = “C:\Users\28261\Desktop\查找文件并输入内容程序源代码\文本框密码登录程序.exe”M是CTRL+Shift即CTRL+Shift是输入法切换,Z是CTRL+F11即^{F11}是隐藏或显示菜单栏。Q是CTRL+ALT+DELETE是打开任务管理器,P是CTRL+Esc即^{Esc}是开始菜单,U是CTRL+F4即^{F4}是关闭当前窗口,h是Alt+tab即%{tab}是切换窗口,V是ALT+空格键是显示程序"控制"菜单,

qq_32257509的博客 1571

程序最小化时,在桌面显示一个悬浮窗——仿播放器

winform 仿qq 或360 浮窗效果

moranxiangshouyuni的博客 358

[win7]win7快捷键

1.Ctrl + Shift + N – 创建一个新的文件夹 你需要在文件夹窗口中按 Ctrl + Shift + N 才行,在 Chrome 中是打开隐身窗口的快捷键。 2.Ctrl + Shift + 左键 – 用管理员权限打开程序 (Ctrl+Shift+Click to Open a Program As Administrator) 有些程序,需要右键选择 Windows7 的管理...

weixin_30300523的博客 76

windows常用快捷键

F1 显示当前程序或者windows的帮助内容。 F2 当你选中一个文件的话,这意味着“重命名” F3 当你在桌面上的时候是打开“查找:所有文件” 对话框 F5 刷新 F10或ALT 激活当前程序的菜单栏 F11当你在打开网页时,是隐藏侧边栏 F12在编辑好Excel 或Word文档,可“另存为” Backspace 如果在“另存为”或“打开”对话框中选中了某个文件夹,则打开上一级文件夹 Ente

liwangqiu的专栏 675

windows11 一键切换音频输出设备

我在家玩电脑的时候经常需要切换声音输出设备,以前win10切换声音输出好像只要点击两下,win11任务栏把wifi和声音放一起了,鼠标得点三下才能切换设备,纯在给我添堵,所以想查一下怎么用命令行切换输出设备,并最终实现一键切换

Phynez的博客 7219

虚拟桌面管理如何重塑Windows生产力哲学?

在数字工作时代,多任务处理已成为现代工作者的日常挑战。Windows 10自带的虚拟桌面功能虽提供了基础的多桌面支持,却缺乏真正的**工作效率提升**和**工作流自动化**能力。这正是VDesk诞生的背景——一个专注于**虚拟桌面管理**的C#工具,旨在通过命令行精确控制程序在特定桌面的启动行为,实现真正的**桌面环境优化**。 ## 核心问题:虚拟桌面的效率瓶颈 Windows原生的虚拟桌面

gitblog_00178的博客 227

windows常用快捷键(转载)

f1 显示当前程序或者windows的帮助内容。f2 当你选中一个文件的话,这意味着“重命名”f3 当你在桌面上的时候是打开“查找:所有文件” 对话框f10或alt 激活当前程序的菜单栏windows键或ctrl+esc 打开开始菜单ctrl+alt+delete 在win9x中打开关闭程序对话框delete 删除被选择的选择项目,如果是文件,将被放入回收站shift+delete ...

weixin_30845171的博客 76

趣谈win10常用快捷键

平时常用: 1.win键+E 打开的是我的电脑(电脑上有windows图标的就是windows键) (如果打开的不是我的电脑,点击查看,然后点选项,将快速访问改为此电脑即可) 2.win键+D 为将所有页面最小化,显示桌面 (再次点击,恢复原装) 3.alt+tap键 用来切换应用 win键+tap键也可以用来切换桌面应用(更炫酷) 4.ctrl+a 全选 5.ctrl+c 复制 6.ctrl+v...

兮于怀 1881

HyperDock,让Mac的窗口飞

三年前写了一篇文章,介绍了Windows 7下的Aero效果,其实最终是想引出来写Mac OS上能产生类似功能的HyperDock应用程序,可惜这一拖,就拖到连Windows 10都快要发布了。没有关心Windows是否有延续着非常华丽又实用的功能,毕竟过去4年里,Mac才是工作和日常中一直使用的电脑,能在Mac上找到实用的软件和工具来提高效率才有实际意义。对于Windows的怀念也只剩下Vi...

weixin_30296405的博客 237
上一篇: 如何扫描网络邻居内的所有IP和用户名
下一篇: 测试爱情气质
foxmail
博客等级 码龄25年 11粉丝 92原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值