Delphi-获取运行过程的当前监视器';s聚焦窗口(外部)

Delphi-获取运行过程的当前监视器';s聚焦窗口(外部),delphi,screen,monitor,hwnd,window-handles,Delphi,Screen,Monitor,Hwnd,Window Handles,因此,正如标题中提到的,我在确定外部进程(应用程序)运行在哪个监视器(在多屏幕情况下)之后 我知道我的表单可以通过TForm.Monitor.MonitorNum属性来识别,到目前为止,我可以通过使用我在网上获得的FindWindowExtd函数来获得外部进程的句柄 稍后,我检查是否getforegroughindow=FindWindowExtd('App Partial Title'),因此我只在外部应用程序具有焦点时执行我的过程 因为我在做鼠标模拟器,所以识别屏幕ID对我来说至关重要,因为

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

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

稍后,我检查是否
getforegroughindow=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;
函数FindWindowExtd(partialTitle:string):HWND;
变量
hWndTemp:hWnd;
iLenText:整数;
cTitletemp:字符的数组[0..254];
sTitleTemp:字符串;
开始
hWndTemp:=FindWindow(无,无);
当hWndTemp 0开始时
iLenText:=GetWindowText(hWndTemp,cTitletemp,255);
sTitleTemp:=cTitletemp;
sTitleTemp:=大写(副本(sTitleTemp,1,iLenText));
partialTitle:=大写(partialTitle);
如果位置(PartialTile,sTitleTemp)为0,则
打破
hWndTemp:=GetWindow(hWndTemp,GW\U HWNDNEXT);
结束;
结果:=hWndTemp;
结束;
我能从把手上得到一些帮助吗

谢谢

是的

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

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


谢谢你的快速帮助

从窗口查看监视器。@SertacAkyuz正是我要找的!!谢谢你的即时帮助!!!