Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 15.03.2009, 22:45
Аватар для Electronic_Arts
Electronic_Arts Electronic_Arts вне форума
Местный
 
Регистрация: 13.07.2006
Адрес: на земле
Сообщения: 562
Версия Delphi: Delphi 11
Репутация: 18
Восклицание Работа с коммандной строкой

Как из дельфи запустить Командную строку и автоматом выполнить в нем какую нить комманду
в принципе запустить коммандную строку это не проблема - а как автоматом выполнить в нем какую нить комманду??
например эту Attrib +s "C:\123"
Ответить с цитированием
  #2  
Старый 15.03.2009, 22:59
Аватар для Rokuell
Rokuell Rokuell вне форума
Активный
 
Регистрация: 27.12.2006
Адрес: Псков
Сообщения: 274
Версия Delphi: Delphi 7
Репутация: 497
Сообщение

Запускай 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  
Старый 15.03.2009, 23:27
Аватар для Electronic_Arts
Electronic_Arts Electronic_Arts вне форума
Местный
 
Регистрация: 13.07.2006
Адрес: на земле
Сообщения: 562
Версия Delphi: Delphi 11
Репутация: 18
Восклицание

СПАСИБО ОГРОМНОЕ!
Ответить с цитированием
  #4  
Старый 16.03.2009, 18:42
Аватар для Karsh
Karsh Karsh вне форума
Активный
 
Регистрация: 22.09.2007
Адрес: SPb
Сообщения: 228
Версия Delphi: 7, 2009, XE2
Репутация: 70
По умолчанию

Вот описание команд 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  
Старый 01.10.2010, 23:05
liot liot вне форума
Прохожий
 
Регистрация: 01.10.2010
Сообщения: 5
Репутация: 10
По умолчанию Помогите пожалуйста

Помогите! Не получается передать параметр. Код: ShellExecute(handle, nil,'cmd.exe','"C:\Program Files\Kaspersky Lab\Kaspersky Internet Security 2011\avp.exe"+ " addkey"+ " " +openDialog.FileName', SW_SHOW);
Ответить с цитированием
  #6  
Старый 01.10.2010, 23:27
Аватар для v1s2222
v1s2222 v1s2222 вне форума
Продвинутый
 
Регистрация: 07.09.2010
Сообщения: 726
Репутация: 26711
По умолчанию

Код:
ShellExecute(handle, 'open','cmd.exe','"C:\Program Files\Kaspersky Lab\Kaspersky Internet Security 2011\avp.exe"+ " addkey"+ " " +openDialog.FileName', SW_SHOW);

Возможно так будет работать...
И вообще что ты именно хочешь передать как параметр в консольку?
__________________
Помогаю за Спасибо
Ответить с цитированием
  #7  
Старый 01.10.2010, 23:56
liot liot вне форума
Прохожий
 
Регистрация: 01.10.2010
Сообщения: 5
Репутация: 10
По умолчанию

Не работает выдает:
Код:
[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'
Каспер 2011 принимает ключики через командную строку. Так вот чтоб не мучатся с вводом решил автоматизировать процесс.
Ответить с цитированием
  #8  
Старый 02.10.2010, 00:49
Аватар для eXplorer
eXplorer eXplorer вне форума
Активный
 
Регистрация: 06.08.2010
Адрес: Ярославль
Сообщения: 264
Версия Delphi: 7
Репутация: 14
По умолчанию

Может так?...

Код:
ShellExecute(handle, nil,'cmd.exe','"C:\Program Files\Kaspersky Lab\Kaspersky Internet Security 2011\avp.exe"+ " addkey"+ " " +openDialog.FileName', 0, SW_SHOW);
Ответить с цитированием
  #9  
Старый 02.10.2010, 00:51
Аватар для v1s2222
v1s2222 v1s2222 вне форума
Продвинутый
 
Регистрация: 07.09.2010
Сообщения: 726
Репутация: 26711
По умолчанию

Маленькую ошибку допустил.
(Путь к папке не указал):
Код:
ShellExecute(handle, 'open','cmd.exe','"C:\Program Files\Kaspersky Lab\Kaspersky Internet Security 2011\avp.exe"+ " addkey"+ " " +openDialog.FileName', nil, SW_SHOW);

В примере вместо папки указал nil, но думаю надо написать реальную директорию...
__________________
Помогаю за Спасибо
Ответить с цитированием
  #10  
Старый 02.10.2010, 01:04
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,048
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

не будет так работать, то как не указан параметр /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  
Старый 02.10.2010, 01:37
liot liot вне форума
Прохожий
 
Регистрация: 01.10.2010
Сообщения: 5
Репутация: 10
По умолчанию

Нет, не работает. Вот строка какая должна быть в командной строке:
Код:
"C:\Program Files\Kaspersky Lab\Kaspersky Internet Security 2011\avp.com" addkey "С:\Название ключа.key" 
Ответить с цитированием
  #12  
Старый 02.10.2010, 02:22
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,048
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Код:
PChar('addkey ' + OpenDialog.FileName),

->

Код:
PChar('addkey "' + OpenDialog.FileName + '"'),
Ответить с цитированием
  #13  
Старый 02.10.2010, 02:39
liot liot вне форума
Прохожий
 
Регистрация: 01.10.2010
Сообщения: 5
Репутация: 10
По умолчанию

Нет. Не работает!
Ответить с цитированием
  #14  
Старый 02.10.2010, 09:27
Аватар для v1s2222
v1s2222 v1s2222 вне форума
Продвинутый
 
Регистрация: 07.09.2010
Сообщения: 726
Репутация: 26711
По умолчанию

Ну что могу посоветовать... попробуй вместе shellexecute вывести сообщение, что запускается и с каким параметром, там увидишь, может что то не так...
ЗЫ можешь вместо shellexecute попробовать WinExec (еще старее функцию), хотя она и до сих пор работает...
__________________
Помогаю за Спасибо
Ответить с цитированием
  #15  
Старый 02.10.2010, 19:36
liot liot вне форума
Прохожий
 
Регистрация: 01.10.2010
Сообщения: 5
Репутация: 10
По умолчанию

Ребята спасибо Вам огромное за помощь! Все работает. Вот собственно сам код сего:
Код:
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.
Код конечно можно пилить в сторону улучшения в виде удачного или не удачного завершения операции или что еще душе угодно. Свое я добился, за что кланяюсь за помощь перед всеми кто помог воплотить в жизнь идею.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 06:56.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter