delphi 7 如何在程序外的光标处输出一段字符串和数字?大侠们告诉我该怎么做啊?谢谢了...

时间:2022-09-28 22:12:41
我想在程序外任意获得光标的窗口中的光标处输入一段字符串或数字怎做?比如打开一个word或txt时,有光标则自动在word或txt窗口的光标处输入几个数字。 

我在网上看到有这样做
Delphi代码
SendMessage(Form1.Handle,WM_TEST_END,Integer(@MyId),1);  
其中MyId是要返回的字符串
在主窗口中使用如下代码:
先在public中加入消息函数的声明
Delphi代码
procedure WMTestEnd(var AMsg:TMessage);message WM_TEST_END;//消息函数  
其中WM_TEST_END是自定义的消息
再在implementation写函数
Delphi代码
procedure TForm1.WMTestEnd(var AMsg:TMessage);        
var       
s:string;        
begin       
  s:=string(Pointer(AMsg.wParam)^);        
  Memo1.Lines.Add(s);        
end;    

我复制运行了报了这样的错:Undeclared identifier:'WM_TEST_END'
我知道WM_TEST_END是自定义的消息,该怎么定义?我是菜鸟,麻烦大家给个完整的代码行吗?

我只是想在我运行了我的delphi程序后能在别的窗口光标处输出几个数字,能不能给个完整的代码啊,求求你们了!

我没有多余的分,大侠们别嫌分少啊,帮帮忙啦!

7 个解决方案

#1


该回复于2010-12-29 17:31:05被版主删除

#2


我能想到兩個方法,一種是模擬按鍵:keybd_event;
一種是WM_SETTEXT,利用SendMessage發送消息。

#3


我也知道有这两个方法,可我是刚开始学delphi,不知道怎么做,网上也有许多相关的例子,总没有合适的。
谢谢你的方法...

#4


你首先要找到光标处的组件的句柄才行,然后向其发送字符

比如你找到的句柄是 1234567,然后

var
  s:string;
  i:Integer;
begin
  s := '*';
  for i := 1 to Length(s) do
    SendMessage(1234567,   WM_CHAR,   Ord(s[i]),   0);
end;

#5


我知道了,可有些问题,就是我手动改变光标位置后,3秒后光标自动又跑到原来的位置了(我把定时器定为3秒,并且我在桌面随便建了个TXT,名字是11.txt),怎么做手动改变光标后就在光标后再次直接输入?
这是我的代码:

procedure Timer1Timer(Sender: TObject);
procedure hao;

procedure TForm1.hao;
var
  winhwnd: hwnd;
begin
  winhwnd := FindWindow(nil, '11.txt - 记事本');
  winhwnd := FindWindowEx(winhwnd, 0, 'edit', nil);
  SendMessage(winhwnd,WM_SETTEXT, 255, Integer(PChar('我来了')));
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  hao;
end;

#6


哎,没有人回答
手动改变光标后就在光标后再次直接输入的问题我也解决了,把SendMessage改变成
SendMessage(winhwnd,WM_Char,Wparam('Q'),2);
可把Q变成几个字母或数字就不行了,我不懂这里的原理,而且只能在txt中输出,不能再word中输出,怎么做才能输出多个字母或数字而且在word等其他的地方也能输出?

没人回答啊...
郁闷...

自己顶自己...

#7


没人回答...
没人回答...
没人回答...
哎...

我想在word中输出时我获得窗口句柄是用的winhwnd := GetForegroundWindow();
怎么才能在获得光标的窗口中输出呢,不管是word,网页,还是其他任何获得光标的地方都能,怎么做啊怎么做啊???

求求大侠们帮帮忙啊,急...

#1


该回复于2010-12-29 17:31:05被版主删除

#2


我能想到兩個方法,一種是模擬按鍵:keybd_event;
一種是WM_SETTEXT,利用SendMessage發送消息。

#3


我也知道有这两个方法,可我是刚开始学delphi,不知道怎么做,网上也有许多相关的例子,总没有合适的。
谢谢你的方法...

#4


你首先要找到光标处的组件的句柄才行,然后向其发送字符

比如你找到的句柄是 1234567,然后

var
  s:string;
  i:Integer;
begin
  s := '*';
  for i := 1 to Length(s) do
    SendMessage(1234567,   WM_CHAR,   Ord(s[i]),   0);
end;

#5


我知道了,可有些问题,就是我手动改变光标位置后,3秒后光标自动又跑到原来的位置了(我把定时器定为3秒,并且我在桌面随便建了个TXT,名字是11.txt),怎么做手动改变光标后就在光标后再次直接输入?
这是我的代码:

procedure Timer1Timer(Sender: TObject);
procedure hao;

procedure TForm1.hao;
var
  winhwnd: hwnd;
begin
  winhwnd := FindWindow(nil, '11.txt - 记事本');
  winhwnd := FindWindowEx(winhwnd, 0, 'edit', nil);
  SendMessage(winhwnd,WM_SETTEXT, 255, Integer(PChar('我来了')));
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  hao;
end;

#6


哎,没有人回答
手动改变光标后就在光标后再次直接输入的问题我也解决了,把SendMessage改变成
SendMessage(winhwnd,WM_Char,Wparam('Q'),2);
可把Q变成几个字母或数字就不行了,我不懂这里的原理,而且只能在txt中输出,不能再word中输出,怎么做才能输出多个字母或数字而且在word等其他的地方也能输出?

没人回答啊...
郁闷...

自己顶自己...

#7


没人回答...
没人回答...
没人回答...
哎...

我想在word中输出时我获得窗口句柄是用的winhwnd := GetForegroundWindow();
怎么才能在获得光标的窗口中输出呢,不管是word,网页,还是其他任何获得光标的地方都能,怎么做啊怎么做啊???

求求大侠们帮帮忙啊,急...