我想知道怎样向一个记事本或者其他什么可输入文件输入文字或功能键(用sendmessage或postmessage) (100分)

  • 主题发起人 主题发起人 学习DELPHI
  • 开始时间 开始时间

学习DELPHI

Unregistered / Unconfirmed
GUEST, unregistred user!
我想知道怎样向一个记事本或者其他什么可输入文件输入文字或功能键(用sendmessage或postmessage)
 
假设你要向一type属性为tform1的窗口发信息,可如下:
UserMessage:cardinal;
UserMessage := RegisterWindowMessage('System Wide User Defined Message');
SendMessage(FindWindow('TForm1','RegisterMessage Get Example'),
UserMessage, 0, 0);
 

var
hwd: HWND;
txt: pchar;
begin
txt := 'test';
hwd := FindWindowEx(FindWindow('NotePad',nil),0,'Edit',nil);
if hwd <> 0 then
begin
SendMessage(hwd, WM_SETTEXT, 0,lparam(txt));
end
else
showMessage('记事本没打开');
end;
 
procedure TForm1.Button1Click(Sender: TObject);
var
hwd: HWND;
txt: pchar;
i:integer;
begin
hwd := FindWindowEx(FindWindow('NotePad',nil),0,'Edit',nil);
if hwd = 0 then
begin
showMessage('记事本没打开');
exit;
end;
txt := '11这是一行中文';
for i:=1 to length(txt) do
postMessage(hwd, WM_char,ord(txt),1);

end;
 
谢谢各位。可是我想知道的是如何向窗体模拟按一次F1或其他的功能键。谢谢!
FindWindowEx(FindWindow('NotePad',nil),0,'Edit',nil);
还有上面这句为什么要用FindWindowEx(FindWindow
不直接用FindWindow(‘’,‘’)呢?




 
各位给的代码都不能传送汉字,为什么?
 
to miss9642,我这里是可以的。你是什么系统?

可以这样试一下:
var
S : String;
W : WideChar;
begin
S := '好';
W := WideString(S)[1];
...
SendMessage(wnd, WM_CHAR, ord(W), 0);
end;
 
procedure TForm1.Button1Click(Sender: TObject);
var
wnd: Hwnd;
begin
wnd := FindWindow('notepad', nil);
if wnd<>0 then
begin
wnd := FindWindowEx(wnd,0,'Edit',nil);
PostMessage(wnd, WM_KEYDOWN, VK_F1, 0);
end
else ShowMessage('notepad not find');
end;
 
我用的是win2k,在win2k下面不行吗?(我是用的win2k),谢谢各位!
 
to miss9642:我用的也是win2k,怎么我这儿好好的?
 
to zw84611:真的是不行,我也正奇怪为什么,不论怎样,都谢谢你
 
如果想一个程序里发送一串文字怎么办?

比如说有一个程序里面有很多文本框.........

怎么办?
 
后退
顶部