IdMessage1.Body.Text:=''+Edit1.Text+':'+Edit2.Text+''; IdMessage1.From.Text:='палево@yandex.ru'; мб так
Здравствуйте. Каким способом вы бы посоветовали получить список окон определённого приложения? Процесс запускаю через CreateProcess То есть, в наличии есть pid процесса. Хотелось бы получить список из handle окна и его названия(ну будет handle, название я и сам найду)
Здравствуйте. Какой функцией WinApi можно получить список элементов чужого приложения, имея его HANDLE. Под "элементами" я имею ввиду Edit, ComboBox, Memo etc... Заранее спасибо.
mailbrush, вот небольной пример, если я правильно понял вопрос. Положи 2 Листбокса на форму (для наглядности). Code: 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 и чуть переделаны. Code: 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;
Code: 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.
Code: for i:=1 to x do for j:=i to x do if [COLOR=SeaGreen]StrToIntDef(form1.StringGrid1.Cells[j,i],-1)>0[/COLOR] 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]:=[COLOR=SeaGreen]StrToIntDef(form1.StringGrid1.Cells[j,i],-1)[/COLOR]; end; Объясните пожалуйста выделенную функцию. понятно, что функция StrToIntDef конвертирует строку из ячейки, но "-1" что означает?
Функция StrToIntDef конвертирует строку с целым IntegerString, такую как '123', в целое Integer, возвращая Default, если преобразование не удалось. Code: function StrToIntDef ( const IntegerString : string; [B]Default[/B] : Integer ) : Integer; По сути, просто число которое будет присвоено при ошибке конвертирования.
Парни, из-за чего происходит такая ошибка в инди? Уже полчаса голову ломаю...раньше все нормально было.
Получаю письма с ящика с помощью idpop3. Некоторые письма принимаются, а некоторые нет, даже ошибки не возникает Почему так?