创
创意人生
Unregistered / Unconfirmed
GUEST, unregistred user!
我想打开一个记事本,然后在里面输出一些东西,本来以为很简单,但却一直搞不定。
下面的这个代码可以运行,但假如用户自己已经打开一些记事本窗口的话,那么程序输出的文字可能就会输出到用户自己的记事本。请问有什么办法,可以准确的得到ShellExecute打开记事本窗口的句柄吗?
procedure TForm1.Button1Click(Sender: TObject);
var
notepadhandle:thandle;
childhandle,child:thandle;
s:string;
length1:integer;
i:integer;
begin
s:='12345';
length1:=length(s);
i:=1;
if winexec('c:/windows/notepad.exe',SW_NORMAL)>31 then begin
notepadhandle:= findwindow('notepad',nil);
if notepadhandle<>0 then begin
childhandle:=findwindowex(notepadhandle,0,'edit',nil);
if childhandle<>0 then begin
while i<=length1 do begin
if ord(s)>127 then begin
sendmessage(childhandle,WM_CHAR,ord(s),0);
sendmessage(childhandle,WM_CHAR,ord(s[i+1]),0);
i:=i+2;
end else begin
sendmessage(childhandle,WM_CHAR,ord(s),0);
inc(i);
end;
end;
end;
END;
end;
end;
下面的这个代码可以运行,但假如用户自己已经打开一些记事本窗口的话,那么程序输出的文字可能就会输出到用户自己的记事本。请问有什么办法,可以准确的得到ShellExecute打开记事本窗口的句柄吗?
procedure TForm1.Button1Click(Sender: TObject);
var
notepadhandle:thandle;
childhandle,child:thandle;
s:string;
length1:integer;
i:integer;
begin
s:='12345';
length1:=length(s);
i:=1;
if winexec('c:/windows/notepad.exe',SW_NORMAL)>31 then begin
notepadhandle:= findwindow('notepad',nil);
if notepadhandle<>0 then begin
childhandle:=findwindowex(notepadhandle,0,'edit',nil);
if childhandle<>0 then begin
while i<=length1 do begin
if ord(s)>127 then begin
sendmessage(childhandle,WM_CHAR,ord(s),0);
sendmessage(childhandle,WM_CHAR,ord(s[i+1]),0);
i:=i+2;
end else begin
sendmessage(childhandle,WM_CHAR,ord(s),0);
inc(i);
end;
end;
end;
END;
end;
end;