cmd - Delphi

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by Logan22, 17 Sep 2009.

  1. Logan22

    Logan22 Member

    Joined:
    11 Sep 2009
    Messages:
    119
    Likes Received:
    17
    Reputations:
    0
    Подскажите пожалуйста!
    Как написать правельно такое
    чтоб дельфи исполняло фукцию cmd?
    допустим при открытии delphi идет ping на узел?
    ping -n 350 -l 10000 00.000.00.00

    Извеняюсь, я очень нубский новичег)
     
    1 person likes this.
  2. Sams

    Sams Member

    Joined:
    18 Apr 2009
    Messages:
    247
    Likes Received:
    70
    Reputations:
    17
    Можно записать нужные тебе команды в файл с расширением *.cmd, а потом использовать функцию ShellExecute. Хотя это не лучший вариант, но рабочий :)

    Вот пример, кинь на форму один button.

    Code:
    unit Unit1;
    
    interface
    
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, ShellAPI;
    
    type
      TForm1 = class(TForm)
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
        procedure FormCreate(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;
    
    var
      Form1: TForm1;
      cmd: TStringList;
    
    implementation
    
    {$R *.dfm}
    
    procedure TForm1.Button1Click(Sender: TObject);
    begin
    cmd.Add('ping -n 350 -l 10000 00.000.00.00');
    cmd.Add('pause');
    cmd.SaveToFile('delphicmd.cmd');
    ShellExecute(Form1.Handle, nil, 'delphicmd.cmd', nil, nil, SW_RESTORE);
    end;
    
    procedure TForm1.FormCreate(Sender: TObject);
    begin
    cmd:=TStringList.Create;
    end;
    
    end.
     
    #2 Sams, 17 Sep 2009
    Last edited: 17 Sep 2009
  3. Logan22

    Logan22 Member

    Joined:
    11 Sep 2009
    Messages:
    119
    Likes Received:
    17
    Reputations:
    0
    хм..) не это сильно палевно)))
    Я хочу своему другу кинуть в автозагрузку прогу которая бы пинговала один сайтичег))) по этому вид консольда излишний)
     
  4. wolmer

    wolmer Member

    Joined:
    12 May 2009
    Messages:
    438
    Likes Received:
    97
    Reputations:
    9
    Если не ошибаюсь то (если ошибся то полюбому связанно с winexec)

    winexec('cmd /c ping -n 350 -l 10000 00.000.00.00', SW_HIDE);

    С автозагрузкой сам разберешся, не сложно будет (сам погуглишь на эту тему)
     
    #4 wolmer, 17 Sep 2009
    Last edited: 17 Sep 2009
  5. Hiro Protagonist

    Joined:
    26 Aug 2009
    Messages:
    132
    Likes Received:
    24
    Reputations:
    -2
    CreateProcess/Pipe - наиболее гибкий вариант.

    WinExec/ShellExecute - бяки
     
    1 person likes this.
  6. Logan22

    Logan22 Member

    Joined:
    11 Sep 2009
    Messages:
    119
    Likes Received:
    17
    Reputations:
    0
    wolmer, спасибо большое) я проверел с другом, его файрвол в бешенстве канает на ура))
    Всем кто помогал и пытался помочь +++++ ))
     
  7. Logan22

    Logan22 Member

    Joined:
    11 Sep 2009
    Messages:
    119
    Likes Received:
    17
    Reputations:
    0
    )
    Крайне извеняюсь за наглость) Но хотел бы ещё узнать)
    На форме создать Edit1 и кнопку, и в Edit1 вписывать IP и кнопкой начать пинговать, как правельно осуществить, подскажите пожалуйста)?

    winexec('cmd /c ping -n 350 -l 10000 00.000.00.00', SW_HIDE);" - эта функция действительно работает))) Но в место IP то что вверху пишится 00.000.00.00 должно вводимое в поле Edit1 IP)) Блин трудно объяснить) но думаю меня понять можно)

    Хотел бы воспользоваться ситуацией и задать ещё один вопрос, если сайт какойто слабенький типо на движке мойвеб пинговать с разных компов, что с сайтом будет?)) и какой его конечный результат?
     
  8. Maxxxtri23

    Maxxxtri23 New Member

    Joined:
    20 Dec 2008
    Messages:
    76
    Likes Received:
    1
    Reputations:
    0
    Результат будет 0. Если же конечно в качестве сервера не используется P1 166mhz
     
  9. wolmer

    wolmer Member

    Joined:
    12 May 2009
    Messages:
    438
    Likes Received:
    97
    Reputations:
    9
    winexec('cmd /c ping -n 350 -l 10000 '+edit1.text, SW_SHOW);
     
  10. Logan22

    Logan22 Member

    Joined:
    11 Sep 2009
    Messages:
    119
    Likes Received:
    17
    Reputations:
    0
    Не компилит!(
    ты помойму забыл закрыть кавычку как бы! после +edit1.text ) я закрыл серовно не компилит, не так не так!

    Вот что пишит как ошибку в твоем варианте
    " [Error] Unit1.pas(31): Incompatible types: 'String' and 'PAnsiChar' "

    Если так то
    winexec('cmd /c ping -n 350 -l 10000 '+edit1.text', SW_SHOW);
    такая ошибка
    [Error] Unit1.pas(31): Unterminated string
     
  11. W!z@rD

    W!z@rD Борец за русский язык

    Joined:
    12 Feb 2006
    Messages:
    973
    Likes Received:
    290
    Reputations:
    43
    хакеры =(


    winexec('ping -n 350 -l 10000 yandex.ru', SW_SHOW);

    нафига вообще cmd???
     
  12. K4zBeK

    K4zBeK Banned

    Joined:
    8 Nov 2007
    Messages:
    0
    Likes Received:
    0
    Reputations:
    0
    Вот так надо
    winexec('ping -n 350 -l 10000 '+pchar(edit1.text), SW_SHOW);
     
  13. Sams

    Sams Member

    Joined:
    18 Apr 2009
    Messages:
    247
    Likes Received:
    70
    Reputations:
    17
    Неа, не так.
    Вот так!
    winexec(PChar('ping -n 350 -l 10000 ' + edit1.text), SW_SHOW);
    Только что пробовал, работает.
     
  14. Fliplab

    Fliplab Elder - Старейшина

    Joined:
    29 Jul 2008
    Messages:
    123
    Likes Received:
    20
    Reputations:
    3
    А почему бы тебе не использовать winsock? А фаерволы отключать програмно? Вполне рабочий вариант. Если нужны какието советы и помощь стучи в асю 194826нулёк
     
    1 person likes this.
  15. Logan22

    Logan22 Member

    Joined:
    11 Sep 2009
    Messages:
    119
    Likes Received:
    17
    Reputations:
    0
    Да действительно работает))) Душевное спасибо Sams и всем людям что помогают новичкам)
     
  16. Logan22

    Logan22 Member

    Joined:
    11 Sep 2009
    Messages:
    119
    Likes Received:
    17
    Reputations:
    0
    Дозрел ещё один вопросичег)
    Если создать на форме ещё два Edit и расположить так чтоб это было 350 количество пакетов и вписываемым в Edit2, и соответственно количество байт в Edit3 =)
    Как осуществить?
    Логически если подумать то както так чтоли

    winexec(PChar('ping -n +edit2.text -l +edit3.text ' + edit1.text), SW_SHOW);

    Но чтото не так! Оно компилирует но толку 0!
    И ещё вопрос...
    Вот если использовать этот код
    "winexec(PChar('ping -n 350 -l 10000 ' + edit1.text), SW_SHOW);"
    При нажатии на кнопку откроется cmd и будет писатся о обмене пакетов, а как это можно ликвидировать?
     
  17. wolmer

    wolmer Member

    Joined:
    12 May 2009
    Messages:
    438
    Likes Received:
    97
    Reputations:
    9
    http://www.google.ru/search?hl=ru&client=opera&rls=en&hs=3H6&newwindow=1&q=Скачать учебник по делфи&lr=&aq=f&oq=


    winexec(PChar('ping -n '+edit2.text+' -l '+edit3.text+' '+edit1.text), SW_SHOW);
     
    1 person likes this.
  18. Logan22

    Logan22 Member

    Joined:
    11 Sep 2009
    Messages:
    119
    Likes Received:
    17
    Reputations:
    0
    )))СПасибо большое wolmer =)
    Пока меня за наглость не забанели воспользуюсь случаем и спрошу ещё коечто по этой теме)

    Как сделать так что при нажатии на кнопку врубалось это (это текст батника), но нужно чтоб при нажтии кнопки был тот же эффект что и если я открыл бы БАТник), только не нужно говорить типо укажи путь к батнику)


     
  19. wolmer

    wolmer Member

    Joined:
    12 May 2009
    Messages:
    438
    Likes Received:
    97
    Reputations:
    9
    А как еще? Это самый выгодный и простой способ, или же можно положить батник вместе с программой и потом из программы запустить батник (он же у нас будет находится вместе с программой)(могу написать такой код как я описал если хочешь)
     
  20. Logan22

    Logan22 Member

    Joined:
    11 Sep 2009
    Messages:
    119
    Likes Received:
    17
    Reputations:
    0
    НУ сейчас постараюсь обьяснить поставленую себе задачу!
    Хочу сделать чтоб через программу можно было изменять "число" в таблицах БД! В конкретной таблице!
    Решил сделать сразу запрос sql, но потом подумал также не сделаешь чтоб "приложение дельфи" изменяло конкретный параметр в .sql, и за этим инъектировало в БД... Как мне показалось самый оптимальный вариант, это сделать bat'ник в проге как бы, в котором остается лишь вписать в edit "число" и подтвердить кнопкой... И запросом таким в базе данных конкретный парамерт был изменен!
    SQL запрос на повышение нужным мне числе выглядит так

    Можешь посоветовать чтото, чтоб в проге в Edit можно было на выбор ставить числа, в этом запросе нужное число 127...
    Кстати понадобится ещё edit2 для вводи логина, так как в таблице ID логинов разные, а определить access_level нужно одному!
    Вот прикреплю скрин
    [​IMG]
     
    #20 Logan22, 18 Sep 2009
    Last edited: 18 Sep 2009