请教Delphi大神,如何获取外部程序,焦点所在的句柄

请教Delphi大神,如何获取外部程序,焦点所在的句柄比如外部程序焦点在文本框上就获取这个文本框的句柄,重点是焦点在谁就获取谁的句柄。感谢!

第1个回答  2018-07-25
这可能是你想要的:
procedure TForm1.tmr1Timer(Sender: TObject);
var
h: HWND;
c: array[0..1024*32] of Char;
idAttach: Cardinal;
begin
H := GetForegroundWindow;
idAttach := GetWindowThreadProcessId(h, nil);
if not AttachThreadInput(idAttach , GetCurrentThreadId(), True) then Exit;
H := GetFocus;
if h = 0 then Exit;
FillChar(c, SizeOf(c), #0);
if SendMessage(h, WM_GETTEXT, SizeOf(c), Integer(@c) ) = 0 then
// if GetWindowText(h, @c, SizeOf(c)) = 0 then
begin
mmo1.Text := SysErrorMessage(GetLastError);
end
else
begin
mmo1.Text := c;
end;
AttachThreadInput(idAttach, GetCurrentThreadId(), false );
end;
第2个回答  2018-09-20
function GetFocusHandle: HWND;
var
h: HWND;
c: array[0..1024*32] of Char;
idAttach: Cardinal;
begin
H := GetForegroundWindow;
idAttach := GetWindowThreadProcessId(h, nil);
if not AttachThreadInput(idAttach , GetCurrentThreadId(), True) then Exit;
Result := GetFocus;
AttachThreadInput(idAttach, GetCurrentThreadId(), false );
end;本回答被提问者和网友采纳

请教Delphi大神,如何获取外部程序,焦点所在的句柄
这可能是你想要的:procedure TForm1.tmr1Timer(Sender: TObject);var h: HWND;c: array[0..1024*32] of Char;idAttach: Cardinal;begin H := GetForegroundWindow;idAttach := GetWindowThreadProcessId(h, nil);if not AttachThreadInput(idAttach , GetCurrentThreadId(), True) then Exit;H ...

Delphi中如何获取外部程序焦点所在控件的句柄
function GetFocusHandle: HWND;var h: HWND;c: array[0..1024*32] of Char;idAttach: Cardinal;begin H := GetForegroundWindow;idAttach := GetWindowThreadProcessId(h, nil);if not AttachThreadInput(idAttach , GetCurrentThreadId(), True) then Exit;Result := GetFocus;AttachThreadInput(id...

delphi 如何获取其它应用程序窗体中的所有控件句柄
实现原理是启动一个应用程序,通过ProcessID得到窗体句柄,然后对其设定父窗体句柄为本程序某控件句柄(本例是窗体内一个Panel的句柄),这样就达成了内嵌的效果。新建窗体,上面放置一个Panel控件,名为pnlApp,然后按下面代码编写:unit frmTestEmbedApp; interface uses Windows, Messages, SysUtils...

在Delphi已知线程ID.怎么获取句柄
在Delphi已知线程ID.获取句柄的方法:通过EnumWindows枚举所有窗口,使用GetWindowThreadProcessID,通过窗口句柄获取进程ID,以便获取的进程ID与当前已知的进程ID,判断是否为需要的窗口

Delphi怎么获得另一个程序的句柄
hmutex := FindWindow( sAppName, nil);PostMessage( hMutex, WM_COPYDATA, 0, LONGINT(REXdATA));sAppName 代入要获得的程序的标题字串,如"小算盤"。

Delphi 如何操作外部程序的控件(如按钮,文本框,单选按钮等)
1.得到你要这个窗口的句柄 使用FindWindow 2.利用枚举函数EnumChildWindows把这个窗口里的所有文本框、按钮找到,并得到其句柄,EnumChildWindows需要一个回调函数,你可以在回调函数中把模拟输入,单击双击这些操作加上去 3.在回调函数里,其实就是向你找到的按钮或文本框发送消息 消息说明:比如得到文本框中的...

delphi得到外部窗口句柄
procedure TForm1.Button1Click(Sender: TObject);var h:HWnd;begin h := FindWindow(nil,'窗口标题');SetWindowText(h,'新窗口标题');end;

win7,64位,delphi使用VFW操作摄像头,如何根据硬件ID查找其句柄
通过公共接口访问,同一时刻你只能捕获一个设备句柄。有个别厂家的产品可以对其同型产品同时识别多个,但只限于使用其自带的应用程序,注意,不是SDK,只是一个目标程序,他们不会给你源码的。对我们设计人员, 没有丝毫用处。没办法,我们只好采用同一类型,不同厂家(芯片组)的产品,识别和捕获问题就...

delphi 控件怎么获得窗体的句柄
delphi 里有窗体的控件,都有一个 handle 属性,里面保存的就是窗体的句柄。如果是想要获取软件(程序)之外的窗体句柄,可以使用 win32 函数:FindWindow 或GetWindow来遍历查找,示例代码如:handle := FindWindow(nil,PChar('窗口的标题'));FindWIndow 示例:procedure TForm1.Button1Click(Sender: ...

delphi 如何得到外部exe文件进程句柄
aItem.Caption:=IntToStr(pe.th32ProcessID);\/\/PID,如果要得到进程句柄用OpenProcess,参数就有这个PID aItem.SubItems.Add(pe.szExeFile);\/\/进程的exe,要判断进程就只有根据这个值了 b:=Process32Next(h,pe)end;end;你只要在这里加上判读exe是不是你所指的外部exe,如果是就用OpenProcess吧,然后...

相似回答