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.
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.
Вот интересует возможность изменения системных файлов. Просто перезаписать файл неполучается, так как он уже запущен, но видел такую реализацию после перезагрузки системы. Если можно пример?
Помогите пожалуйста... Я пишу на Delphi что-то подобие бота... как мне сделать так что бы при нажатии Button выполнялось аналогичное нажатие, только на WEB странице К примеру кнопка регистрации
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.
С помощью http запроса. читай здесь внимательно _http://delphiworld.narod.ru/base/delphi_sockets.html
Делается так: 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" будет автоматически удалён из реестра.
Как можно узнать/проверить установлен ли перехват на какой нибудь системной функции, и возможно ли такое вообще?
Кто как организует работу с проксями через idhttp? Решил тут по-быстрому набросать чекер аккаунтов одного сайта для себя, из-за проксей не получилось. То и дело выскакивают какие то ошибки. Интересует вообще алгоритм работы с прокси, чекаете ли перед запросами, как обрабатываете исключения, да и вообще, мб поделитесь опытом/посоветуете как это организовывать?
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 метода, но я её кажется потерял. Посоветуйте пожайлусто годный метод.
Не совсем ясен вопрос...если файлы которые нужно склеить лежат в ресурсах, то оба ресурса можно загрузить в память и там же склеить, а затем извлечь как единое целое. - А все, кажется понял. Если вы говорите о джойнере, то опять таки встает вопрос какие файлы клеятся. Если 2 exe файла, то можно создать новую секцию в первом и скинуть в нее второй, затем измить EntryPoint первого файла, прописав в нем вызов CreateRemoteThread(могу и ошибаться, но вроде так можно вызвать) на EntryPoint второго файла. Т.е они будут параллельно работать, но при завершении главного потока первого файла, второй прекратит свою работу з.ы.: только это скорее из области реверсинга уже...
Ну если пример, то это уже полноценный криптор получится... да и не думаю что смогу быстро осилить такой кодес на практике. Теоретически то всегда проще =)
АС Здравствуйте! У меня такой вопрос: позавчера поставил последнюю версию инди, после этого перестал работать модуль АС (_http://antigate.com/delphi.zip), компилируется нормально, но когда нижимаешь "recognize", то выдает ошибку "Проект captcha_example.exe вызвал исключение класса EIdNoDataToRead с сообщением 'No data to read.'" и выделяет строку "raise EIdNoDataToRead.Create(RSIdNoDataToRead);" в модуле IdIOHandler.pas. Если ее закомментить то вообще ничего не происходит и каптча не отправляется. Может быть кто сталкивался - подскажите решение пожалуйста.
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, Попробуйте функцию напрямую. В новом приложении.
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;
Пробовал и так, та же самая ошибка - "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.
Indy 10.5.5 / 10.5.6 Товарищи, если у кого-нибудь остались сборки этих версий, выложите, пожалуйста! SVN отдает уже 10.5.7, не безглючную, надо сказать.