如何对其他窗口的编辑框输入数据???(100分)

  • 主题发起人 主题发起人 pk-girl
  • 开始时间 开始时间
P

pk-girl

Unregistered / Unconfirmed
GUEST, unregistred user!
  我想编一个自动输入数据的程序,但是遇到一个核心问题。当程序用
鼠标使其他的某个窗口中的编辑框聚集的时候,我的程序如何对他输入数
据?例如:自动对IE中的“地址栏”输入地址和对词霸中输入词语的地方
自动输入词语。
 
除非你得到编辑框的句柄。否则没得做
 
可以得到编辑框的句柄,然后 sendmessage,试试
 
鼠标点一下该编辑框,该框就取得焦点。这样可不可以得到句柄?
 
嘻嘻,把以前cAkk的单元改一下就可以实现。在你的单元里 uses unit2……
可以发送字符,然后模拟回车

unit Unit2;
interface
uses windows,messages;
procedure SendKeys(sSend:string);

implementation
procedure SendKeys(sSend:string);
var
i:integer;
focushld,windowhld:hwnd;
threadld:dword;
ch: byte;
begin
windowhld:=GetForegroundWindow;
threadld:=GetWindowThreadProcessId(Windowhld,nil);
AttachThreadInput(GetCurrentThreadId,threadld,true);
Focushld:=getfocus;
AttachThreadInput(GetCurrentThreadId,threadld,false);
if focushld = 0 then Exit;
i := 1;
while i <= Length(sSend) do
begin
ch := byte(sSend);
if Windows.IsDBCSLeadByte(ch) then
begin
Inc(i);
SendMessage(focushld, WM_IME_CHAR, MakeWord(byte(sSend), ch), 0);
end
else
SendMessage(focushld, WM_IME_CHAR, word(ch), 0);
Inc(i);
end;
postmessage(focushld,WM_keydown,13,0);
end;
end.
 
你是想作一个键盘监控程序吧,是把从开机到关机的所有键盘消息都记录下来。
这种软件很多,如果自已作的话就拦截消息好了。

>当程序用鼠标使其他的某个窗口中的编辑框聚集的时候,我的程序如何对他输入数据?
这种功能只是它的一个小小子集。
 
具体说你应该写两个回调函数,一个用于查找你想控制的主程序窗口,另一个用于
查找你想要得编辑框,找到后用SendMessage(handle,wm_settextWparam,lparam);

下面是我自己的一些变成遇到的问题解答
查找具有特定类型的窗口:
FindWindow:

HWND FindWindow(
LPCTSTR lpClassName, // 类名
LPCTSTR lpWindowName // 窗口名
);

挨个处理显示的窗口
EnumWindows:

BOOL EnumWindows(
WNDENUMPROC lpEnumFunc, // 回调函数的地址,通常是@Function
LPARAM lParam // 传递给回调函数的参数
);


GetWindowText
The GetWindowText function copies the text of the specified window's title bar (if it has one) into a buffer. If the specified window is a control, the text of the control is copied. However, GetWindowText cannot retrieve the text of a control in another application.

int GetWindowText(
HWND hWnd, // handle to window or control with text
LPTSTR lpString, // address of buffer for text
int nMaxCount // maximum number of characters to copy
);

给窗口发消息:
SendMessage(handle,message,Wparam,lparam);
Handle为窗口句柄,message为消息类型,
wparam和lparam为消息参数;

获取窗口类的名字:
int GetClassName( HWND hWnd, // 窗口句柄
LPTSTR lpClassName, // 保存窗口类名的地址,通常是string
int nMaxCount ) // string的大小
 
wjiachun的建议很合理;
基本上,你的例程首先有一个MOUSE的钩子程序,
当移动的窗口或编辑框的句柄正是你需要的,
你的程式应用SendMessage发送字符消息。
 
多人接受答案了。
 
后退
顶部