所以,正如标题中提到的,我在确定(在多屏幕情况下)哪个监视器是运行的外部进程(应用程序)之后。
我知道我的表单可以通过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
是答案!
感谢您的快速帮助!