• <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
            <2025年6月>
            25262728293031
            1234567
            891011121314
            15161718192021
            22232425262728
            293012345

            享受編程

            常用鏈接

            留言簿(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 漂漂 閱讀(755) 評論(0)  編輯 收藏 引用 所屬分類: 深入vc++
            91麻豆精品国产91久久久久久| 香港aa三级久久三级老师2021国产三级精品三级在 | 亚洲伊人久久成综合人影院 | 中文字幕精品无码久久久久久3D日动漫| A级毛片无码久久精品免费| 久久人妻少妇嫩草AV无码蜜桃| 午夜精品久久久久9999高清| 99精品久久久久久久婷婷| 2020久久精品国产免费| 久久精品国产精品亚洲艾草网美妙 | 久久精品www| 欧美日韩精品久久久免费观看| 久久99国产精品久久99| 欧美日韩成人精品久久久免费看| 色欲av伊人久久大香线蕉影院| 久久综合九色综合久99| 久久精品国产AV一区二区三区| 99久久精品毛片免费播放| 香蕉久久永久视频| 18岁日韩内射颜射午夜久久成人| 久久亚洲sm情趣捆绑调教| 91精品国产91久久| 无码人妻久久一区二区三区 | 久久综合九色综合欧美狠狠| 精品久久亚洲中文无码| 久久高潮一级毛片免费| 久久精品人人做人人爽电影蜜月| 国内精品久久久久影院老司| 国产精品成人99久久久久| 国产成人精品久久免费动漫 | A狠狠久久蜜臀婷色中文网| 久久久亚洲AV波多野结衣| 久久久久亚洲爆乳少妇无| 7国产欧美日韩综合天堂中文久久久久 | 伊人久久大香线焦综合四虎 | 婷婷久久综合九色综合98| 无码伊人66久久大杳蕉网站谷歌| 91麻豆国产精品91久久久| 久久精品综合网| 中文国产成人精品久久不卡| 伊人色综合久久天天人手人婷|