程序说明:
程序启动后没用任何界面,只会再创建一个桌面,用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
大家可以看看