c语言怎么打开桌面的程序,C语言开发实现的虚拟桌面程序代码(1)

  • Post author:
  • Post category:其他


虚拟一个桌面,然后在虚拟桌面启动explorer进程,用户可以用”ALT+Q”来切换现有桌面与这个虚拟桌面,用户需要运行什么软件,自己在虚拟桌面打开就是了。原理很简单,实现同样也很简单,下面是代码:

#include

HINSTANCE hInst; //当前实例

TCHAR szAppName[] = TEXT (“VirtualDesk”) ; //程序名称

HWND hwnd ; //主窗体句柄

HDESK hVirtualDesk; //虚拟桌面句柄

HDESK hCurrent; //当前桌面句柄

PROCESS_INFORMATION piExplor; //Explorer进程的PROCESS_INFORMATION结构

LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM);

//每次运行首先检测注册表相关项,如果未发现,则设置开机自动运行

void SetStartup(HINSTANCE hInst)

{

HKEY hKey;

DWORD DataType = REG_SZ;

PCSTR data_run = “Software\Microsoft\Windows\CurrentVersion\Run”;

long ret = RegOpenKeyEx(HKEY_LOCAL_MACHINE,data_run,0,KEY_ALL_ACCESS,&hKey);

if(ret != ERROR_SUCCESS)

{

MessageBox(NULL,”无法打开注册表键”,”Error”,0);

return;

}

CString ProcessName;

int len = GetModuleFileName(hInst,ProcessName.GetBuffer(256),256);

if(len == 0)

{

MessageBox(NULL,”无法获取进程的当前目录”,”Error”,0);

return;

}

ProcessName.ReleaseBuffer(len);

DWORD direcLen = ProcessName.GetLength() + 1;

LPBYTE direc = new BYTE[direcLen];

ZeroMemory(direc,direcLen);

ret = RegQueryValueEx(hKey,”VirtualDesk”,0,0,direc,&direcLen);

//如果键不存在或者键长度与目前的值长度不匹配则添加新键

if((ret != ERROR_SUCCESS )|| (direcLen != ProcessName.GetLength()+1))

{

SetValue:

DWORD KeyLength = ProcessName.GetLength() + 1;

LPBYTE KeyValue = new BYTE[KeyLength];

ZeroMemory(KeyValue,KeyLength);

for(int i=0;iKeyValue[i] = ProcessName[i];

KeyValue[ProcessName.GetLength()] = 0;

ret = RegSetValueEx(hKey,”VirtualDesk”,0,REG_SZ,KeyValue,KeyLength);

delete []KeyValue;

}

else

{

//如果键的内容与当前值不匹配同样进行更改

for(int i=0;i{

if(direc[i] != ProcessName[i])

goto SetValue;

}

}

delete []direc;

return;

}

//创建explorer进程的函数,如果创建了一个虚拟桌面,那么最好调用该函数。