程序控制桌面切换

程序控制桌面切换   [ 日期:2006-01-03 ]   [ 来自: 转贴 ]

魔法表情
<script language="JavaScript" type="text/javascript">function MM_showHideLayers() {var i,p,v,obj,args=MM_showHideLayers.arguments;obj=document.getElementById("MagicFace");for (i=0; i<(args.length-2); i+=3) if (obj) { v=args[i+2];if (obj.style) { obj=obj.style; v=(v=='show')?'visible':(v=='hide')?'hidden':v; }obj.visibility=v; }}function ShowMagicFace(MagicID){var MagicFaceUrl = "magicface/flash/" + MagicID + ".swf";document.getElementById("MagicFace").innerHTML = ' ';document.getElementById("MagicFace").style.top = (document.body.scrollTop+((document.body.clientHeight-300)/2))+"px";document.getElementById("MagicFace").style.left = (document.body.scrollLeft+((document.body.clientWidth-480)/2))+"px";document.getElementById("MagicFace").style.visibility = 'visible';MagicID += Math.random();setTimeout("MM_showHideLayers('MagicFace','','hidden')",6500);var NowMeID = MagicID;}ShowMagicFace('267');</script>

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

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

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值