Показать сообщение отдельно

  #3  
Старый 13.09.2008, 11:27
bons
Участник форума
Регистрация: 20.12.2007
Сообщений: 295
Провел на форуме:
1777055

Репутация: 347
По умолчанию

Цитата:
GetCommandLine, откидуешь имя файла, чтоб остались только аргументы(вручную либо CommandLineToArgvW+lstrcatW, либо исчо както). то, что получицо пинаешь в WinExec
WinExec неудобно использовать вместе с CommandLineToArgvW, потому что нет версии WinExec для юникода.

Можно использовать следующий код:

Код:
.386
.model flat, stdcall
option casemap :none

include \masm32\include\windows.inc
include \masm32\include\kernel32.inc
include \masm32\include\shell32.inc

includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\shell32.lib

.data?
	argc	dd ?
	st_info	STARTUPINFO <>
        pr_info	PROCESS_INFORMATION <>
	
.code

start:
	invoke GetCommandLineW
	invoke CommandLineToArgvW, eax, addr argc
	mov esi, eax

mLoop:
	dec argc
	cmp argc, 0
	je mQuit
	add esi, 4
	
	invoke RtlZeroMemory, addr pr_info, sizeof pr_info
	invoke RtlZeroMemory, addr st_info, sizeof st_info
	mov st_info.cb, sizeof st_info
	mov edx, [esi]
	
	invoke CreateProcessW, 0, edx, NULL, NULL, FALSE, 0, NULL, NULL, addr st_info, addr pr_info
	invoke WaitForSingleObject, pr_info.hProcess, INFINITE
	invoke CloseHandle, pr_info.hProcess
	invoke CloseHandle, pr_info.hThread
	
	jmp mLoop
	
mQuit:
	invoke ExitProcess, 0
end start
но тогда запускать надо примерно так:

Код:
startproc "netstat /a" >> log.txt
 
Ответить с цитированием