ShellExecute打开记事本后,无法准确得到窗口句柄 ( 积分: 100 )

  • 主题发起人 主题发起人 创意人生
  • 开始时间 开始时间

创意人生

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;
 
用CreateProcess或者ShellExecuteEx 打开就可控制.
 
接受答案了.
 

Similar threads

后退
顶部