如何捕捉其它程序的某个Edit的值(100分)

  • 主题发起人 主题发起人 abigfish
  • 开始时间 开始时间
A

abigfish

Unregistered / Unconfirmed
GUEST, unregistred user!
程序1中有个Edit1,代码不能修改
程序2是自己写的,怎么把程序1中的Edit1.text给取过来,提供可行的答案就给专家分了,谢谢
 
// list 是个全局TList实例
bool CALLBACK EnumWindowProc(HWND hwnd,LPARAM lParam)
{
char ClassName[255];

if ( GetClassName(hwnd,ClassName,256)>0 )
{
if ( SameText(ClassName,"TEdit") || SameText(ClassName,"Edit") )
{
list->Add(hwnd);
return true;
}
}
return true;
}

void __fastcall TfrmMain1::Button4Click(TObject *Sender)
{

HWND hWin;
char *buf;
int iLen;
hWin = FindWindow("#32770",NULL);
if (hWin != 0 )
{
list->Clear();
EnumChildWindows(hWin,(WNDENUMPROC)EnumWindowProc,0);
}

char a[10];
for (int i = 0 ; i < list->Count ; i++)
{
HWND hwnd = (HWND)(list->Items);
iLen = SendMessage(hwnd,WM_GETTEXTLENGTH,0,0);
buf = new char[iLen+1];
GetWindowText(hwnd,buf,iLen+1);
ShowMessage(buf);
}
}
 
靠,竟然是和楼主同一个月注册的
 
弄一个Timer,然后在它的事件中执行如下流程:
以下代码有些可以去掉,你自己调一下即可。
procedure TForm1.Timer1Timer(Sender: TObject);
var
Pos: TPoint;
Handle: HWND;
Buf: array[0..1024] of Char;
Ctr: TWinControl;
begin
GetCursorPos(Pos); //得到当前光标位置
Handle := WindowFromPoint(Pos); //返回当前位置的句柄
HandleText.Text := IntToStr(Handle);
GetClassName(Handle, Buf, 1024); //得到类名

Ctr := FindControl(Handle);
if Ctr <> nil then
edtParClassName.Text := Ctr.ClassParent.ClassName;

ClassNameText.Text := Buf;
SendMessage(Handle, WM_GETTEXT, 33, Integer(@Buf)); //得到标题
TitleText.Caption := Buf; //得到内容
end;
 
FindWindows
AttathThreadInput
 
可以用 www.ccrun.com 的 spy4win 软件自动生成的代码 (功能强大)
 
多人接受答案了。
 
后退
顶部