ANTICHAT — форум по информационной безопасности, OSINT и технологиям
ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию.
Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club,
и теперь снова доступен на новом адресе —
forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
 |
|

09.05.2010, 14:10
|
|
Участник форума
Регистрация: 10.08.2009
Сообщений: 238
Провел на форуме: 724939
Репутация:
108
|
|
mailbrush, вот небольной пример, если я правильно понял вопрос. Положи 2 Листбокса на форму (для наглядности).
Код:
procedure TForm1.Button1Click(Sender: TObject);
var h: HWND;
i: byte;
begin
ListBox1.Clear;
ListBox2.Clear;
h:=FindWindow(nil, PChar(Заголовок окна));
GetSubChild(h);
for i:=0 to ListBox1.Items.Count-1 do
EnumProc(StrToInt(ListBox1.Items[i]), 0);
end;
Следующие процедуры взяты с delphikingdom.ru и чуть переделаны.
Код:
Procedure TForm1.GetSubChild(wd:HWnD); //
Передаем в процедуру описатель окна
верхнего уровня
Var Cw:HWnd; //
Описываем еще один описатель
Begin
// Очищать список в процедуре нельзя !!!
If WD=0 then Exit; // Если
родительское окно не определено то уходим
Cw := FindWindowEx(Wd, 0, nil, nil); // Находим
первый элемент произвольного класса
while (Cw <> 0) do // Есть еще
что искать ?
begin
ListBox1.Items.Add(IntToStr(Cw)); //
Добавим описатель в виде текста в список
Application.ProcessMessages;
// Дадим поработать другим
GetSubChild(Cw);
//Вызываем себя, но родительское
окно уже Cw
Cw := FindWindowEx(Wd, Cw, nil, nil); //
Ищем следующие дочернее окно
End;
End;
function TForm1.EnumProc (WD: HWnd; Param:
LongInt): Boolean; stdcall;
var Nm:Array[0..255] of Char; // буфер для
имени
Cs: Array[0..255] of Char; // буфер для
класса
Begin
GetWindowText(Wd,Nm,255); // считываем
текст заголовка окна
GetClassName(Wd,Cs,255); // считываем
название класса окна
ListBox2.Items.Add(String(Nm)+'/'+String(Cs));
//Запихнули в список название и класс
EnumProc:=True;
End;
|
|
|

09.05.2010, 15:15
|
|
Познающий
Регистрация: 15.07.2009
Сообщений: 71
Провел на форуме: 520157
Репутация:
35
|
|
Сообщение от Vlad&slav
Дайте плиз рабочую функцию для отправки файла на почту, желательно конешно на винапи. С меня +
Код:
unit smtp;
interface
uses
Windows, SysUtils, Classes, WinSock2;
const
CL = #13#10;
CL2 = CL + CL;
function SendMail(Server: String; Port: Integer; const User, Pass,
From,SentTo,Tema,Body,Files: String): Boolean;
implementation
uses Encoders;
function StrToAddr(Server: String; var InAddr: TInAddr): Integer;
var
HostEnt: PHostEnt;
begin
Result:= -1;
HostEnt:= GetHostByName(PChar(Server));
FillChar(InAddr, SizeOf(InAddr), 0);
if (HostEnt = nil) then Exit;
with InAddr, HostEnt^ do
begin
S_un_b.s_b1 := (h_addr^[0]);
S_un_b.s_b2 := (h_addr^[1]);
S_un_b.s_b3 := (h_addr^[2]);
S_un_b.s_b4 := (h_addr^[3]);
end;
Result:= 0;
end;
function SendText(Sock: TSocket; S: String): Integer;
var
Buff: array[0..1023] of Char;
iSize, i: Integer;
begin
Result:=0;
S:= S + CL;
while (Length(S)>0) do
begin
iSize:= Length(S);
if ( iSize > SizeOf(Buff) ) then iSize:= SizeOf(Buff);
FillChar(Buff, SizeOf(Buff), 0);
CopyMemory(@Buff, PChar(S), iSize);
Delete(S, 1, iSize);
i:= Send(Sock, Buff, iSize, 0);
if i = SOCKET_ERROR then Break;
Result:= Result + i;
end;
end;
function RecvData(Sock: TSocket; accept: string): Boolean;
var
Buff: array[1..255] of Char;
begin
Result:= (recv(Sock, buff, SizeOf(buff), 0) = SOCKET_ERROR) or (Copy(Buff, 1, 3) = accept);
end;
procedure SendFile(SendFile: String; const Sock: TSocket);
const
Base64MaxLength = 72;
var
base64String:String;
hFile: Integer;
Buf: array[0..2] Of Byte;
Base64:TBase64;
begin
SendText(Sock, 'Content-Type: application/octet-stream; name="'+
ExtractFileName(SendFile)+'"');
SendText(Sock, 'Content-Transfer-Encoding: base64');
SendText(Sock, 'Content-Disposition: attachment; filename="'+
ExtractFileName(SendFile)+'"');
SendText(Sock, 'Content-Description: attachment');
SendText(Sock, '');
base64String:='';
hFile:= FileOpen(SendFile,fmOpenRead);
FillChar(Buf,SizeOf(Buf),#0);
Yield;
repeat
Base64.ByteCount:= FileRead(hFile,Buf,SizeOf(Buf));
Move(Buf,Base64.ByteArr,SizeOf(Buf));
base64String:= base64String + CodeBase64(Base64);
if Length(base64String) = Base64MaxLength then
begin
SendText(Sock,base64String);
base64String:= '';
end;
until Base64.ByteCount < 3;
// Отправляем последние байты
SendText(Sock,base64String);
// закрываем файл
FileClose(hFile);
SendText(Sock, '');
end;
function GenerateBoundary: String;
var
N, X, StrLen: integer;
const
StrTable: string = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890';
begin
SetLength(result, 14);
StrLen := Length(StrTable);
N := 0;
while N < 14 do begin
X:= Random(StrLen) + 1;
if (pos(StrTable[X], result) = 0) then begin
inc(N);
Result[N]:= StrTable[X];
end;
end;
end;
function GetLocalHost: string;
var
_buff : array [0..255] of char;
begin
if gethostname(_buff, 255) = 0 then
Result:= StrPas(_buff)
else
Result:= '';
end;
function SendMail(Server: String; Port: Integer; const User, Pass,
From,SentTo,Tema,Body,Files: String): Boolean;
var
Boundary: String;
wData: TWSAData;
SockSMTP: TSocket;
SockAddr: TSockAddrIn;
begin
Result:= False;
if (WSAStartup(MakeWord(2, 2), wData)<>0) then Exit;
try
//===========================================================
// Connect to SMTP server and send message\file
//============================
SockAddr.sin_family:= AF_INET;
if (StrToAddr(Server, SockAddr.sin_addr)=0) then begin
SockAddr.sin_port:= HToNS(Port);
FillChar(SockAddr.sin_zero, SizeOf(SockAddr.sin_zero), 0);
SockSMTP:= Socket(AF_INET, SOCK_STREAM, IPPROTO_IP);
if SockSMTP <> INVALID_SOCKET then begin
if (Connect(SockSMTP, @SockAddr, Sizeof(SockAddr))=0) then begin
if RecvData(SockSMTP,'220') then begin
SendText(SockSMTP,'EHLO ' + GetLocalHost); { HELO }
if RecvData(SockSMTP,'250') then begin
SendText(SockSMTP,'AUTH PLAIN ' + Base64Encode(User+#0+User+#0+Pass));
if RecvData(SockSMTP,'235') then begin
SendText(SockSMTP,'MAIL FROM:' + From);
if RecvData(SockSMTP,'250') then begin
SendText(SockSMTP,'RCPT TO:' + SentTo);
if RecvData(SockSMTP,'250') then begin
SendText(SockSMTP,'DATA');
if RecvData(SockSMTP,'354') then begin
SendText(SockSMTP,'From: ' + From);
SendText(SockSMTP,'To: ' + SentTo);
SendText(SockSMTP,'Subject: ' + Tema);
SendText(SockSMTP,'Mime-Version: 1.0');
SendText(SockSMTP,'Content-Type: multipart/mixed;');
SendText(SockSMTP,'boundary="----------' + Boundary + '"');
SendText(SockSMTP,'');
SendText(SockSMTP,'This is a multipart MIME-coded message');
SendText(SockSMTP,'');
SendText(SockSMTP,'------------' + Boundary);
SendText(SockSMTP,'Content-Type: text/plain; charset=Windows-1251');
SendText(SockSMTP,'Content-Transfer-Encoding: 8bit');
SendText(SockSMTP,'');
SendText(SockSMTP,Body);
if Files<>'' then begin
SendText(SockSMTP,'------------' + Boundary);
SendFile(Files,SockSMTP);
SendText(SockSMTP,'------------' + Boundary + '--');
SendText(SockSMTP,'');
end;
SendText(SockSMTP, CL + '.' + CL);
SendText(SockSMTP, 'QUIT');
Result:= True;
end;
end;
end;
end;
end;
end;
end;
CloseSocket(SockSMTP);
end;
end;
finally
WSACleanup;
end;
end;
end.
|
|
|

09.05.2010, 17:25
|
|
Познавший АНТИЧАТ
Регистрация: 24.06.2008
Сообщений: 1,996
Провел на форуме: 6075534
Репутация:
2731
|
|
=Zeus=, именно это! Спасибо!
|
|
|

11.05.2010, 09:39
|
|
Познающий
Регистрация: 02.09.2007
Сообщений: 67
Провел на форуме: 521298
Репутация:
20
|
|
Код:
for i:=1 to x do
for j:=i to x do
if StrToIntDef(form1.StringGrid1.Cells[j,i],-1)>0 then
begin
n:=n+1;
m[n,1]:=StrToInt(form1.StringGrid1.Cells[0,i]);
m[n,2]:=StrToInt(form1.StringGrid1.Cells[j,0]);
m[n,3]:=StrToIntDef(form1.StringGrid1.Cells[j,i],-1);
end;
Объясните пожалуйста выделенную функцию. понятно, что функция StrToIntDef конвертирует строку из ячейки, но "-1" что означает?
|
|
|

11.05.2010, 10:54
|
|
Участник форума
Регистрация: 11.07.2009
Сообщений: 175
Провел на форуме: 2835808
Репутация:
185
|
|
Функция StrToIntDef конвертирует строку с целым IntegerString, такую как '123', в целое Integer, возвращая Default, если преобразование не удалось.
Код:
function StrToIntDef ( const IntegerString : string; Default : Integer ) : Integer;
По сути, просто число которое будет присвоено при ошибке конвертирования.
|
|
|

11.05.2010, 18:45
|
|
Участник форума
Регистрация: 12.11.2008
Сообщений: 146
Провел на форуме: 592199
Репутация:
21
|
|
как заставить idhttp работать через соксы?
как правельно привязать idsocksinfo к idhttp?
|
|
|

11.05.2010, 19:04
|
|
Участник форума
Регистрация: 23.07.2009
Сообщений: 261
Провел на форуме: 4435957
Репутация:
539
|
|
Парни, из-за чего происходит такая ошибка в инди?

Уже полчаса голову ломаю...раньше все нормально было.
|
|
|

11.05.2010, 21:18
|
|
Познающий
Регистрация: 21.11.2009
Сообщений: 77
Провел на форуме: 2482290
Репутация:
29
|
|
Получаю письма с ящика с помощью idpop3.
Некоторые письма принимаются, а некоторые нет, даже ошибки не возникает
Почему так?
|
|
|

11.05.2010, 22:20
|
|
Познающий
Регистрация: 15.03.2009
Сообщений: 87
Провел на форуме: 893829
Репутация:
34
|
|
Есть лекарство на компонент Securу bridge?
|
|
|

12.05.2010, 00:05
|
|
Участник форума
Регистрация: 30.03.2007
Сообщений: 121
Провел на форуме: 188563
Репутация:
52
|
|
Сообщение от HakaR
Парни, из-за чего происходит такая ошибка в инди?

Уже полчаса голову ломаю...раньше все нормально было.
Сокет закрываешь?
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|