![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
cmd.exe
chernoruk © (2002-11-15 20:02:00)Скажите, как из своего приложения взаимодействовать с коммандной строкой? да так, чтоб всё это не было видно извне -т.е. что не появлялось черное окно
chernoruk (2002-11-21 21:05:00) [1]ну не может быть что никто не знает как читать из пайпа на который есть открытый ххэндл на запись???????
весь измучился уже: в примере msdn этот хэндл закрывают, т. е. нельзя потом ещй раз послать команду для cmd line
chernoruk (2002-11-20 18:38:00) [2]вот последний вопрос:
с пайпом я разобрался, но как сделать так чтоб не закрывать пайп на STDIN каждый раз после посылки команды?
т.е. есть 2 пайпа- на stdin и stdout
с помощью DuplicateHandle(...false...)
и далее по msdn(там есть пример)
но если не закрывать пайп на stdin, то ничего не получается..
Может, кто сталкивался и знает?(
bak (2002-11-20 16:16:00) [3]Ппомогите плз, тема ведь еще не закрыта...
bak (2002-11-20 09:57:00) [4]и еще один мааленький вопросик: при вызове какого либо процесса, который автоматически не закрывается (например блокнота) из этой проги, она намертво останавливается на цикле
repeat
Result := Result + Buffer;
ZeroMemory(@Buffer, SizeOf(Buffer));
lpNumberOfBytesRead := 0;
until not ReadFile(hReadPipe, Buffer, SizeOf(Buffer) - 1, lpNumberOfBytesRead, nil);
а точнее на ReadFile. Как это можно побороть?
chernoruk (2002-11-19 21:11:00) [5]единственный глюк: ну никак не могу послать ничего в pipe с помощью WriteFile. Как надо оформить вызов этой функции?
chernoruk (2002-11-19 14:37:00) [6]усёк, всё просто, спасибо
Eugen Honeker (2002-11-19 02:46:00) [7]да задай просто в cmd-box"е "cmd /?".
увидешь все пояснения. ёлки палки...
chernoruk (2002-11-18 23:50:00) [8]что-то я такого в msdn не нашел...
может, ссылка акакя полезная есть?
было бы здорово
Anatoly Podgoretsky (2002-11-18 19:18:00) [9]А самому получить справку ну никак?
chernoruk (2002-11-18 19:13:00) [10]а что значит ключ /C (/K)
Eugen Honeker (2002-11-18 17:57:00) [11]что значит
lpCommandLine=%ComSpec%?
ты не переводишь lpCommandLine с помощью
ExpandEnvironmentStrings("%ComSpec%",...?
chernoruk (2002-11-18 17:43:00) [12]вот, пожалуйста:
CreateProcess(lpCommandLine,nil, nil, nil, True, CREATE_NEW_CONSOLE,
nil, nil, lpStartupInfo, lpProcessInformation)
(lpCommandLine=%ComSpec%)
GetLastError= No access (998)
Eugen Honeker (2002-11-17 16:01:00) [13]какую ошибку?
что GetLastError на ету тему говорит?
в принципе можно вообще без %ComSpec%, сразу
передать комманду (например: "cmd.exe /C dir c:\");
chernoruk (2002-11-16 23:14:00) [14]странно:
CreateProcess(lpCommandLine,nil, nil, nil, True, CREATE_NEW_CONSOLE,
nil, nil, lpStartupInfo, lpProcessInformation)
(lpCommandLine=%ComSpec%)
уже выдает ошбку...
и вообще: как команду передавать не при запуске, а через WriteFile? что-то я с параметрами запутался
bak (2002-11-16 13:39:00) [15]>Eugen Honeker
с OemToCharBuffer ты прав - все пошло :)
а насчет папок - я понял в чем здесь прикол
в примере каждый раз по новому с помощью крейтпроцесс запускается новый процессор. естественно, что он не запоминает текущий каталог. наверное можно его запоминать по последней строке, которую выдает предыдущий процессор (или еще как)
Eugen Honeker (2002-11-16 12:13:00) [16]дополнение:
русские буквы: можно с OemToCharBuffer попробовать
repeat
...
until not ReadFile(hReadPipe, Buffer, SizeOf(Buffer) - 1, lpNumberOfBytesRead, nil
здесь надо или buffer увеличить или считаемое сохранить
Eugen Honeker (2002-11-16 12:07:00) [17]дареному коню в зубы не смотрят :)
дорогие, етот примерчик вам на растерзание,
мне лень разбиратся.
bak (2002-11-16 11:28:00) [18]>chernoruk
я попробовал так
if ExpandEnvironmentStrings("%ComSpec% /K", lpCommandLine,
SizeOf(lpCommandLine) - 1) > 0 then
пишет больше, но все равно глючит.
не понимает русских букв, и не знаю, как выйти по cd выше, чем на 1 папку
chernoruk (2002-11-15 22:38:00) [19]что-то она возвращает резултат не полностью-щас разберусь, почему...
chernoruk (2002-11-15 20:44:00) [20]спасибо, сейчас попробую...