|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
Работа с коммандной строкой
Как из дельфи запустить Командную строку и автоматом выполнить в нем какую нить комманду
в принципе запустить коммандную строку это не проблема - а как автоматом выполнить в нем какую нить комманду?? например эту Attrib +s "C:\123" |
#2
|
||||
|
||||
Запускай cmd с параметром /k <команда>
Код:
uses ShellAPI; procedure TForm1.Button1Click(Sender: TObject); begin ShellExecute(0,'open','cmd.exe','/k ipconfig','C:\Windows\system32\',SW_SHOW); end; PS: Или с параметром /c если хочешь, чтобы команда выполнилась и консоль закрылась Велик и могуч наш Object Pascal ! ICQ: 357-591-887 Последний раз редактировалось Rokuell, 15.03.2009 в 23:03. |
#3
|
||||
|
||||
СПАСИБО ОГРОМНОЕ!
|
#4
|
||||
|
||||
Вот описание команд cmd.exe:
Код:
Запуск новой копии интерпретатора команд Windows XP. CMD [/A | /U] [/Q] [/D] [/E:ON | /E:OFF] [/F:ON | /F:OFF] [/V:ON | /V:OFF] [[/S] [/C | /K] строка] /C Выполнение указанной команды (строки) с последующим завершением. /K Выполнение указанной команды (строки) без последующего завершения. /S Изменение поведения после /C или /K (см. ниже) /Q Отключение режима вывода команд на экран (ECHO). /D Отключение выполнения команд AutoRun из реестра (см. ниже) /A Вывод результатов выполнения команд в формате ANSI. /U Вывод результатов выполнения команд в формате UNICODE. /T:цв Выбор цвета текста/фона (более подробно см. COLOR /?) /E:ON Разрешение расширений команд (см. ниже) /E:OFF Запрет расширений команд (см. ниже) /F:ON Разрешение символов завершения имен файлов и папок (см. ниже) /F:OFF Запрет символов завершения имен файлов и папок (см. ниже) /V:ON Разрешение отложенного расширения переменных среды с применением символа '!' в качестве разделителя. Например, /V:ON разрешает использовать !var! в качестве расширения переменной var во время выполнения. Синтаксис var служит для расширения переменных при вводе, что приводит к совсем другим результатам внутри цикла FOR. /V:OFF Запрет отложенного расширения переменных среды. Чтобы указать в одной строке несколько команд, следует разделить их символами '&&' и заключить в кавычки. Кроме того, из соображений совместимости, /X означает то же, что и /E:ON, /Y то же, что и /E:OFF и /R то же, что и /C. Все прочие ключи командной строки игнорируются. Если указаны ключи /C или /K, то остальная часть командной строки после такого ключа обрабатывается как командная строка, а обработка символов кавычек (") ведется по следующим правилам: 1. Если выполняются все перечисленные ниже условия, то символы кавычек в командной строке сохраняются: - ключ /S отсутствует - есть ровно два символа кавычек - между ними нет других специальных символов, как то: &<>()@^| - между ними имеются один или несколько пробелов - строка, заключенная в кавычки, является именем исполнимого файла. 2. В противном случае, проверяется первый символ, и если он является символом кавычек, то он удаляется, также удаляется последний символ кавычек в командной строке, а весь текст после этого последнего символа кавычек сохраняется. Если ключ /D НЕ УКАЗАН в командной строке, то при запуске CMD.EXE выполняется проверка значений переменных REG_SZ или REG_EXPAND_SZ для следующих разделов системного реестра: HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\AutoRun и/или HKEY_CURRENT_USER\Software\Microsoft\Command Processor\AutoRun и если одна из них или обе они присутствуют, то сначала выполняются они. По умолчанию расширенная обработка команд включена. Чтобы запретить расширенную обработку для конкретного вызова, используется ключ /E:OFF Можно включить или отключить расширенную обработку команд для всех вызовов CMD.EXE на данном компьютере или для данного пользователя, с помощью REGEDT32.EXE задав значения REG_DWORD в системном реестре для следующих разделов: HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\EnableExtensions и/или HKEY_CURRENT_USER\Software\Microsoft\Command Processor\EnableExtensions равными 0x1 или 0x0. Параметры пользователя перекрывают параметры компьютера. Ключи командной строки, в свою очередь, перекрывают параметры реестра. При расширенной обработке команд изменения и/или добавления затрагивают следующие команды: DEL или ERASE COLOR CD или CHDIR MD или MKDIR PROMPT PUSHD POPD SET SETLOCAL ENDLOCAL IF FOR CALL SHIFT GOTO START (изменен также вызов внешних команд) ASSOC FTYPE Для получения более подробных сведений введите "имяКоманды /?". Отложенное расширение переменных среды НЕ ВКЛЮЧЕНО по умолчанию. Можно включить или отключить отложенное расширение переменных среды для конкретного вызова CMD.EXE с помощью ключей /V:ON или /V:OFF. Можно включить или отключить отложенное расширение переменных среды для всех вызовов CMD.EXE на данном компьютере или для данного пользователя, с помощью REGEDT32.EXE задав значения REG_DWORD в системном реестре для следующих разделов: HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\DelayedExpansion и/или HKEY_CURRENT_USER\Software\Microsoft\Command Processor\DelayedExpansion равными 0x1 или 0x0. Параметры пользователя перекрывают параметры компьютера. Ключи командной строки, в свою очередь, перекрывают параметры реестра. Если отложенное расширение переменных среды включено, то символ '!' (восклицательный знак) может использоваться для замены текущего значения переменной среды во время выполнения. Завершение имен файлов и папок НЕ ВКЛЮЧЕНО по умолчанию. Можно включить или отключить завершение имен файлов и папок для конкретного вызова CMD.EXE с помощью ключей /F:ON или /F:OFF. Можно включить или отключить отложенное расширение переменных среды для всех вызовов CMD.EXE на данном компьютере или для данного пользователя, с помощью REGEDT32.EXE задав значения REG_DWORD в системном реестре для следующих разделов: HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\CompletionChar HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\PathCompletionChar и/или HKEY_CURRENT_USER\Software\Microsoft\Command Processor\CompletionChar HKEY_CURRENT_USER\Software\Microsoft\Command Processor\PathCompletionChar установив их шестнадцатеричные значения равными коду управляющего символа, используемого для конкретной функции (например, 0x4 для Ctrl-D или 0x6 для Ctrl-F). Параметры пользователя перекрывают параметры компьютера. Ключи командной строки, в свою очередь, перекрывают параметры реестра. Если завершение включено с помощью ключа командной строки /F:ON, то используются два управляющих символа: Ctrl-D для имен папок и Ctrl-F для имен файлов. Чтобы отключить конкретный символ завершения в системном реестре, в качестве кода специального символа используется шестнадцатеричное значение символа пробела (0x20). Завершение вызывается при вводе одного из этих двух специальных символов. Функция завершения берет строку пути слева от точки ввода, дописывает к ней символ шаблона, если таковой отсутствует, а затем строит список путей, которые соответствуют полученному определению. После этого выводится первый элемент этого списка соответствующих путей. Если же список пуст, то подается звуковой сигнал и ничего не выводится. После этого повторный ввод того же самого специального символа приводит к циклическому перебору всех соответствующих путей. Нажатие клавиши <Shift> при вводе управляющего символа позволяет просматривать список путей в обратном порядке. Если изменить выведенный путь, а затем снова ввести управляющий символ, сохраненный список очищается и строится новый список путей. То же самое происходит, если переключиться с одного символа завершения на другой. Единственное отличие при использовании символа завершения файла состоит в том, что при этом для построения списка соответствия берется и путь, и имя файла, а при использовании символа завершения папки берется только путь. Если символ завершения используется в одной из встроенных команд манипулирования папками (CD, MD или RD), то всегда подразумевается символ завершения папок. Символ завершения правильно работает и с именами файлов, содержащими пробелы или иные специальные символы, если при этом строка соответствия заключена в кавычки. Кроме того, если сместить точку ввода влево, а затем использовать символ завершения внутри строки, оставшийся справа от точки ввода текст будет отброшен. Специальные символы, которые требуют обязательного заключения в кавычки: <пробел> &()[]{}^=;!'+,`~ Начинающий программист уверен, что в 1 килобайте 1000 байт.
Законченный программист уверен, что в 1 километре 1024 метра. |
#5
|
|||
|
|||
Помогите пожалуйста
Помогите! Не получается передать параметр. Код: ShellExecute(handle, nil,'cmd.exe','"C:\Program Files\Kaspersky Lab\Kaspersky Internet Security 2011\avp.exe"+ " addkey"+ " " +openDialog.FileName', SW_SHOW);
|
#6
|
||||
|
||||
Код:
ShellExecute(handle, 'open','cmd.exe','"C:\Program Files\Kaspersky Lab\Kaspersky Internet Security 2011\avp.exe"+ " addkey"+ " " +openDialog.FileName', SW_SHOW); Возможно так будет работать... И вообще что ты именно хочешь передать как параметр в консольку? Помогаю за Спасибо |
#7
|
|||
|
|||
Не работает выдает:
Код:
[Pascal Error] Unit1.pas(62): E2010 Incompatible types: 'Integer' and 'PAnsiChar' [Pascal Fatal Error] Project1.dpr(5): F2063 Could not compile used unit 'Unit1.pas' |
#8
|
||||
|
||||
Может так?...
Код:
ShellExecute(handle, nil,'cmd.exe','"C:\Program Files\Kaspersky Lab\Kaspersky Internet Security 2011\avp.exe"+ " addkey"+ " " +openDialog.FileName', 0, SW_SHOW); |
#9
|
||||
|
||||
Маленькую ошибку допустил.
(Путь к папке не указал): Код:
ShellExecute(handle, 'open','cmd.exe','"C:\Program Files\Kaspersky Lab\Kaspersky Internet Security 2011\avp.exe"+ " addkey"+ " " +openDialog.FileName', nil, SW_SHOW); В примере вместо папки указал nil, но думаю надо написать реальную директорию... Помогаю за Спасибо |
#10
|
|||
|
|||
не будет так работать, то как не указан параметр /c для cmd.
вопрос - нафига так сложно, когда можно напрямую запускать C:\Program Files\Kaspersky Lab\Kaspersky Internet Security 2011\avp.exe Код:
ShellExecute(Application.Handle, PChar('open'), PChar('C:\Program Files\Kaspersky Lab\Kaspersky Internet Security 2011\avp.exe'), PChar('addkey ' + OpenDialog.FileName), Nil, SW_SHOW) |
#11
|
|||
|
|||
Нет, не работает. Вот строка какая должна быть в командной строке:
Код:
"C:\Program Files\Kaspersky Lab\Kaspersky Internet Security 2011\avp.com" addkey "С:\Название ключа.key" |
#12
|
|||
|
|||
Код:
PChar('addkey ' + OpenDialog.FileName), -> Код:
PChar('addkey "' + OpenDialog.FileName + '"'), |
#13
|
|||
|
|||
Нет. Не работает!
|
#14
|
||||
|
||||
Ну что могу посоветовать... попробуй вместе shellexecute вывести сообщение, что запускается и с каким параметром, там увидишь, может что то не так...
ЗЫ можешь вместо shellexecute попробовать WinExec (еще старее функцию), хотя она и до сих пор работает... Помогаю за Спасибо |
#15
|
|||
|
|||
Ребята спасибо Вам огромное за помощь! Все работает. Вот собственно сам код сего:
Код:
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) OpenDialog1: TOpenDialog; Button1: TButton; Button2: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; openDialog : TOpenDialog; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin openDialog := TOpenDialog.Create(self); openDialog.InitialDir := GetCurrentDir; openDialog.Options := [ofFileMustExist]; openDialog.Filter:='Файл ключ KIS 2011|*.key'; if openDialog.Execute then ShowMessage('File : '+openDialog.FileName) else ShowMessage('Файл ключ KIS 2011 не выбран'); end; procedure TForm1.Button2Click(Sender: TObject); begin WinExec (PChar('C:\Program Files\Kaspersky Lab\Kaspersky Internet Security 2011\avp.exe' + ' ' + 'addkey' + ' ' + '"' + OpenDialog.FileName +'"'), SW_HIDE); end; end. |