高手求教,在dll中返回当前获得焦点的窗体函数中时出现问题(解决问题可以再加分)(50分)

  • 主题发起人 主题发起人 江上游者
  • 开始时间 开始时间

江上游者

Unregistered / Unconfirmed
GUEST, unregistred user!
library Library1;


uses
SysUtils,
Classes,
windows,
ShellApI;

//返回当前获得焦点的窗体
function GetFocusedWindowFromParent(ParentWnd:HWnd):HWnd;
var
OtherThread,
Buffer : DWord;
idCurrThread: DWord;
begin
OtherThread := GetWindowThreadProcessID(ParentWnd, @Buffer);//???错误总是在此行出现???????
idCurrThread := GetCurrentThreadID;
if AttachThreadInput(idCurrThread, OtherThread, true) then
begin
Result := GetFocus;
AttachThreadInput(idCurrThread, OtherThread, false);
end
else
Result:= GetFocus;
end;
function GetOpen(PFWnd:HWnd):HWnd;
begin
.....
.....
GetFocusedWindowFromParent(pf);
....
....
end;
exports
//GetFocusedWindowFromParent();//stdcall;//export;
GetOpen();stdcall;export;
begin

end.
 
用SetWindowText吧!
 
呵呵,看错了,应该是GetWindowText
 
使用GetWindowText 好象只获得窗体的标题,窗体内的内容没有获得。
 
你先要得到里面所需要控件的的句柄
 
好我先试一试,一会上班。
 
to BlueVoice
我使用SendMessage或者GetWindowText都不行,在*.exe中好象是标签型数据。
 
winexec
shellexecute[:D]
 
如下代码:
procedure TForm2.Button2Click(Sender: TObject);
var
ls_Temp: String;
hd_Win, hd_Edit, hd_Test: THandle;
li_Temp: Integer;
begin
//查找你的目标窗口
hd_Win := FindWindow(nil, 'Form1');
if hd_Win <> 0 then
//再查找你的目标输入框
//这里用的类名,你也可以用控件名,先用WinSight32(delphi自带)工具找到
hd_Edit := FindWindowEx(hd_win, hd_Test, 'TEdit', nil);
if hd_Edit <> 0 then
begin
//发送一个全选消息
SendMessage(hd_Edit, EM_SETSEL, 0, -1);
//发送一个COPY消息
SendMessage(hd_Edit, WM_COPY, 0, 0);
end;

//粘贴到你的编辑框里
Edit2.SelectAll;
Edit2.CopyToClipboard;
end;
 
hd_Edit找到,使用 //发送一个全选消息
SendMessage(hd_Edit, EM_SETSEL, 0, -1);
//发送一个COPY消息
SendMessage(hd_Edit, WM_COPY, 0, 0);
不行。
 
后退
顶部