· Начало · Статистика · WASM.RU · Noir.Ru ·

 WASM Phorum (Оффлайн - 24.11.2003) —› WASM.WIN32 —› параметры в коммандной строке

Посл.отвђт Сообщенiе


Дата: Окт 16, 2003 20:39:44

Как определить место в коммандной строке, где оканчивается путь к файлу и его название и начинаются параметры запуска?

GetCurrentDirectory - выдаст текущую директорию и эту часть в коммандной строке можно обрезать.

Как можно определить название запущенного файла?


Дата: Окт 16, 2003 21:06:44 · Поправил: Asterix


Дата: Окт 16, 2003 21:20:49

Asterix
Виноват, исправлюсь :)


Дата: Окт 17, 2003 00:24:50

Можно ещё так:
invoke GetCommandLine
invoke PathGetArgs,eax
mov cmd_args,eax
mov al,[eax]
; Если параметры заключены в кавычки - убрать кавычки!
.IF al != 0
    .IF al == '"'
        invoke PathUnquoteSpaces,cmd_args
        mov cmd_args,eax
    .ENDIF
.ENDIF
В cmd_args теперь указатель на параметры запуска.

PathGetArgs и PathUnquoteSpaces ресолвятся через shlwapi.lib, вроде. Эти чудесные апишки поддерживаются даже в NT4!!!


Дата: Окт 17, 2003 17:08:54

Или вот так
       call GetCommandlineA
       mov esi,eax
work__:
       lodsb
       test al,al
       jz exit__
       cmp al,20h
       je exit__
       jmp work__
                       ; здесь еси указывает на первый 
                       ; параметр если он есть


Дата: Окт 17, 2003 17:10:47

тьфу забыл в конце
exit__:


Дата: Окт 17, 2003 17:27:15

sl0n

Так нельзя ;-)


Дата: Окт 17, 2003 18:06:02

Винда по разному может оформить командную строку, например, заключить путь и имя в "", и добавить много пробелов перед параметрами.


Дата: Окт 17, 2003 18:43:11 · Поправил: Asterix

Добавлять пробелы она не должна, но они содержатся в пути, например Program Files.


Дата: Окт 17, 2003 20:37:15

Kba3iM0go
Asterix
Так поэтому и существуют PathGetArgs и PathUnquoteSpaces. Я этот код подсмотрел в SimEd by KetilO.


Дата: Окт 17, 2003 21:09:53

Quantum

А в win98 работает?


Дата: Окт 18, 2003 02:06:52 · Поправил: Quantum

Asterix
Конечно! Я теперь их только и юзаю. Если в следующих виндах что-то изменится в формате параметров командной строки, этот код всё равно будет работать, назло Биллу Гейтсу :)))


Дата: Окт 18, 2003 03:09:12

Quantum

Сейчас пришлю тебе что-то на мыло :-)))


Дата: Окт 18, 2003 11:46:44

Asterix
Добавлять пробелы она не должна
Конечно не должна, но иногда добавляет. Эти грабли замечены были на w2k(RUS, Prof). В общем - как я отсекаю параметры:
	stdcall	GetCommandLine
	lea	esi,[eax+1]
	mov	ah,[esi-1]
	cmp	ah,'"'
	je	@f
	mov	ah,' '
@@:	lodsb
	test	al,al
	jz	no
	cmp	al,ah
	jne	@b
@@:	lodsb
	test	al,al
	jz	no
	cmp	al,' '
	je	@b
@@:	dec	esi
	stdcall	MessageBox	,NULL,esi,'parameters:',0
no:	stdcall	ExitProcess	,0


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.069