Le metes un parametro de mas al ShellExecute
Lo adapte un poquito a mi gusto pero esta funcional toma
hInstance equ 0x00400000
format PE GUI 4.0 at hInstance as 'exe'
include 'WIN32AX.INC'
section '.bss' readable writeable
msg MSG
bools db ? ; [1]Exit
section '.text' code readable executable
codee:
push _classname
push 0
push 0
call [CreateMutex]
call [GetLastError]
TEST EAX,EAX
jnz .fiiin
push MAX_PATH
push buff2
push _home
call [GetEnvironmentVariable]
push DKGRAY_BRUSH
call [GetStockObject]
mov [wc.hbrBackground],EAX
push IDC_ARROW
push 0
call [LoadCursor]
mov [wc.hCursor],EAX
push IDI_APPLICATION
push 0
call [LoadIcon]
mov [wc.hIcon],EAX
push wc
call [RegisterClass]
push 0
push [wc.hInstance]
push 0
push 0
push 300
push 500
push CW_USEDEFAULT
push CW_USEDEFAULT
push WS_VISIBLE+WS_CAPTION+WS_SYSMENU+WS_MAXIMIZEBOX+WS_THICKFRAME
push _title
push _classname
push 0
call [CreateWindowEx]
jmp .jump0
.jump:
push msg
call [TranslateMessage]
push msg
call [DispatchMessage]
test [bools],1
jnz .fiiin
.jump0:
push 0
push 0
push 0
push msg
call [GetMessage]
cmp EAX,1
je .jump
.fiiin:
ret
WindowProc:
mov EAX,DWORD[ESP+8]
;pop edx
cmp EAX,WM_LBUTTONDOWN
je .lbdwn
cmp EAX,WM_DESTROY
je .wm_destroy
jmp [DefWindowProc]
.lbdwn:
invoke ShellExecute,0,_open,_cmd,_cmdp,_c, SW_SHOWNORMAL
ret
.wm_destroy:
invoke ExitProcess,0
section '.data' writable readable
buff2 db MAX_PATH dup(0)
_home TCHAR 'HomeDrive'
_open TCHAR 'open',0
_c TCHAR 'C:\',0
_cmd TCHAR 'cmd',0
_cmdp TCHAR '/c msg * asd',0
_title TCHAR 'Program fucking',0
_classname TCHAR 'MyFuckingProgram'
wc WNDCLASS 0,WindowProc,0,0,hInstance,0,0,0,0,_classname
.end codee