程序说明:
   程序启动后没用任何界面,只会再创建一个桌面,用WIN+1和WIN+2组合键在两个桌面间切换。一个桌面用于工作,一个桌面用于娱乐,互不干扰。

代码:


;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;  Programmed by nohacks, nohacks@163.com
;  Website: http://hi.baidu.com/nohacks
;           Win32 ASM is Masm
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;  版本信息
;     多桌面切换系统V1.0 -  可以两个桌面之间任意切换
;     
;                         2007年 11 月  28 日
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.486 
.model flat,stdcall 
option casemap:none 

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;        Include 数据
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
include windows.inc 
include kernel32.inc 
include shell32.inc
include advapi32.inc

include debug.inc
includelib kernel32.lib 
include user32.inc 
includelib user32.lib 
includelib shell32.lib
includelib advapi32.lib

m2m  Macro M1,M2
  push  M2
  pop    M1
endm

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;        Equ 数据 RC资源
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
CREATE_DEFAULT_ERROR_MODE EQU         4000000H
ICO_ICO                   EQU         1
;DLG_MAIN                  EQU         1000

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

.data 

IdDesktop db "http://hi.baidu.com/nohacks",0
ClassName db "SimpleWinClass",0       
AppName db " ",0       


.data?
 
hInstance HINSTANCE ?      
CommandLine LPSTR ? 
hWinMain    dd    ?
hDesktopCurrent dd     ?  ;//当前桌面
hmyDesktop  dd         ?  ;//新桌面

.code 

;********************************************************************

StartMyExplore proc
  
LOCAL  sui:STARTUPINFO
LOCAL  pi:PROCESS_INFORMATION  

;invoke  RtlZeroMemory,addr sui,SIZEOF STARTUPINFO   
mov sui.cb,SIZEOF STARTUPINFO
mov sui.lpDesktop,offset IdDesktop
invoke CreateProcess,NULL,CTEXT("explorer"),NULL,NULL,TRUE,CREATE_DEFAULT_ERROR_MODE or CREATE_SEPARATE_WOW_VDM,NULL,NULL,addr sui,addr pi

invoke CreateProcess,NULL,CTEXT("ctfmon"),NULL,NULL,TRUE,CREATE_DEFAULT_ERROR_MODE or CREATE_SEPARATE_WOW_VDM,NULL,NULL,addr sui,addr pi  ;解决新桌面输入法不可用的问题

ret

StartMyExplore endp

SetDesktop proc 
    
 invoke GetCurrentThreadId
 
 invoke GetThreadDesktop,eax   

 mov hDesktopCurrent,eax      ;//当前桌面
 
 mov hmyDesktop,0
 
 invoke OpenDesktop,addr IdDesktop,0,FALSE,0   ;检查桌面是否已经存在
     
      .if eax!=0
           
     invoke CloseDesktop,eax
   
    .endif
 
invoke CreateDesktop,addr IdDesktop,NULL,NULL,0,MAXIMUM_ALLOWED,NULL
 
 mov hmyDesktop,eax
 
 .if eax==0
 
 ret
   
 .endif
 
 invoke SetThreadDesktop,hmyDesktop
 
invoke SwitchDesktop,hmyDesktop
 
 invoke StartMyExplore
 
 ret

SetDesktop endp 


WndProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM 

    .IF uMsg==WM_DESTROY 
       invoke  UnregisterHotKey,hWnd,hWnd      
       invoke  SwitchDesktop,hDesktopCurrent
       invoke CloseDesktop,hmyDesktop
       invoke PostQuitMessage,NULL            
        
     .ELSEIF   uMsg==  WM_CREATE
    
       push hWnd
       pop  hWinMain
      invoke LoadIcon,hInstance,ICO_ICO
       invoke SendMessage,hWnd,WM_SETICON,ICON_BIG,eax    ;设置窗口图标  
       invoke SetWindowPos,hWnd,HWND_TOPMOST,0,0,0,0, SWP_NOMOVE or SWP_NOSIZE ;窗口置顶
       invoke RegisterHotKey,hWnd,7787,MOD_WIN,48   ;WIN+0
       invoke RegisterHotKey,hWnd,7788,MOD_WIN,49   ;WIN+1
       invoke RegisterHotKey,hWnd,7789,MOD_WIN,50   ;WIN+2
       invoke     SetDesktop

     .ELSEIF  uMsg==WM_HOTKEY
     
         .if wParam==7787
     
      invoke  SwitchDesktop,hDesktopCurrent
         invoke PostQuitMessage,NULL               
 
        .endif
         
        .if  wParam==7788
       
        invoke SwitchDesktop,hDesktopCurrent
       
        .endif
       
       .if wParam==7789
   
        invoke SwitchDesktop,hmyDesktop
           
        .endif
     
       .ELSE
  
        invoke DefWindowProc,hWnd,uMsg,wParam,lParam     
        ret 
   .ENDIF
   
    xor eax,eax 
    ret 
WndProc endp 


WinMain proc hInst:HINSTANCE,hPrevInst:HINSTANCE,CmdLine:LPSTR,CmdShow:DWORD 
    LOCAL wc:WNDCLASSEX                                           
    LOCAL msg:MSG 
    LOCAL hwnd:HWND 

    mov   wc.cbSize,SIZEOF WNDCLASSEX                   
    mov   wc.style, CS_HREDRAW or CS_VREDRAW 
    mov   wc.lpfnWndProc, OFFSET WndProc 
    mov   wc.cbClsExtra,NULL 
    mov   wc.cbWndExtra,NULL 
    push  hInstance 
    pop   wc.hInstance 
    mov   wc.hbrBackground,COLOR_WINDOW+1 
    mov   wc.lpszMenuName,NULL 
    mov   wc.lpszClassName,OFFSET ClassName 
    invoke LoadIcon,NULL,IDI_APPLICATION 
    mov   wc.hIcon,eax 
    mov   wc.hIconSm,eax 
    invoke LoadCursor,NULL,IDC_ARROW 
    mov   wc.hCursor,eax 
    invoke RegisterClassEx, addr wc                      
    invoke CreateWindowEx,NULL,\ 
                ADDR ClassName,\ 
                ADDR AppName,\ 
                WS_OVERLAPPEDWINDOW,\ 
                CW_USEDEFAULT,\ 
                CW_USEDEFAULT,\ 
                CW_USEDEFAULT,\ 
                CW_USEDEFAULT,\ 
                NULL,\ 
                NULL,\ 
                hInst,\ 
                NULL 
    mov   hwnd,eax 
   ;invoke ShowWindow, hwnd,CmdShow              
   ; invoke UpdateWindow, hwnd                                 

    .WHILE TRUE                                                        
                invoke GetMessage, ADDR msg,NULL,0,0 
                .BREAK .IF (!eax) 
                invoke TranslateMessage, ADDR msg 
                invoke DispatchMessage, ADDR msg 
   .ENDW 
    mov     eax,msg.wParam                                          
    ret 
WinMain endp 


;********************************************************************

start:
   invoke GetModuleHandle, NULL           
                                                                      
  mov hInstance,eax 
  invoke GetCommandLine                       
                                                               
  mov CommandLine,eax 
  invoke WinMain, hInstance,NULL,CommandLine, SW_SHOWDEFAULT      
  
  invoke ExitProcess, eax                           

;********************************************************************

end        start

 

   不知道大家想过没有,这个程序还可用来免费上网,切换到新桌面以后,网管程序对桌面的锁定操作对新桌面无效,后在加个拦截关机,拦截鼠标锁定的功能(用HOOKAPI),这样在结账下机
后计算机仍然是开放状态达到免费上网的目的,可以基本通杀所有网管程序!


我根据上面的原理写了个工具:网吧超级防锁专家

下载地址:http://hi.baidu.com/nohacks/blog/ite...1b21bba2f.html

大家可以看看