• <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年10月>
            262728293012
            3456789
            10111213141516
            17181920212223
            24252627282930
            31123456

            享受編程

            常用鏈接

            留言簿(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 漂漂 閱讀(739) 評論(0)  編輯 收藏 引用 所屬分類: 深入vc++
            亚洲国产精品久久久久婷婷老年 | 久久国产成人精品国产成人亚洲| 久久超碰97人人做人人爱| 久久精品www人人爽人人| 91精品国产91久久久久久青草| 久久国产精品免费一区| 久久久久精品国产亚洲AV无码| 91久久精品91久久性色| 久久嫩草影院免费看夜色| 无码久久精品国产亚洲Av影片| 久久99国产精品久久| 亚洲国产成人精品91久久久| 欧美大香线蕉线伊人久久| 久久精品成人一区二区三区| 欧美大香线蕉线伊人久久| 精品国产乱码久久久久久浪潮| 色综合久久中文字幕无码| 精品熟女少妇aⅴ免费久久| 无码超乳爆乳中文字幕久久| 品成人欧美大片久久国产欧美| 久久人做人爽一区二区三区| 国产精品一区二区久久| 久久综合鬼色88久久精品综合自在自线噜噜 | 91久久精品视频| 久久精品水蜜桃av综合天堂| 大香伊人久久精品一区二区 | 久久综合久久鬼色| 久久91综合国产91久久精品 | 久久久精品波多野结衣| 国产精品一区二区久久| 国产精品久久久久久久久免费 | 成人免费网站久久久| 欧美亚洲色综久久精品国产| 久久夜色精品国产噜噜亚洲a| 国产成人久久精品麻豆一区| 国内精品久久久久久久97牛牛| 狠狠色丁香婷婷久久综合| 日韩欧美亚洲综合久久影院Ds | 久久精品国产免费| 久久精品国产亚洲麻豆| 精品国产福利久久久|