我在不同的应用程序中有两个窗口。第一个应用程序有一个按钮,用于启动第二个应用程序及其窗口句柄和进程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
。
我在这里做错了什么?
答案 0 :(得分:4)
您对AllowSetForegroundWindow
的声明不正确。您省略了调用约定。您使用的数据类型也是错误的,尽管这对您来说可能是良性的。
它应该是这样的:
function AllowSetForegroundWindow(dwProcessId: DWORD): BOOL;
stdcall; external 'user32.dll';