Как использовать AllowSetForegroundWindow? - PullRequest
1 голос
/ 22 февраля 2012

У меня есть два окна в отдельных приложениях.У первого приложения есть кнопка, которая запускает второе приложение с дескриптором окна и идентификатором процесса:

procedure TForm1.Button1Click(Sender: TObject);
begin
  WinExec(PChar('Second.exe ' + IntToStr(Handle) + ' ' + IntToStr(GetCurrentProcessId)), SW_SHOWDEFAULT);
end;

Во втором приложении также есть кнопка, которая должна установить переднее окно на первое приложение:

function AllowSetForegroundWindow(AHandle: HWND): Boolean; external 'user32.dll';

procedure TForm1.Button1Click(Sender: TObject);
begin
  if not AllowSetForegroundWindow(StrToInt(ParamStr(2))) then begin
    ShowMessage('ERROR');
    Exit;
  end;
  SendMessage(StrToInt(ParamStr(1)), WM_APP + 1, 0, 0);
end;

Первое приложение имеет обработчик сообщений, который обрабатывает WM_APP + 1, например:

procedure TForm1.WWAppPlusOne(var Msg: TMsg);
begin
  Application.BringToFront;
end;

Когда я запускаю первое приложение и нажимаю на кнопку, запускается второе приложение.Когда я нажимаю кнопку во втором приложении, отображается ERROR.

Что я здесь не так делаю?

1 Ответ

4 голосов
/ 22 февраля 2012

Ваше объявление AllowSetForegroundWindow неверно.Вы пропустили соглашение о вызовах.Используемые вами типы данных также неверны, хотя на данный момент это, вероятно, не имеет значения.

Это должно выглядеть так:

function AllowSetForegroundWindow(dwProcessId: DWORD): BOOL;
    stdcall; external 'user32.dll';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...