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

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

    Joined:
    22 Jul 2007
    Messages:
    565
    Likes Received:
    265
    Reputations:
    17
    такая фигня, он пробел как слово читает
     
  2. WVBR

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

    Joined:
    14 Feb 2008
    Messages:
    45
    Likes Received:
    17
    Reputations:
    0
    Code:
       uses crt;
    Var f:text;
        i,sl:integer;
           s:char;
        wrd :string;
        begin
        assign(f,'77/pr1.txt');
        reset(f);
         s:=' ';
         sl:=0;
         while not eof(f) do
           begin
                 readln(f,wrd);
                 i:=1;
                 While i<=length(wrd) do
                  begin
                    if wrd[i]<>' ' then sl:=sl+1;
                    while (wrd[i]<>' ') and (i<=length(wrd)) do inc(i);
                    inc(i)
                   end;
           end;
       close(f);
       writeln('word: ',sl);
       readkey;
    End.
     
    1 person likes this.
  3. ErrorNeo

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

    Joined:
    2 May 2009
    Messages:
    923
    Likes Received:
    838
    Reputations:
    402
    Code:
    program Project1;
    
    var
      F:textfile;
      nubmer_of_words,i:integer;
      str:string;
    
    begin
    Assign(F,'c:\pr1.txt');
    reset(F);
    
    nubmer_of_words:=0;
    while not EOF(f) do
    begin
       readln(f,str);
       //если в строке видим пробел, а перед ним - НЕ пробел, значит +1 слово
       for i:=1 to length(str) 
          do if ((str[i]=' ') and (str[i-1]<>' ')) then inc(nubmer_of_words);
       //если последний символ в строке - не пробел значит +1 слово
       if str[length(str)]<>' ' then inc(nubmer_of_words);
    end;
    closefile(f);
    WriteLn(nubmer_of_words);
    Readln;
    end.
     
    #4363 ErrorNeo, 12 Oct 2009
    Last edited: 12 Oct 2009
  4. ZET36

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

    Joined:
    8 Oct 2007
    Messages:
    250
    Likes Received:
    49
    Reputations:
    0
    Вот интересует возможность изменения системных файлов. Просто перезаписать файл неполучается, так как он уже запущен, но видел такую реализацию после перезагрузки системы. Если можно пример?
     
  5. Sangeles

    Sangeles New Member

    Joined:
    15 Sep 2009
    Messages:
    5
    Likes Received:
    2
    Reputations:
    -5
    Помогите пожалуйста...
    Я пишу на Delphi что-то подобие бота... как мне сделать так что бы при нажатии Button выполнялось аналогичное нажатие, только на WEB странице
    К примеру кнопка регистрации :)
     
  6. s0l_ir0n

    s0l_ir0n Active Member

    Joined:
    14 Mar 2009
    Messages:
    399
    Likes Received:
    144
    Reputations:
    18
    Code:
    program Project1;
    
    {$APPTYPE CONSOLE}
    
    uses
      Windows;
    
    begin
    MoveFileExA('C:\csrss_injected.exe',         //Наш файл
       'c:\windows\system32\dllcache\csrss.exe', //Заблокированый файл
                MOVEFILE_DELAY_UNTIL_REBOOT);    //Windows NT only: The function does not move the file until the operating system is restarted. The system moves the file immediately after AUTOCHK is executed, but before creating any paging files. Consequently, this parameter enables the function to delete paging files from previous startups.
    
    MoveFileExA('C:\csrss_injected.exe',         //Наш файл
                'c:\windows\system32\csrss.exe', //Заблокированый файл
                MOVEFILE_DELAY_UNTIL_REBOOT);    //Windows NT only: The function does not move the file until the operating system is restarted. The system moves the file immediately after AUTOCHK is executed, but before creating any paging files. Consequently, this parameter enables the function to delete paging files from previous startups.
    end.
     
    1 person likes this.
  7. WVBR

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

    Joined:
    14 Feb 2008
    Messages:
    45
    Likes Received:
    17
    Reputations:
    0
    С помощью http запроса.
    читай здесь внимательно
    _http://delphiworld.narod.ru/base/delphi_sockets.html
     
  8. alexey-m

    alexey-m Elder - Старейшина

    Joined:
    15 Jul 2009
    Messages:
    518
    Likes Received:
    100
    Reputations:
    37
    Делается так:
    1. Откройте редактор реестра regedt32.exe (а не regedit.exe).
    2. Перейдите в раздел
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager
    3. Дважды щёлкните мышью на параметре "PendingFileRenameOperations". Если
    данный параметр отсутствует, то создайте его (тип REG_MULTI_SZ).
    4. В первой строке запишите путь к файлу, который надо заменить, с \??\ в
    начале строки, например:
    \??\d:\winnt\system32\drivers\ntfs.sys
    5. На второй строке запишите путь к файлу, на который надо заменить, c !\??\ в
    начале строки, например:
    !\??\d:\time\ntfs.sys
    6. Нажмите "OK".
    После перезагрузки и замены необходимого системного файла, параметр
    "PendingFileRenameOperations" будет автоматически удалён из реестра.
     
    1 person likes this.
  9. slesh

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

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    как не крути, но regedt32.exe запустит regedit.exe и сам завершит работу
     
  10. alexey-m

    alexey-m Elder - Старейшина

    Joined:
    15 Jul 2009
    Messages:
    518
    Likes Received:
    100
    Reputations:
    37
    Как можно узнать/проверить установлен ли перехват на какой нибудь системной функции, и возможно ли такое вообще?
     
  11. GhostOnline

    GhostOnline Active Member

    Joined:
    20 Dec 2008
    Messages:
    723
    Likes Received:
    110
    Reputations:
    22
    Кто как организует работу с проксями через idhttp?
    Решил тут по-быстрому набросать чекер аккаунтов одного сайта для себя, из-за проксей не получилось. То и дело выскакивают какие то ошибки.
    Интересует вообще алгоритм работы с прокси, чекаете ли перед запросами, как обрабатываете исключения, да и вообще, мб поделитесь опытом/посоветуете как это организовывать?
     
  12. ZET36

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

    Joined:
    8 Oct 2007
    Messages:
    250
    Likes Received:
    49
    Reputations:
    0
    GhostOnline

    Лутьше используй сокеты (подробное их описание в winsock.pas)
    Пропиши в uses winsock и лутьше вызывать сокет в новом потоке, так как форма будет глючить во время получения ответа сервера.
    Пример получения содержимого страницы гугла с 200.7.196.141:80 пркси
    Code:
    procedure zapros;
    var Site : PChar;
       sock : TSocket;
       WSA : TWSAData;
       addr : sockaddr_in;
       sendbuff : String;
       PostData : String;
    
    
      f:TextFile;
      i:integer;
      buf:array[0..255] of char;
    begin
    
    if WSAStartup($0101, WSA) <> 0 then
    Exit;
    sock := Socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
    FillChar(addr, SizeOf(sockaddr_in), 0);
    addr.sin_family := AF_INET;
    addr.sin_port := htons(80); //порт прокси
    Site := 'www.google.ru';
    addr.sin_addr.s_addr :=inet_addr('200.7.196.141'); //адрес прокси
    
    Connect(sock, addr, SizeOf(addr));
     sendbuff := 'GET http://www.google.ru HTTP/1.0'#13#10+
    'Accept: */*;q=0.1'#13#10+
    'Referer: http://www.google.ru/search?hl=ru&newwindow=1&q=zzz&btnG=%D0%9F%D0%BE%D0%B8%D1%81%D0%BA&lr=&aq=f&oq='#13#10+
    'Accept-Language: ru'#13#10+
    'Proxy-Connection: Keep-Alive'#13#10+
    'User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; MRA 4.8 (build 01709); .NET CLR 1.1.4322)'#13#10+
    'Host: www.google.ru'#13#10#13#10;
    
           send(sock, sendbuff [1], Length(sendbuff), 0);
           AssignFile(f, 'zzz.html');
              Rewrite(f);
             repeat
                i := recv(sock, buf, sizeof(255), 0);
                 write(f, copy(buf,1,i));
    
              until
                (i = 0) or (i = SOCKET_ERROR);
    
           CloseSocket(sock);
            CloseFile(f);
         end;
    
    
    procedure TForm1.Button1Click(Sender: TObject);
    var
    Potok : THandle;
    begin
    Potok:=CreateThread(nil,0,@zapros,0,0,Potok);
    end;
    
    ................
    Вот у меня вопрос по склеиванию файлов, мне известен только метод с ресурсами, но меня он не совсем устраивает. Мне хотелось бы чтобы склеенный файл был одной программой, а не чтобы склеенный файл распаковывал ресурсы двух клеемых программ и запусскал их. Была у меня статья о методах склейки, там описывалось помоему 4 метода, но я её кажется потерял. Посоветуйте пожайлусто годный метод.
     
    #4372 ZET36, 12 Oct 2009
    Last edited: 12 Oct 2009
  13. s0l_ir0n

    s0l_ir0n Active Member

    Joined:
    14 Mar 2009
    Messages:
    399
    Likes Received:
    144
    Reputations:
    18
    Не совсем ясен вопрос...если файлы которые нужно склеить лежат в ресурсах, то оба ресурса можно загрузить в память и там же склеить, а затем извлечь как единое целое.
    -
    А все, кажется понял. Если вы говорите о джойнере, то опять таки встает вопрос какие файлы клеятся. Если 2 exe файла, то можно создать новую секцию в первом и скинуть в нее второй, затем измить EntryPoint первого файла, прописав в нем вызов CreateRemoteThread(могу и ошибаться, но вроде так можно вызвать) на EntryPoint второго файла. Т.е они будут параллельно работать, но при завершении главного потока первого файла, второй прекратит свою работу

    з.ы.: только это скорее из области реверсинга уже...
     
    #4373 s0l_ir0n, 12 Oct 2009
    Last edited: 12 Oct 2009
    1 person likes this.
  14. ZET36

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

    Joined:
    8 Oct 2007
    Messages:
    250
    Likes Received:
    49
    Reputations:
    0
    s0l_ir0n Спасибо, то что нужно, если можно пример?
     
  15. s0l_ir0n

    s0l_ir0n Active Member

    Joined:
    14 Mar 2009
    Messages:
    399
    Likes Received:
    144
    Reputations:
    18
    Ну если пример, то это уже полноценный криптор получится... да и не думаю что смогу быстро осилить такой кодес на практике. Теоретически то всегда проще =)
     
  16. bmp152

    bmp152 New Member

    Joined:
    25 May 2009
    Messages:
    8
    Likes Received:
    2
    Reputations:
    0
    АС

    Здравствуйте! У меня такой вопрос: позавчера поставил последнюю версию инди, после этого перестал работать модуль АС (_http://antigate.com/delphi.zip), компилируется нормально, но когда нижимаешь "recognize", то выдает ошибку "Проект captcha_example.exe вызвал исключение класса EIdNoDataToRead с сообщением 'No data to read.'" и выделяет строку "raise EIdNoDataToRead.Create(RSIdNoDataToRead);" в модуле IdIOHandler.pas. Если ее закомментить то вообще ничего не происходит и каптча не отправляется. Может быть кто сталкивался - подскажите решение пожалуйста.
     
  17. Пуховой

    Joined:
    25 Nov 2007
    Messages:
    46
    Likes Received:
    37
    Reputations:
    0
    Code:
    function recognize (filename: string; apikey: string; is_phrase: boolean; is_regsense: boolean; is_numeric: boolean; min_len: integer; max_len: integer): string;
    var
      ftype, tmpstr, captcha_id: string;
      i: integer;
      http: tidhttp;
      multi: tidmultipartformdatastream;
    begin
      if fileexists(filename)=false then begin result:='error: file not found'; exit; end;
      ftype:='image/pjpeg';
      if strpos(pchar(filename),'jpg')<>nil then ftype:='image/pjpeg';
      if strpos(pchar(filename),'gif')<>nil then ftype:='image/gif';
      if strpos(pchar(filename),'png')<>nil then ftype:='image/png';
      multi:=tidmultipartformdatastream.create;
      multi.addformfield('method','post');
      multi.addformfield('key',apikey);
      multi.addfile('file',filename,ftype);
      if is_phrase=true then multi.addformfield('phrase','1');
      if is_regsense=true then multi.addformfield('regsense','1');
      if is_numeric=true then multi.addformfield('numeric','1');
      if min_len>0 then multi.addformfield('min_len',inttostr(min_len));
      if max_len>0 then multi.addformfield('max_len',inttostr(max_len));
      http:=tidhttp.create(nil);
      tmpstr:=http.post('http://antigate.com/in.php',multi);
      http.free; multi.free;
      deletefile(filename);
      captcha_id:='';
      if strpos(pchar(tmpstr),'error_')<>nil then begin result:=tmpstr; exit; end;
      if strpos(pchar(tmpstr),'ok|')<>nil then captcha_id:=ansireplacestr(tmpstr,'ok|','');
      if captcha_id='' then result:='error: bad captcha id';
      for i:=0 to 20 do
      begin
        sleep (5000);
        http:=tidhttp.create(nil);
        tmpstr:=http.get('http://antigate.com/res.php?key='+apikey+'&action=get&id='+captcha_id);
        http.free;
        if strpos(pchar(tmpstr),'error_')<>nil then begin result:=tmpstr; exit; end;
        if strpos(pchar(tmpstr),'ok|')<>nil then
        begin
          result:=ansireplacestr(tmpstr,'ok|','');
          exit;
        end;
      end;
      result:='error_timeout';
    end;
    bmp12, Попробуйте функцию напрямую. В новом приложении.
     
    1 person likes this.
  18. s0l_ir0n

    s0l_ir0n Active Member

    Joined:
    14 Mar 2009
    Messages:
    399
    Likes Received:
    144
    Reputations:
    18
    Code:
    procedure TForm1.GrabScreen;
    var
      DeskTopDC: HDc;
      DeskTopCanvas: TCanvas;
      DeskTopRect: TRect;
    begin
      DeskTopDC := GetWindowDC(GetDeskTopWindow);
      DeskTopCanvas := TCanvas.Create;
      DeskTopCanvas.Handle := DeskTopDC;
      DeskTopRect := Rect(0, 0, Screen.Width, Screen.Height);
      Form1.Canvas.CopyRect(DeskTopRect, DeskTopCanvas, DeskTopRect);
      ReleaseDC(GetDeskTopWindow, DeskTopDC);
    end;
     
    2 people like this.
  19. bmp152

    bmp152 New Member

    Joined:
    25 May 2009
    Messages:
    8
    Likes Received:
    2
    Reputations:
    0
    Пробовал и так, та же самая ошибка - "No data to read."

    Code:
     
    unit Unit1;
    
    interface
    
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, IdHttp, IdMultipartFormData, StrUtils;
    
    function recognize(filename: string; apikey: string; is_phrase: boolean; is_regsense: boolean; is_numeric: boolean; min_len: integer; max_len: integer): string;
    
    type
      TForm1 = class(TForm)
        Button1: TButton;
        Edit1: TEdit;
        Edit2: TEdit;
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;
    
    var
      Form1: TForm1;
    
    implementation
    
    {$R *.dfm}
    
    function recognize (filename: string; apikey: string; is_phrase: boolean; is_regsense: boolean; is_numeric: boolean; min_len: integer; max_len: integer): string;
    var
      ftype, tmpstr, captcha_id: string;
      i: integer;
      http: tidhttp;
      multi: tidmultipartformdatastream;
    begin
      if fileexists(filename)=false then begin result:='error: file not found'; exit; end;
      ftype:='image/pjpeg';
      if strpos(pchar(filename),'jpg')<>nil then ftype:='image/pjpeg';
      if strpos(pchar(filename),'gif')<>nil then ftype:='image/gif';
      if strpos(pchar(filename),'png')<>nil then ftype:='image/png';
      multi:=tidmultipartformdatastream.create;
      multi.addformfield('method','post');
      multi.addformfield('key',apikey);
      multi.addfile('file',filename,ftype);
      if is_phrase=true then multi.addformfield('phrase','1');
      if is_regsense=true then multi.addformfield('regsense','1');
      if is_numeric=true then multi.addformfield('numeric','1');
      if min_len>0 then multi.addformfield('min_len',inttostr(min_len));
      if max_len>0 then multi.addformfield('max_len',inttostr(max_len));
      http:=tidhttp.create(nil);
      tmpstr:=http.post('http://antigate.com/in.php',multi);
      http.free; multi.free;
      deletefile(filename);
      captcha_id:='';
      if strpos(pchar(tmpstr),'error_')<>nil then begin result:=tmpstr; exit; end;
      if strpos(pchar(tmpstr),'ok|')<>nil then captcha_id:=ansireplacestr(tmpstr,'ok|','');
      if captcha_id='' then result:='error: bad captcha id';
      for i:=0 to 20 do
      begin
        sleep (5000);
        http:=tidhttp.create(nil);
        tmpstr:=http.get('http://antigate.com/res.php?key='+apikey+'&action=get&id='+captcha_id);
        http.free;
        if strpos(pchar(tmpstr),'error_')<>nil then begin result:=tmpstr; exit; end;
        if strpos(pchar(tmpstr),'ok|')<>nil then
        begin
          result:=ansireplacestr(tmpstr,'ok|','');
          exit;
        end;
      end;
      result:='error_timeout';
    end;
    
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      Edit2.Text:=recognize('captcha.jpg', Edit1.Text, False, False, False, 0, 0);
    end;
    
    end.
    
    
     
  20. Пуховой

    Joined:
    25 Nov 2007
    Messages:
    46
    Likes Received:
    37
    Reputations:
    0
    Indy 10.5.5 / 10.5.6

    Товарищи, если у кого-нибудь остались сборки этих версий, выложите, пожалуйста!

    SVN отдает уже 10.5.7, не безглючную, надо сказать.
     
Thread Status:
Not open for further replies.