Цитата:
В посте #2 я говорила, что нужно сделать, чтобы перебирать еще и дочерние окна.
|
Что-то не могу ни как разобраться. Я ввел попробовал вот так:
Код:
Handles: array[0..0] of HWND; // например, запускаются четыре копии приложения...
function EnumThrWndProc(hndl: HWND; lprm: LPARAM): BOOL; stdcall;
implementation
{$R *.dfm}
function EnumThrWndProc(hndl: HWND; lprm: LPARAM): BOOL; stdcall;
var w:array[0..200] of char;
begin
getwindowtext(hndl,w,200);
form1.Memo1.Lines.Add(w);
Result := not IsWindow(hndl);
if not Result then
begin
Handles[lprm] := hndl;
end;
end;
function EnumThrWndProc2(hndl: HWND; lprm: LPARAM): BOOL; stdcall;
var w:array[0..200] of char;
begin
getwindowtext(hndl,w,200);
form1.Memo1.Lines.Add(w);
Result := not IsWindow(hndl);
if not Result then
begin
Handles[lprm] := hndl;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
WinDirPath, NPadPath: PChar;
i: Byte;
_si: STARTUPINFO;
_pi: PROCESS_INFORMATION;
begin
try
for i := 0 to 0 do
begin
FillChar(_si, SizeOf(_si), 0);
_si.cb := SizeOf(_si);
_si.dwFlags := STARTF_USESHOWWINDOW;
_si.wShowWindow := SW_SHOWNORMAL;
CreateProcess('g:\programs\forex\mt4\terminal.exe', nil, nil, nil,
False, NORMAL_PRIORITY_CLASS, nil, nil, _si, _pi);
Sleep(5000);
EnumThreadWindows(_pi.dwThreadId, @EnumThrWndProc, i);
EnumChildWindows(Handles[0], @EnumThrWndProc2,i);
end;
finally
end;
end;
Admin: Пользуемся тегами!
и в мемо оказались только caption формы и пустая строка, хотя через WinSight там видно что есть еще неск-ко Label, кнопок и т.д.
Подскажите пожалуйста что не так.
И еще такая проблема: если я открываю свою прогу через ярлык(параметров ни каких не прописано) то программа запускается только с одним, главным окном, а если через свою прогу, через createprocess, прога уже открывает 2 окна: главная форма и окошко для авторизации. Почему?