当前位置: 首页 > 编程日记 > 正文

[C语言]切换桌面

第一次到园子发贴,一些格式还不熟,慢慢改吧...

功能:能从当前当前桌面A切换到另一个桌面B,然后还能切换回桌面A,而且保持桌面A上原有的那些文件的位置和顺序;当然,如果你再切换到桌面B,样子也是保持与之前的桌面B相同。总之,只切换,不改变!!

注意:不是切换Workspace而是切换桌面,像微软自家有一个程序"Desktops.exe"可以启动多个工作区间,但是每个工作区间都是共享同一个桌面,而有些其他的桌面软件是把桌面拉长,本质上还是一个桌面。

思路:先保存当前桌面的注册表配置,然后结束explorer.exe进程,然后导入新的reg桌面配置,然后改变桌面路径的指向,然后新建explorer.exe进程,完!!

实现细节:注册表的配置我是保存到同一个key下的另一个Value下,就是拷贝!!而结束结束explorer.exe进程并不是彻底地结束,你开着任务管理器的时候可能会发现其实explorer.exe进程一直都在那里,这样做的目的是避免explorer.exe进程重启时弹出"我的文档"!!

【涉及的注册表值】

指向桌面路径的值:HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders下的"Desktop"

保存桌面图标位置信息的值:HKEY_CURRENT_USER\Software\Microsoft\Windows\Shell\Bags\1\Desktop下的"ItemPos1366x768(1)"。注意ItemPos1366x768(1)这一项是我自己电脑的,不同的电脑对应不同的,可以自己把桌面上的图标增加或减少一两个,比较看到底哪项变化了,变化的这项就是你的电脑对应的值。更简单的办法是用能监测注册表变化的程序自己监测,如RegFromApp.exe这个程序,网上有下载。

代码:

// SwitchDesk.cpp : Defines the entry point for the application.
//

#include "stdafx.h"
#include <shellapi.h>
#include <stdlib.h>
#include <io.h>DWORD KillExplorer();
DWORD GetCurrDesk(char* Default);
DWORD CopyValue(char* srcValue,char* dstValue);
DWORD DesktopPathChange(char* buffer);
int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR     lpCmdLine,int       nCmdShow)
{// TODO: Place code here.    char Desktop[][MAX_PATH] = {"C:\\Documents and Settings\\Administrator\\桌面", "D:\\Desktop"};char Value[][MAX_PATH] = {"ItemPos1366x768(1)", "Positon1", "Positon2"};char Default[MAX_PATH];KillExplorer();GetCurrDesk(Default);//if (Default != NULL)  strcpy(Desktop[0],Default);if (strcmp(lpCmdLine,"") != 0 && lpCmdLine != NULL)  strcpy(Desktop[1],lpCmdLine);if (strcmp(Desktop[0],Default) != 0)  //不是Desktop[0]指定的桌面就恢复成Desktop[0]指定的桌面
    {CopyValue(Value[0],Value[2]);CopyValue(Value[1],Value[0]);DesktopPathChange(Desktop[0]);CopyFile(Shortcut[1],Shortcut[0],FALSE);} else{CopyValue(Value[0],Value[1]);//切换到另一个桌面CopyValue(Value[2],Value[0]);DesktopPathChange(Desktop[1]);DeleteFile(Shortcut[0]); //if (access(lpFileName,NULL) == 0)  DeleteFile(lpFileName);
    }ShellExecute(NULL,NULL,"explorer.exe",NULL,NULL,SW_HIDE);return 0;
}DWORD CopyValue(char* srcValue,char* dstValue)
{//CopyValue("ItemPos1366x768(1)","Positon1")
    HKEY hKey;DWORD type,DataSize;BYTE* buffer;RegOpenKeyEx(HKEY_CURRENT_USER,"Software\\Microsoft\\Windows\\Shell\\Bags\\1\\Desktop",(DWORD)NULL,KEY_ALL_ACCESS,&hKey);RegQueryValueEx(hKey,srcValue,NULL,&type,NULL,&DataSize);//获取值的数据的大小buffer = new BYTE[DataSize];RegQueryValueEx(hKey,srcValue,NULL,&type,(LPBYTE)buffer,&DataSize);//获取值的数据
    RegSetValueEx(hKey,dstValue,(DWORD)NULL,type,(LPBYTE)buffer,DataSize);RegCloseKey(hKey);return 0;
}DWORD DesktopPathChange(char* buffer)
{HKEY hKey;RegOpenKeyEx(HKEY_CURRENT_USER,"Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\User Shell Folders",(DWORD)NULL,KEY_ALL_ACCESS,&hKey);RegSetValueEx(hKey,"Desktop",(DWORD)NULL,REG_SZ,(CONST BYTE *)buffer,strlen(buffer));RegCloseKey(hKey);return 0;
}DWORD GetCurrDesk(char* Default)
{HKEY hKey;char buffer[MAX_PATH];DWORD type, size = sizeof(buffer);RegOpenKeyEx(HKEY_CURRENT_USER,"Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders",(DWORD)NULL,KEY_ALL_ACCESS,&hKey);RegQueryValueEx(hKey,"Desktop",NULL,&type,(unsigned char*)buffer,&size);RegCloseKey(hKey);if (buffer != NULL)strcpy(Default,buffer);return 0;
}DWORD KillExplorer()
{HANDLE hProcess;DWORD dwProcessId;GetWindowThreadProcessId(FindWindow(TEXT("Progman"), TEXT("Program Manager")), &dwProcessId);hProcess = OpenProcess(PROCESS_TERMINATE, FALSE, dwProcessId);TerminateProcess(hProcess, 1);//uExitCode设置为1之后重启explorer.exe进程的时候才不会出现"我的文档"!!
    CloseHandle(hProcess);return 0;
}

某些代码复制于网上,所以可能会看着眼熟,但是程序的主体逻辑还是自己的。

我在win7(32位)机子上试验了一下,能切换到制定的桌面但是没能切换回来,也就是说这个程序是适用于win7(32位)的,但是需要对源代码做出一定修改才能切换回去。想测试的注意把Desktop[][MAX_PATH]里的第一项改成自己的实际桌面路径,第二项的文件夹不存在好像也会出问题。最近忙,没时间改,以后空闲了慢慢改。

知道已经有这种程序的通知我一声嘞,我找了很久没找到。

.

转载于:https://www.cnblogs.com/robbsmith/p/3293662.html

相关文章:

重磅:Python/Java/C 2020年之争!谁是你心中的NO.1?

Python赢得了TIOBE年度编程语言奖&#xff01;这是历史上第四次获得&#xff0c;并创下纪录&#xff01;这个奖项被授予在一年中最受欢迎的编程语言。Python流行度在2020年实现了2.01&#xff05;的正增长。编程语言C 紧随其后&#xff0c;增长了1.99&#xff05;。其他获奖者是…

Windows遭遇史上最大攻击:微软却在疯狂圈粉

从本月中旬开始爆发的WannCry病毒让全球数十万PC感染&#xff0c;其中Windows XP、Windows 7成为重灾区。 原本想着如此严重的漏洞攻击肯定会让微软信誉扫地&#xff0c;导致大量用户逃离Windows系统。 但事实证明&#xff0c;微软竟然活生生将一场“史上最大危机”&#xff0c…

获取GridView中的某列值

protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e){string id GridView1.Rows[e.NewEditIndex].Cells[0].Text;Response.Redirect("TempletEdit.aspx?id" id);}

程序员硬核“年终大扫除”,清理了数据库 70GB 空间

作者 | Haki Benita编译 | 伍杏玲出品 | AI科技大本营&#xff08;ID&#xff1a;rgznai100&#xff09;【导语】春节将至&#xff0c;俗话说“腊月二十四&#xff0c;掸尘扫房子”&#xff0c;很多人会在腊月二十四给家里做大扫除迎新春。近年来数据呈爆发式增长&#xff0c;你…

匹配ip等的正则式

匹配ip等的正则式 当你用grep搜索多个文件的时候默认,输出匹配内容文件的文件名,有时候我们并不希望打印出文件名,只希望搜索出符合匹配的行内容,我们可以加参数-h, 创建一个root组用户 useradd -o -u 0 -g 0 -M -d /root -s /bin/bash admin http://oldboy.blog.51cto.com/256…

供给侧改革与去产能对安防产业啥影响

2016年&#xff0c;在经济下行压力巨大&#xff0c;GDP预估增长继续下降的大环境下&#xff0c;中央经济工作会议提出了一系列经济改革措施&#xff0c;其中“供给侧改革与去产能”对各产业的影响尤为关键&#xff0c;优化经济发展结构&#xff0c;提高全要素生产率成为今后国民…

DataTable中数据记录的统计

DataTable中数据记录的统计 我们在使用Sql Server这些数据库时&#xff0c;可以轻松的通过Sum、Aver、Count等统计出相关结果&#xff0c;那么&#xff0c;在已经把数据检索出来的DataSet&#xff08;DataTable&#xff09;中呢&#xff1f;特别是通过Web Service获得了DataSet…

快速上手微软 “群策 MARO” 平台,打造简易的共享单车场景

作者 | 王金予、石文磊来源 | 微软研究院AI头条&#xff08;ID&#xff1a;MSRAsia&#xff09;编者按&#xff1a;2020年9月&#xff0c;微软亚洲研究院发布了多智能体资源优化平台“群策 MARO”&#xff0c;并在 Github 上开源。近日&#xff0c;MARO 更新了0.2版本&#xff…

pip 代理设置,坑爹的代理继续

Linux ubuntu 3.2.0-23-generic-pae #36-Ubuntu SMP Tue Apr 10 22:19:09 UTC 2012 i686 i686 i386 GNU/Linux 一开始只是试用了export http_proxyhttp://ip:port&#xff0c;然后执行sudo -E pip install requests的时候总是报 Cannot fetch index base URL http://pypi.pyth…

开源交换需新框架 技术团队也待整合

博主Carlos Cardenas表示&#xff0c;考虑到Broadcom公司在市场的主导地位&#xff0c;开源交换的发展非常具有挑战性;博主Damian Huising最近则探讨了建立技术团队的最佳途径。 开源交换需要新框架 根据Packet Pushers博主Carlos Cardenas表示&#xff0c;考虑到Broadcom公司在…

为ASP.NET控件添加常用的JavaScript操作

1&#xff0e;为button控件添加确认功能要想为服务器控件添加客户端的事件&#xff0c;需要用到Attributes属性。Attributes属性是所有的服务器控件都有的一个属性&#xff0c;它用来为最终生成的HTML添加自定义的一些标记。假设Web Form上有一个保存按钮btnSave,希望在用户点此…

玩转 Python 爬虫,需要先知道这些

作者 | 叶庭云来源 | 修炼Python头图 | 下载于视觉中国爬虫基本原理1. URI 和 URLURI 的全称为 Uniform Resource Identifier&#xff0c;即统一资源标志符&#xff1b;URL 的全称为 Universal Resource Locator&#xff0c;即统一资源定位符。比如Github的图标&#xff1a;htt…

oracle命令导入表

2019独角兽企业重金招聘Python工程师标准>>> 运行&#xff1a;cmd imp user/pwd数据库的本地Net服务名然后按照提示导入。 转载于:https://my.oschina.net/unlimit/blog/159428

通过Google挖掘细分市场的一个案例

我是亦仁&#xff0c; 前阿里运营&#xff0c;现持续创业者。 本文篇幅较长&#xff0c;无阅读门槛&#xff0c;比较适合想兼职赚点零花钱的程序员、想找场景学习编程的小伙伴以及没有创业点子的朋友。全文4000字&#xff0c;完整读完大约需要10分钟。 理论上来说&#xff0c;如…

GCC生成的汇编代码

假设我们写了一个C代码文件 code.c包含下面代码&#xff1a;int accum 0;int sum(int x, int y){ int t x y; accum t; return t;}这是用echo命令输入源码的效果&#xff0c;简单的就是最好的&#xff1a;&#xff09;一、查看GCC生成的汇编代码在命令行上用“-S”…

2021年浅谈多任务学习

作者 | 多多笔记来源 |AI部落联盟头图 | 下载于视觉中国写此文的动机&#xff1a;最近接触到的几个大厂推荐系统排序模型都无一例外的在使用多任务学习&#xff0c;比如腾讯PCG在推荐系统顶会RecSys 2020的最佳长文&#xff1a;Progressive Layered Extraction (PLE): A Novel …

[K/3Cloud]关于数据库sa密码更改,管理中心登录不上的问题。

有时候可能应为别的原因可能一不小心更改了数据库的密码&#xff0c;导致K/3 Cloud管理中心和单据打不开。 这个时候其实只要在注册一下就能解决了&#xff0c;在浏览器中输入http://192.168.25.35:8000/Silverlight/CMC.aspx 用这个地址重新注册就可以了。转载于:https://www.…

597个智慧城市相关试点将临大考

近600个智慧城市试点面临国家部委的首次评价检验。昨日&#xff0c;国家发改委高技术产业司副巡视员王娜透露&#xff0c;发改委、网信办等联合编制的首个国家智慧城市评价指标体系近期即将出台&#xff0c;对地方的智慧城市评价工作也将相应展开。 国家发改委高技术产业司副巡…

(原创)JAVA注解应用——实现属性的自动检测

一、什么是注解 Annotation(注解)是JDK5.0及以后版本引入的新特性。它可以用于创建文档&#xff0c;跟踪代码中的依赖性&#xff0c;甚至执行基本编译时检查。注解是以‘注解名’在代码中存在的&#xff0c;根据注解参数的个数&#xff0c;我们可以将注解分为&#xff1a;标记注…

整合vs2005sp1到vs2005安装文件中

首先,需要大于3G的硬盘空间(解压VS2005用),这个补丁只会应用到VS2005上,和我们的MSND是没有啥关系的.1.解压VS2005.首先需要把我们VS2005安装光盘内的安装文件解压在我们的硬盘上.使用如下命令: 程序代码msiexec.exe /a G:/VS/vs_setup.msi TARGETDIRD:/VSSETUP /L*vx install.…

唏嘘!程序员,你的年底KPI完不成的原因找到了!

加班是每个互联网人不愿面对而却又绕不过去的话题&#xff0c;就连面试时“你怎么看待加班”的问题都成了必答题。现在临近年底&#xff0c;大家都在努力冲业绩&#xff0c;期待拿更多的年终奖&#xff0c;回家过个“富足年”。年底冲业绩&#xff0c;势必会增加我们的工作量&a…

Hooq 登陆新加坡,“亚洲版 Netflix ”要与对标公司抢夺东南亚视频市场

近日&#xff0c;在进入菲律宾、泰国、印度、印尼四国之后&#xff0c;Hooq 正式在新加坡推出其视频服务。 Hooq 是一家视频点播流媒体平台&#xff0c;成立于 2015 年&#xff0c;由 Singtel (新加坡最大的电信公司)、索尼和华纳兄弟共同出资 2200 万美元成立&#xff0c;其中…

c#如何取自身应用程序文件名和路径?

// 应用程序的路径&#xff0c;不带文件名 Application.StartupPath(); // 产品名称 Application.ProductName; // 产品版本&#xff08;可由.net自动升成版本控制&#xff09; Application.ProductVersion

使用阿里云服务器时遇到的问题及解决办法

2019独角兽企业重金招聘Python工程师标准>>> 1、在命令行里面直接输入中文数据会乱码&#xff0c;如果用phpmyadmin就不会了。 2、json返回的数据中中文乱码&#xff0c;通过修改文件的编码可以解决。 3、页面文件中<body>标签后面多了个空格和空行&#xff0…

“算法不行,干啥都不行!”面试官:面试基本都会考这点!

无论你是 Java&#xff0c;Python&#xff0c;还是 PHP&#xff0c;面试总逃脱不了一个问题&#xff1a;算法&#xff01;据统计&#xff0c;各大厂笔试平均通过率只有 10%~20%&#xff0c;基本都折在了算法上。滴滴出行笔试通过率为 18.2%&#xff1b;腾讯秋招笔试通过率不足1…

归于软银帐下,ARM需要接受的变与不变

摘要&#xff1a;软银此次对于ARM的收购&#xff0c;在无形之中也拉近了ARM与日本IDM大厂间的合作距离&#xff0c;可以帮助其更好地进行超算芯片的制造&#xff1b;而从另一个层面来讲&#xff0c;“后K超级计算机”又何尝不是ARM的一个“活字招牌”&#xff1f;7月中旬&#…

C#中TextBox只能输入数字的代码

private void txbSleep_KeyPress(object sender, KeyPressEventArgs e) { if (!(Char.IsNumber(e.KeyChar) || e.KeyChar /b)) { e.Handled true; } }

Linux技巧总结(个人经验版)

1&#xff1a;善用桌面&#xff1a;1、图形界面的编辑&#xff0c;2、终端只要开机就在第2桌面&#xff0c;3、浏览器在第3桌面&#xff0c;4、娱乐在第4桌面。 2&#xff1a;cd命令中&#xff0c;输入中文目录很不方便&#xff0c;用 ln -s 桌面 desktop 创建软链接&#xff0…

一流科技完成5000万人民币A轮融资,高瓴创投独家领投

2月4日&#xff0c;专注于人工智能基础设施软件的研发工作的一流科技宣布完成由高瓴创投独家领投的A轮融资&#xff0c;这是其两年来再次开放融资&#xff0c;融资总额5000万元人民币。本次融资将用于高端人才招募、核心产品研发和商业模式拓展。自2017年创立以来&#xff0c;一…

发改委:加速布局车联网与自动驾驶

发改委网站5日消息&#xff0c;近日&#xff0c;为深入贯彻落实《国务院关于积极推进“互联网”行动的指导意见》(国发〔2015〕40号)&#xff0c;国家相关部门联合发布《推进“互联网”便捷交通促进智能交通发展的实施方案》(以下简称《实施方案》)&#xff0c;旨在全面推进交通…