Ну так ведь после того как ты распределил, к примеру 10 номеров и пасов, указатели в этих файлах(файл с номерами и файл с паролями) сохраняются на последних записях, т.е. у тебя идет смена пароля только последнего уина... Можно сделать что-то типа: for i:=10 downto 1, либо закрыть и потом открыть файл, либо seek... update: А вообщем, я на твоем месте сделал бы типизированные файлы: Code: type NumberUin = record n: integer end; var f1: file of NumberUin; // файл с номерами уинов type PassUin = record p: string end; var f2: file of PassUin; // файл с паролями уинов С ними было бы по проще, да и представляются они в системе как двотчные...
Че-то парни вы мудрите вотъ набросал побыстрому как я вижу работу массового пассченжера: Code: unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ICQClient, ICQWorks, StdCtrls; type TForm1 = class(TForm) Button1: TButton; Memo1: TMemo; ICQClient1: TICQClient; procedure Button1Click(Sender: TObject); procedure Change; procedure ICQClient1Login(Sender: TObject); procedure ICQClient1Error(Sender: TObject; ErrorType: TErrorType; ErrorMsg: String); procedure ICQClient1InfoChanged(Sender: TObject; InfoType: TInfoType; ChangedOk: Boolean); procedure ICQClient1LogOff(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; source:TStringList; tmp,uin,pass:string; implementation {$R *.dfm} procedure TForm1.Change; begin if source.Count>0 then begin tmp:=source.Strings[0]; uin:=copy(tmp,1,pos(';',tmp)-1); pass:=copy(tmp,pos(';',tmp)+1,length(tmp)); Memo1.Lines.Add(uin+' '+pass); ICQClient1.Password:=pass; ICQClient1.UIN:=StrToInt(uin); ICQClient1.ScreenName:=uin; ICQClient1.Login; end; end; procedure TForm1.Button1Click(Sender: TObject); begin source:=TStringList.Create; source.LoadFromFile('source.txt'); ICQClient1.ConvertToPlaintext:=True; ICQClient1.ICQServer:='login.icq.com'; ICQClient1.ICQPort:=5190; Change; end; procedure TForm1.ICQClient1Login(Sender: TObject); begin Memo1.Lines.Add('con'); ICQClient1.ChangePassword('newpass'); end; procedure TForm1.ICQClient1Error(Sender: TObject; ErrorType: TErrorType; ErrorMsg: String); begin Memo1.Lines.Add(tmp+' Err: '+ErrorMsg); ICQClient1.LogOff; end; procedure TForm1.ICQClient1InfoChanged(Sender: TObject; InfoType: TInfoType; ChangedOk: Boolean); var fil; begin assignfile(fil,'changed.txt'); if fileexists('changed.txt') then appendfile(fil) else rewrite(fil); writeln(fil,uin+';'+'newpass'); closefile(fil); source.Delete(0); Memo1.Lines.Add(tmp+' Changed'); ICQClient1.LogOff; end; procedure TForm1.ICQClient1LogOff(Sender: TObject); begin Memo1.Lines.Add('dis'); Change; end; end.
ScreenName убирай ) видать разные у нас TICQ ты эвенты onInfoChanged и OnLogoff привязал к компоненту? на всяк случай - юзал этот TICQ, старый напрочь отказывался работать - кричал "Версия клиента устарела"
Все бы ничего....кроме одной мелочи) ------------- Всего лишь мелочи.... ------------- Заметь ты юзаешь цикл, а компоненту что бы залогинить номер нужно пару секунд! Вот теперь смотри, ты юзаешь(на form1) только один компонент, а цикл проходит быстро, следовательно номера не успевают залогиниться, коннектится только последний потому что он последний... ------------- Выход из этой жопной ситуации: 1) Юзать таймер - скорость маленькая 2) Юзать массив компоненнтов - лучший выход. другому не быть...ля ля тополя - вот так вот... отсюда вывод код не верный! его надо переделывать.... или же код верный но его надо втыкать в таймер, что приведет к другой жопе, к снижению скорости смены пароля... ---- У меня все, спс за внимание ---------- P.S. прет меня сорри
Nightmarе Выложи архивчики с твоим TICQ и проектом, подправлю... а то смотрю не клеится у вас ниче в слепую
посмотри мой пост, и поспрашивай про это у людей с асечки, видишь ли тут меня признали не правым...не люблю спорить...
Конечно цикл здесь неуместен, и код изначально дубообразный, но все же можно кримеру вставить ожидание while not ICQ.LoggedIn do sleep(1000); , али еще ченить придумать, но массив из *** коннектящихся компонентов это тоже перебор.. ИМХО для такого вопроса нужно юзать евенты OnError OnLogoff OnInfoChanged, и отталкиваясь от них уже двигать дальше...
Без лишних слов.. код не рабочий и не может быть таковым ) все таки рекомендую поставить этот http://ifolder.ru/7312654 TICQ и вотъ мой вариант проекта под него http://ifolder.ru/7312642
Теперь и у мну вопросец тем кто сталкивался с TICQ ) нужно тусануть его в консолку, но там он отказывается работать... Code: program Project2; {$APPTYPE CONSOLE} uses ICQClient, ICQWorks, Classes, SysUtils; var ICQ:TICQClient; begin UINs:=TStringList.Create; ICQ:=TICQClient.Create(nil); ICQ.UIN:=111222333; ICQ.Password:='pass'; ICQ.Login; .... на данном этапе конектиццо к серверу авторизации принимает приветствие и молчит в ответ. как заставить работать? ) при чем в аппликации все работает
Один из вариантов. А вообще была в какой то криге глава про быстрый сканер портов, у Фленова помоему Delphi глазами хацкера
там на винсоЦк а мне нужно на инди , и там просто сканер портов а нужно сканер компов на один порт...шарил бы в винсок .......
Это не намного сложней... Просто порт константный тогда, а менятся будет Ip. Если обязательно нужен indy компонент, создавайте динамически массив, из стольки компонент, сколько нужно. Ну и плюс таймаут установите, на подключение.
В инди куча ненужного когда ... В любом случае на winsock будет быстрее ... ЗЫ Троян на вцл - это круто =) Пешь есчо =)
(Delphi)Наверное самый тупой вопрос что был...Эх,ну я новичок,мне положено тупое постить Я писал программу типа Hello Word,тока я предпочёл написать калькулятор вместо этого... В общем там такое дело: Code: procedure TForm1.Button1Click(Sender: TObject); begin e:=StrToInt(Edit1.Text); p:=StrToInt(Edit2.Text); sum:=e+p; Edit3.Text:=IntToStr(sum); end; В общем я знаю что код можно сократить,он не умно сделан и т.п. но смысл не в этом,дело в том что если ввести дробное число например 2.5 и 3.5,то приложение выдаст ошибку,тоесть тут надо юзать Real....вот это я и незнаю,как перевести String в Real,наподобие StrToInt...Я пробовал StrToReal-вроде не работает.*DONT_KNOW*