[ Delphi / Pascal ] — начинающим: задаем вопросы (архивная - 2015)

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by banned, 6 May 2007.

Thread Status:
Not open for further replies.
  1. WereWolfV

    WereWolfV New Member

    Joined:
    17 Apr 2009
    Messages:
    5
    Likes Received:
    0
    Reputations:
    0
    Не выполняются параметры ShellExecute (Windows 7 x64)

    Листинг:
    Code:
    procedure TForm1.btnStartClick(Sender: TObject);
    var s:string;
    begin
    ShellExecute(handle, nil,'cmd.exe','ping www.google.com','', SW_SHOWNORMAL);
    end;
    
    По исполнении процедуры открывается окно cmd.exe но параметры не выполняются, а просто мигает курсор.
    Так же пробовал создавать ярлык CMD тоже с параметрами, эффект тот же.
    Может есть иной способ запустить CMD с параметрами?
    З.Ы.: CreateProcess не предлагайте - эффект тот же.
     
  2. M_script

    M_script Members of Antichat

    Joined:
    4 Nov 2004
    Messages:
    2,581
    Likes Received:
    1,317
    Reputations:
    1,557
    ShellExecute(handle, nil, 'cmd.exe /c ping www.google.com', '', '', SW_SHOWNORMAL);
     
  3. WereWolfV

    WereWolfV New Member

    Joined:
    17 Apr 2009
    Messages:
    5
    Likes Received:
    0
    Reputations:
    0
    Спасибо, но этот тоже не работает, здесь даже окошко не открывается.
     
  4. fenixelite

    fenixelite Banned

    Joined:
    7 Feb 2010
    Messages:
    294
    Likes Received:
    56
    Reputations:
    6
    WereWolfV,
    PHP:
    ShellExecute(handlenil'cmd.exe''/c ping www.mail.ru'''SW_SHOWNORMAL);
    Либо, как писал великий и могучий slesh :))
    Тут заменишь, на /c "ping www.google.ru" :)
     
  5. b0r2

    b0r2 Member

    Joined:
    29 Jun 2010
    Messages:
    30
    Likes Received:
    5
    Reputations:
    0
    а знаешь ли ты что ping тоже программа как cmd ?
    Так что попробуй сделать так :
    Code:
    ShellExecute(handle, nil, 'ping.exe', ' www.mail.ru', '', SW_SHOWNORMAL); 
     
  6. heretic1990

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

    Joined:
    2 Jul 2008
    Messages:
    487
    Likes Received:
    182
    Reputations:
    5
    есть приложение, в нём form1 и form2. надо при создание form1 показать form2 и чтобы form1 быдо скрыто, ну типо этого:
    Code:
    procedure TForm1.FormCreate(Sender: TObject);
    begin
    form1.Hide;
    form2.Show;
    end;
    но оно соответственно не работает, т.к. форме надо создаться, активироваться, отрисоваться и т.д.
     
  7. fenixelite

    fenixelite Banned

    Joined:
    7 Feb 2010
    Messages:
    294
    Likes Received:
    56
    Reputations:
    6
    heretic1990,

    Project > Options > Forms > Form1 в другую колонку
     
  8. Getty

    Getty Banned

    Joined:
    17 Jun 2010
    Messages:
    104
    Likes Received:
    1
    Reputations:
    0
    эмм.. нужен код по перебору
    acc: pass
    acc1: pass1
    acc2: pass2 и т.д (в принципе сам код есть но только он перебирает не правильно)

    acc: pass
    acc: pass1
    acc: pass2 и т.д подскажите что не так
     
  9. heretic1990

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

    Joined:
    2 Jul 2008
    Messages:
    487
    Likes Received:
    182
    Reputations:
    5
    кидай это в цикл или в таймер.

    Code:
    inc(i); // увеличиваем i
    uin1:=strtoint(copy(listbox1.Items.Strings[i],0,pos(';',listbox1.Items.Strings[i])-1));
    pas1:=copy(listbox1.Items.Strings[i],pos(';',listbox1.Items.Strings[i])+1,Length(listbox1.Items.Strings[i]));
     
  10. crazyserega1994

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

    Joined:
    25 Dec 2007
    Messages:
    27
    Likes Received:
    3
    Reputations:
    0
    В Delphi принимаю пакет, размер принятого пакета - 68, но когда блять отображаю буфер этого пакета, или вывожу его длину, всегда - 64. Что не так? Сниффер тоже показует размер 68 :<
    Code:
    
    
        var serverip:string;
    
        serverport:string;
        rec:array[0..9999] of char;
        info:string;
        sname:string;
        gname:string;
        mname:string;
        size:integer;
        i:integer;
    
        begin
        if InputQuery('Enter server adress','Enter server ip and port',serverip) then
        begin
        serverport:=copy(serverip,pos(':',serverip)+1,5);
        delete(serverip,pos(':',serverip),6);
        listbox1.Items.Add(serverip+':'+serverport);
        serverips.Add(serverip);
        serverports.Add(serverport);
        addr.sin_port:=htons(strtoint(serverport)+123);
        addr.sin_addr.S_addr:=inet_addr(pansichar(ansistring(serverip)));
        size:=sizeof(addr);
        sendto(sock,buf,length(buf),0,addr,sizeof(addr));
        i:=recvfrom(sock,rec,9999,0,addr,size);
        showmessage(inttostr(i));
    
    
     
  11. b0r2

    b0r2 Member

    Joined:
    29 Jun 2010
    Messages:
    30
    Likes Received:
    5
    Reputations:
    0
    Какие данные принимаешь?
     
  12. crazyserega1994

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

    Joined:
    25 Dec 2007
    Messages:
    27
    Likes Received:
    3
    Reputations:
    0
    Строка, в ней содержится информация о сервере, мод, пинг, игроки, имя и т.п.
     
  13. b0r2

    b0r2 Member

    Joined:
    29 Jun 2010
    Messages:
    30
    Likes Received:
    5
    Reputations:
    0
    я подозреваю что эти 4 байта это \r\n\r\n , recv() видит все данные и поэтому возвращает 68 Byte но а когда ты выводишь эти данные тогда эти 4 байта не видны,т.к. это пустая строка,означающяя конец комманды у протоколa HTTP.
     
  14. wolmer

    wolmer Member

    Joined:
    12 May 2009
    Messages:
    438
    Likes Received:
    97
    Reputations:
    9
    Code:
    sendto(sock,buf,length(buf),0,addr,sizeof(addr));
    :(
     
  15. b0r2

    b0r2 Member

    Joined:
    29 Jun 2010
    Messages:
    30
    Likes Received:
    5
    Reputations:
    0
    понятно,не заметил,сервер значит основан на UDP.
    Может он закинет адрес сервера,могу проверить если что.
     
  16. crazyserega1994

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

    Joined:
    25 Dec 2007
    Messages:
    27
    Likes Received:
    3
    Reputations:
    0
    Адресс: 188.120.234.55:22003, к этому порту надо добавить 123. Чтобы принять пакет, шлешь ему "r"
    Вот полный пакет который приходит в hex:
    '45 59 45 32 04 6D 74 61 06 32 32 30 30 33 23 2E 3A 45 78 74 72 65 6D 65 20 50 75 62 6C 69 63 20 54 72 61 69 6E 69 6E 67 20 53 65 72 76 65 72 3A 2E 16 20 2E 3A 45 78 74 72 65 6D 65 20 54 72 61 69 6E 69 6E 67 3A 2E 05 4E 6F 6E 65 04 31 2E 30 00 00 00 20 '

    Может из-за этих последних нулей?

    И да, я немного ошибся, приходит 80, а должно 84. Походу из-за нулей :|
     
    #6536 crazyserega1994, 9 Jul 2010
    Last edited: 9 Jul 2010
  17. b0r2

    b0r2 Member

    Joined:
    29 Jun 2010
    Messages:
    30
    Likes Received:
    5
    Reputations:
    0
    Да из-за нулей, фукнция recv()/recvfrom() принимают все данные а вот функция для работы с полям типа char читают данные до первого ноль байта \0 или 0 ну или же 0x00.
     
  18. crazyserega1994

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

    Joined:
    25 Dec 2007
    Messages:
    27
    Likes Received:
    3
    Reputations:
    0
    И как можно решить эту проблему? :eek:
     
  19. b0r2

    b0r2 Member

    Joined:
    29 Jun 2010
    Messages:
    30
    Likes Received:
    5
    Reputations:
    0
    не знаю как там на дельфи или паскаль или на чем ты пишешь но на C/C++ принимаются данные например вот так :

    Code:
    len = recv( fd, buffer, bufferlen, 0 );
    if( len > 0 ) {
        buffer[ len ] = 0; // мной установленный ноль байт
    }
    и скажем так len = 27, так вот,я установил ноль байт с индексем 27, но если окажется еще где нибудь ноль байт с меньшим индексом то функция для работы с полям типа char остановятся у него а не у моего ноль байта.
    Так что, если ты и правда хочешь работать со всеми данными используя функция для работы с полями типа char то придется эти ноли тебе земенить чем нибудь другим,например знаком '$' :

    Code:
    len = recv( fd, buffer, bufferlen, 0 );
    if( len > 0 ){
        for( i = 0; i < len; i++ ){
           if( buffer[ i ] == '\0' ){
               buffer[ i ] = '$';
           }
        }
    }
    // а после этого устанавливаем свой ноль байт в конце buffer-а
    buffer[ len ] = 0;
    
     
    1 person likes this.
  20. starbes

    starbes Member

    Joined:
    12 Feb 2010
    Messages:
    0
    Likes Received:
    6
    Reputations:
    10
    не могу понять в чем проблема, ранее все работало (отправка email):

    Code:
    var smtp : TIdSMTP;
        msg  : TIdMessage;
    
    begin
      smtp := TIdSMTP.Create(nil);
    
      smtp.AuthType := satDefault;
      smtp.Username := '[email protected]';
      smtp.Password := 'password';
      smtp.Host     := 'smtp.yandex.ru';
      smtp.Port     := 25;
    
      smtp.Connect;
    
      if smtp.Authenticate then
      begin
        msg := TIdMessage.Create(nil);
    
        msg.Subject := 'Subject';
        msg.Body.Add('Mail body.');
        msg.From.Text := '[email protected]';
        msg.Recipients.EMailAddresses := '[email protected]';
    
        smtp.Send(msg);
        smtp.Disconnect;
    
        msg.Free;
      end;
      smtp.Free;
    end;
    выдает такую ошибку:
    [​IMG]
     
Thread Status:
Not open for further replies.