• 0
Авторизация  
Zyablik3000

Получение хэндла главной формы приложения из другой программы

Вопросы

Здравствуйте!

Есть VCL приложение с кодом:

function GetWindow(Handle: Cardinal; LParam: longint): bool;
begin
  Result:= true;
  WindowList.Add(Pointer(Handle));
end;

function TFileOperationsThread.GetHandles(ThreadID: Cardinal): Cardinal;
var
  i: integer;
  hnd : Cardinal;
  cpid : DWord;
begin
  Result:=0;
  WindowList := TList.Create;
  EnumWindows (@GetWindow, 0);
  for i := 0 to WindowList.Count - 1 do
  begin
    hnd := HWND(WindowList[i]);
    GetWindowThreadProcessID (hnd, @cpid);
    if ThreadID = CPID then
    begin
      Result := hnd;
      WindowList.Free;
      Exit;
    end;
  end;
  WindowList.Free;
end;

procedure TFileOperationsThread.Execute;
var
  SEInfo: TShellExecuteInfo;
  StartInfo: TStartupInfo;
  ProcInfo: _PROCESS_INFORMATION;
  AppHandle: THandle;
begin
  StartInfo.cb:=SizeOf( StartupInfo);
  StartInfo.dwFlags:=STARTF_USESHOWWINDOW;
  StartInfo.wShowWindow:=SW_SHOW;
  if FileExists(FFileInfo.FullFileName) then
  begin
    if CreateProcess(PChar(FFileInfo.FullFileName),
                     PChar(FFileInfo.FullFileName),
                     nil,
                     nil,
                     False,
                     NORMAL_PRIORITY_CLASS,
                     nil,
                     nil,
                     StartInfo,
                     ProcInfo) then
    begin
      WaitForInputIdle(ProcInfo.hProcess, INFINITE);
      AppHandle:=GetHandles(ProcInfo.dwProcessId)
      SendMessage(FFormHandle, WM_NEED_CHANGE_STATE, WPARAM(AppHandle), SMP_WINDOW_HANDLE);
      CloseHandle(ProcInfo.hProcess);
      CloseHandle(ProcInfo.hThread);
    end;
  end;
end;

Код нормально запускает приложение написанное на Firemonkey.

Но функция GetHandles возвращает некое число, которое НЕ равно ни ApplicationHWND, ни FormToHWND(Self) firemonkey приложения.

Функция WaitForInputIdle возвращает 0.

Проблема решается заменой WaitForInputIdle(ProcInfo.hProcess, INFINITE); на Sleep(500); В AppHandle получаю значение равное FormToHWND(Self) firemonkey приложения.

А теперь вопрос: Подскажите плиз как получить Виндовый хендл главной формы Firemonkey-приложения после его запуска и что это за неизвестное число, которое получаю в AppHandle:=GetHandles(ProcInfo.dwProcessId).

Не хочется использовать FindWindow.

 

Изменено пользователем Zyablik3000

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

0 ответов на этот вопрос

Ответы на этот вопрос пока отсутствуют

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация  

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу