强制另一个应用程序SendToBack

时间:2016-07-09 16:48:42

标签: delphi

我需要在申请前面填写表格。但是,常用方法不起作用。

已尝试的方法

//method #1

PostMessage(HD, WM_USER, 0, 0);
SetWindowPos(HD, HWND_BOTTOM, 0, 0, 0, 0, SWP_NOMOVE or SWP_NOSIZE);


//method #2
dwThreadID := GetWindowThreadProcessId(HD, nil);
dwCurrentThreadID := GetCurrentThreadId;
AttachThreadInput(dwCurrentThreadID, dwThreadID, true);
BringWindowToTop(Aff.handle);
ShowWindow(Aff.handle, SW_SHOW);

有问题的申请 enter image description here

评论

有问题的应用程序仅适用于全屏模式。

我不想要完整的代码,只需要前进的方法。

请原谅我的英语不好,谢谢你的时间。

2 个答案:

答案 0 :(得分:0)

您正在将表单设置为底部。最重要的是:

SetWindowPos(handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOACTIVATE or SWP_NOMOVE or SWP_NOSIZE);

另一种方法,如果你真的想强制外部应用程序到后台,你需要得到它的处理。例如,如果此类应用程序名为calc:

hCalc := FindWindow('calc', nil); 
SendMessage(hCalc , WM_SYSCOMMAND, SC_MINIMIZE, 0); // you can also minimize the application
SetWindowPos(hCalc , HWND_BOTTOM, 0, 0, 0, 0,  SWP_NOACTIVATE or SWP_NOMOVE or SWP_NOSIZE);

答案 1 :(得分:0)

你可以试试这个:

function ForceForegroundWindow(AHandle: THandle): Boolean;
var
  Input: TInput;
begin
  Result := True;

  ZeroMemory(@Input, SizeOf(Input));
  SendInput(1, Input, SizeOf(Input));
  SetForegroundWindow(AHandle);
end;

来自(How to bring my application to the front?

的Sertac Akyuz的信用