(200高分求解 ) 关于自动输入的问题,急急急(解决问题200相赠)

zhangxiasummer 2003-09-12 09:58:48
我要做一个后台程序,定时在当前光标所在的程序里面输入文本内容,当前光标所在位置可能是edit,comobobox,memo...等输入框,而且当前光标所在的程序可能是ie\或是别的程序里面的输入框,就是说只要我的程序运行在后台,当前光标所在的地方都会自动的输入文本信息,有办法吗
我原来的程序如下: 可是不大行
var
PHandle,childHandle : THandle;
begin
PHandle:=FindWindow(nil,'Form1');
if PHandle<>0 then
if isiconic(PHandle) then
ShowWindow(PHandle,sw_restore)
else
SetForegroundWindow(PHandle)
else
showmessage('no such window');


if PHandle<>0 then
begin
childHandle := FindWindowEx(PHandle,0,'edit','');
if childHandle <> 0 then
sendMessage(childhandle,WM_SETTEXT,0,longint(pchar('3345')));
end;
end;
我昨天问过一个同名的问题在之前问过,也是100分,可是回答的都未能解决问题如果谁能让我解决这个问题,马上给100,再请查找我昨天的这个问题,进去说句话,然后我再给100
...全文
23 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
sailer_shi 2003-10-22
  • 打赏
  • 举报
回复
找到窗体的类很容易,但是我说的是找要输入的控件的类不容易呀
delphi_xizhousheng 2003-10-22
  • 打赏
  • 举报
回复
其实找窗体类还是很简单的,用没有用过VC 的Spy++,网上很多例子
scatzr 2003-10-22
  • 打赏
  • 举报
回复
enumwindows
zzh54zzh 2003-10-22
  • 打赏
  • 举报
回复
把你的程序改成:
var
PHandle,childHandle : THandle;
begin
PHandle:=FindWindow(nil,'Form1');
if PHandle<>0 then
if isiconic(PHandle) then
ShowWindow(PHandle,sw_restore)
else
SetForegroundWindow(PHandle)
else
showmessage('no such window');


if PHandle<>0 then
begin
childHandle := FindWindowEx(PHandle,0,'TEdit',nil);
if childHandle <> 0 then
sendMessage(childhandle,WM_SETTEXT,0,longint(pchar('3345')));
end;
end;
就可以了。
注意:FindWindowEx(PHandle,0,'edit','')--〉FindWindowEx(PHandle,0,'TEdit',nil)
zzh54zzh 2003-10-22
  • 打赏
  • 举报
回复
转贴:
在你的单元里 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[i]);
if Windows.IsDBCSLeadByte(ch) then
begin
Inc(i);
SendMessage(focushld, WM_IME_CHAR, MakeWord(byte(sSend[i]), ch), 0);
end
else
SendMessage(focushld, WM_IME_CHAR, word(ch), 0);
Inc(i);
end;
postmessage(focushld,WM_keydown,13,0);
end;
end.

然后在你需要显示文本内容的edit的onclick事件里写:
procedure TForm1.Edit1Click(Sender: TObject);
begin
SendKeys('aa');//aa为你要发送的内容
end;
ls2008 2003-10-22
  • 打赏
  • 举报
回复
是固定的時間還是固定的間隔時間?
SunKinXing 2003-10-22
  • 打赏
  • 举报
回复
不清楚,学习
sailer_shi 2003-10-22
  • 打赏
  • 举报
回复
我也作过跟你的想法一样的东东,但是由于总是找不到窗体上要输入的控件的类而宣告失败,这只是给你提一个建议,要先找到控件的类然后就容易多了
wangyounihao 2003-10-22
  • 打赏
  • 举报
回复
我也想知道!顶一下
佩佩zpm 2003-10-22
  • 打赏
  • 举报
回复
SendKey的用法是想当广泛的,我甚至曾经在Win2000中用这个办法来控制DB2的db2cmd,即模拟键盘输入进行控制台程序操作。
佩佩zpm 2003-10-22
  • 打赏
  • 举报
回复
这个都不知道阿,用SendKey就可以解决了,
我在2000年的时候写的“刷屏至尊”就是用了这个方法,这个Pas文件在Delphi的安装光盘中可以找到(D4和D5中有,D6D7没有注意过),
给我200分,我发给你
ZPM111@263.net
dickeybird888 2003-10-22
  • 打赏
  • 举报
回复
(@$@)
noil0125 2003-09-12
  • 打赏
  • 举报
回复
学习
mingjunlee 2003-09-12
  • 打赏
  • 举报
回复
强,学习中.............
hch_d 2003-09-12
  • 打赏
  • 举报
回复
定时啊?不明白,帮你UP好了!
zhangxiasummer 2003-09-12
  • 打赏
  • 举报
回复
这么多分
都搞不定问题

5,379

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧