Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.09.12;
Скачать: CL | DM;

Вниз

узнать hwnd   Найти похожие ветки 

 
RaPToR_1   (2004-08-30 02:00) [0]

i:=winexec("notepad.exe",1);
как мне узнать хендл окна, которое я запустил?
findwindow не канает для меня в этом случаи...нужен другой способ


 
GuAV ©   (2004-08-30 02:11) [1]

CreateProcess
EnumThreadWindows


 
RaPToR_1   (2004-08-30 02:19) [2]

а поподробнее?


 
GuAV ©   (2004-08-30 03:19) [3]

CreateProcess запустит приложение заместо winexec.
в lpProcessInformation будет информация о процессе и потоке
в частности hProcess и ThreadId.
ждешь, когда он закончит инициализацию
WaitForInputIdle.
ThreadId передашешь в EnumThreadWindows - она найдёт окно.


 
_sulent ©   (2004-08-30 09:16) [4]

var
 ...
 pc: pChar;
 pi: TProcessInformation;
 si: TStarupInfo;
begin
 ...
pc := "Что екзекать";
 CreateProcess(nil, pc, nil,nil, false, CREATE_DEFAULT_ERROR_MODE,nil,nil,si,pi);
 WaitForSingleObject(pi.hProcess, INFINITE);
 ...
end;


 
GuAV ©   (2004-08-30 10:50) [5]

_sulent ©   (30.08.04 09:16) [4]

Не то. Читай внимательно вопрос. В [3] я уже дал ответ, осталось только его в код перевести.


 
RaPToR_1   (2004-08-30 11:41) [6]

function zxc(lhwn,lparam:integer):integer;
begin
form1.Caption:=inttostr(lhwn);
//////
result:=1;
end;

function okno:string;
var
Rlst: LongBool;
StartUpInfo: TStartUpInfo;
ProcessInfo: TProcessInformation;
begin
FillChar(StartUpInfo, SizeOf(TStartUpInfo), 0);
with StartUpInfo do
begin
  cb := SizeOf(TStartUpInfo);
  dwFlags := STARTF_USESHOWWINDOW or STARTF_FORCEONFEEDBACK;
  wShowWindow := SW_SHOWNORMAL;
end;
Rlst := CreateProcess("c:\windows\calc.exe", "", nil, nil, false, NORMAL_PRIORITY_CLASS, nil, nil, StartUpInfo, ProcessInfo);
if Rlst then
with ProcessInfo do begin
  WaitForInputIdle(hProcess, INFINITE);
   EnumThreadWindows(ProcessInfo.hThread,@zxc,1);
  CloseHandle(hThread);
 CloseHandle(hProcess);
end;
end;


не работает это


 
MetalFan ©   (2004-08-30 12:38) [7]

EnumThreadWindows(ProcessInfo.dwThreadId,@zxc,1);


 
RaPToR_1   (2004-08-30 12:51) [8]


function zxc(lhwn,lparam:integer):integer;
var ii:integer;
s:string;
begin
       ii := GetWindowTextLength(lhwn);
       s:="";
       setlength(s,ii+1);
       ii := GetWindowText(lhwn, pchar(s), ii+1);
form1.Caption:=s;
//////
result:=1;
end;


вот тут я получаю хендл, но почему я не могу получить заголовок окна?


 
KADAN ©   (2004-08-30 12:57) [9]

может stdcall


 
RaPToR_1   (2004-08-30 13:15) [10]

даже если так я получай например у окна калькулятора капшен calcmsgpumpwnd
что  эт такое?
function zxc(lhwn,lparam:integer):integer;stdcall;
var ii:integer;
s:string;
begin
      ii := GetWindowTextLength(lhwn);
      s:="";
      setlength(s,ii+1);
      ii := GetWindowText(lhwn, pchar(s), ii+1);
form1.Caption:=s;
//////
result:=1;
end;


 
GuAV ©   (2004-08-30 14:12) [11]


> что  эт такое?


То что окон больше одного.
Глянь в WinSight, сам увидишь.
Так попробуй.

function EnumThreadWndProc(hWnd: HWND; lParam: LPARAM): BOOL; stdcall;
const
 CalcClass = "SciCalc";
 CalcClassStr: array[0..Length(CalcClass)] of Char = CalcClass;
var
 ClassStr: array[0..Length(CalcClass)] of Char;
begin
 GetClassName(hWnd,ClassStr,Length(CalcClass)+1);
 Result:=ClassStr <> CalcClassStr;
 if not Result then PHandle(lParam)^:=hWnd;
end;

procedure TForm1.FormCreate(Sender: TObject);
var
 Wnd: HWND;
 SI: TStartupInfo;
 PI: TProcessInformation;
 S: string;
 Len: Integer;
begin
 Wnd:=0;
 FillChar(SI, SizeOf(SI),0);
 SI.cb:=SizeOf(SI);
 CreateProcess(nil,"CALC.EXE",nil,nil,False,
   0,nil,nil,SI,PI);
 WaitForInputIdle(PI.hProcess, INFINITE);
 EnumThreadWindows(PI.dwThreadId,
   @EnumThreadWndProc, LPARAM(@Wnd));
 begin
   GetWindowTextLength(Wnd);
   Len:=GetWindowTextLength(Wnd) + 1;
   setlength(S, Len);
   setlength(S, GetWindowText(Wnd, @s[1], Len));
   Caption:=S;
 end;
end;


 
RaPToR_1   (2004-08-30 15:29) [12]

пасиб, отлично работает



Страницы: 1 вся ветка

Текущий архив: 2004.09.12;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.025 c
1-1093712107
Черный дембель
2004-08-28 20:55
2004.09.12
Параметры функций из DLL


1-1093518207
D3viL
2004-08-26 15:03
2004.09.12
Спасите Памагити!!!


1-1093519598
shc
2004-08-26 15:26
2004.09.12
дочерние окна в CLX


1-1093604352
Stanislav
2004-08-27 14:59
2004.09.12
Форма из DLL


14-1093377281
VID
2004-08-24 23:54
2004.09.12
Как настроить Kerio WinRoute 6.0.1