我在网上看到有这样做
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
#2
我能想到兩個方法,一種是模擬按鍵:keybd_event;
一種是WM_SETTEXT,利用SendMessage發送消息。
一種是WM_SETTEXT,利用SendMessage發送消息。
#3
我也知道有这两个方法,可我是刚开始学delphi,不知道怎么做,网上也有许多相关的例子,总没有合适的。
谢谢你的方法...
谢谢你的方法...
#4
你首先要找到光标处的组件的句柄才行,然后向其发送字符
比如你找到的句柄是 1234567,然后
比如你找到的句柄是 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;
这是我的代码:
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等其他的地方也能输出?
没人回答啊...
郁闷...
自己顶自己...
手动改变光标后就在光标后再次直接输入的问题我也解决了,把SendMessage改变成
SendMessage(winhwnd,WM_Char,Wparam('Q'),2);
可把Q变成几个字母或数字就不行了,我不懂这里的原理,而且只能在txt中输出,不能再word中输出,怎么做才能输出多个字母或数字而且在word等其他的地方也能输出?
没人回答啊...
郁闷...
自己顶自己...
#7
没人回答...
没人回答...
没人回答...
哎...
我想在word中输出时我获得窗口句柄是用的winhwnd := GetForegroundWindow();
怎么才能在获得光标的窗口中输出呢,不管是word,网页,还是其他任何获得光标的地方都能,怎么做啊怎么做啊???
求求大侠们帮帮忙啊,急...
没人回答...
没人回答...
哎...
我想在word中输出时我获得窗口句柄是用的winhwnd := GetForegroundWindow();
怎么才能在获得光标的窗口中输出呢,不管是word,网页,还是其他任何获得光标的地方都能,怎么做啊怎么做啊???
求求大侠们帮帮忙啊,急...
#1
#2
我能想到兩個方法,一種是模擬按鍵:keybd_event;
一種是WM_SETTEXT,利用SendMessage發送消息。
一種是WM_SETTEXT,利用SendMessage發送消息。
#3
我也知道有这两个方法,可我是刚开始学delphi,不知道怎么做,网上也有许多相关的例子,总没有合适的。
谢谢你的方法...
谢谢你的方法...
#4
你首先要找到光标处的组件的句柄才行,然后向其发送字符
比如你找到的句柄是 1234567,然后
比如你找到的句柄是 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;
这是我的代码:
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等其他的地方也能输出?
没人回答啊...
郁闷...
自己顶自己...
手动改变光标后就在光标后再次直接输入的问题我也解决了,把SendMessage改变成
SendMessage(winhwnd,WM_Char,Wparam('Q'),2);
可把Q变成几个字母或数字就不行了,我不懂这里的原理,而且只能在txt中输出,不能再word中输出,怎么做才能输出多个字母或数字而且在word等其他的地方也能输出?
没人回答啊...
郁闷...
自己顶自己...
#7
没人回答...
没人回答...
没人回答...
哎...
我想在word中输出时我获得窗口句柄是用的winhwnd := GetForegroundWindow();
怎么才能在获得光标的窗口中输出呢,不管是word,网页,还是其他任何获得光标的地方都能,怎么做啊怎么做啊???
求求大侠们帮帮忙啊,急...
没人回答...
没人回答...
哎...
我想在word中输出时我获得窗口句柄是用的winhwnd := GetForegroundWindow();
怎么才能在获得光标的窗口中输出呢,不管是word,网页,还是其他任何获得光标的地方都能,怎么做啊怎么做啊???
求求大侠们帮帮忙啊,急...