AllowSetForegroundWindow

AllowSetForegroundWindow

我在单独的应用程序中有两个窗口。第一个应用程序具有一个按钮,该按钮以其窗口句柄和进程ID启动第二个应用程序:

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

我在这里做错了什么?

最佳答案

您的AllowSetForegroundWindow声明不正确。您已省略了调用约定。您使用的数据类型也是错误的,尽管目前对您而言这可能是有益的。

它看起来应该像这样:

function AllowSetForegroundWindow(dwProcessId: DWORD): BOOL;
    stdcall; external 'user32.dll';

09-05 01:23