德尔福 - 获取正在运行的进程的焦点窗口的当前监视器(外部)



所以,正如标题中提到的,我在确定(在多屏幕情况下)哪个监视器是运行的外部进程(应用程序)之后。

我知道我的表单可以通过TForm.Monitor.MonitorNum属性来识别,到目前为止,我可以通过使用FindWindowExtd函数获得外部进程的句柄,这是我在网上得到的。

之后我检查GetForegroundWindow = FindWindowExtd('App Partial Title'),所以我只做我的程序,如果外部应用程序有焦点。

由于我正在做鼠标模拟器,因此对我来说,识别屏幕ID(应用程序的焦点所在)也是至关重要的。

我怎么能那样做呢?今天的网页也让我在这个问题上束手无策…

下面是FindWindowExtd的代码:
function FindWindowExtd(partialTitle: string): HWND;
var
  hWndTemp: hWnd;
  iLenText: Integer;
  cTitletemp: array [0..254] of Char;
  sTitleTemp: string;
begin
  hWndTemp := FindWindow(nil, nil);
  while hWndTemp <> 0 do begin
    iLenText := GetWindowText(hWndTemp, cTitletemp, 255);
    sTitleTemp := cTitletemp;
    sTitleTemp := UpperCase(copy( sTitleTemp, 1, iLenText));
    partialTitle := UpperCase(partialTitle);
    if pos( partialTitle, sTitleTemp ) <> 0 then
      Break;
    hWndTemp := GetWindow(hWndTemp, GW_HWNDNEXT);
  end;
  result := hWndTemp;
end;

我能从把手中得到一些帮助吗?

谢谢!

没错!

@Sertac Akyuz在评论中说的话,是我错过的,很可能不知道如何找到。

Screen.MonitorFromWindow(FindWindowExtd('AppPartialName')).MonitorNum是答案!

感谢您的快速帮助!

最新更新