• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            隨筆 - 224  文章 - 41  trackbacks - 0
            <2010年5月>
            2526272829301
            2345678
            9101112131415
            16171819202122
            23242526272829
            303112345

            享受編程

            常用鏈接

            留言簿(11)

            隨筆分類(159)

            隨筆檔案(224)

            文章分類(2)

            文章檔案(4)

            經典c++博客

            搜索

            •  

            最新評論

            閱讀排行榜

            評論排行榜

            原文地址:http://blog.csdn.net/goingup/archive/2006/03/07/618323.aspx

            用向導建立一個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切換不同的桌面了

            在不同桌面中打開的程序在其他桌面的任務欄包括系統托盤上不可見,不過任務管理器中還是可見的這樣你就非常方便的做很多事了,很多...  而且還可以非常快的轉到正常狀態上可以讓會責罵你的人比如老板什么的無話可說,因為他們什么也看不到  : )

            或者你也可以給你用戶定制一個個性化的桌面。改改上面的代碼可以得到你要的效果的。


            本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/goingup/archive/2006/03/07/618323.aspx用向導建立一個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切換不同的桌面了

            在不同桌面中打開的程序在其他桌面的任務欄包括系統托盤上不可見,不過任務管理器中還是可見的這樣你就非常方便的做很多事了,很多...  而且還可以非常快的轉到正常狀態上可以讓會責罵你的人比如老板什么的無話可說,因為他們什么也看不到  : )

            或者你也可以給你用戶定制一個個性化的桌面。改改上面的代碼可以得到你要的效果的。

            posted on 2010-03-18 13:41 漂漂 閱讀(760) 評論(0)  編輯 收藏 引用 所屬分類: 深入vc++
            亚洲成av人片不卡无码久久| 久久久久夜夜夜精品国产| 久久亚洲精精品中文字幕| 国产日韩久久久精品影院首页| 久久久久九九精品影院| 久久婷婷五月综合色奶水99啪| 国产精品久久久久a影院| 草草久久久无码国产专区| 亚洲欧洲精品成人久久曰影片 | 国产精品久久久久…| 久久久久亚洲精品日久生情| 亚洲欧美成人综合久久久| 亚洲国产精品久久久久久| 久久久久亚洲AV片无码下载蜜桃| 国产—久久香蕉国产线看观看 | 日韩AV无码久久一区二区 | 99久久无码一区人妻| 婷婷伊人久久大香线蕉AV| 久久精品亚洲男人的天堂| 日韩精品国产自在久久现线拍| 久久精品亚洲日本波多野结衣| 一级做a爰片久久毛片看看| 久久成人永久免费播放| 国产精品久久久久影院色| 久久99精品久久久久子伦| 色婷婷综合久久久中文字幕| 久久亚洲中文字幕精品一区| 欧美大战日韩91综合一区婷婷久久青草 | 一本久道久久综合狠狠躁AV| 亚洲国产精品久久久久久| 色婷婷综合久久久久中文| 久久亚洲AV无码精品色午夜 | 精品久久久久久久久久中文字幕 | www久久久天天com| 久久精品免费一区二区三区| 91精品观看91久久久久久| 99久久99久久精品国产| 久久精品中文字幕第23页| 天天综合久久一二三区| 久久人人爽人人爽人人片AV东京热| 2021国内精品久久久久久影院|