winexec是16位代码,,有时会被杀软误报。。;另外winexec不能指定默认目录,有时启动的外部程序会出错!
在使用,ShellExecute 启动外部程序的时候,,如果这个外部程序不是和你的程序在同一个目录里,一定要指定一下,默认目录。例如,你启动的是 c:\windows\2.exe ,加上他的默认目录,如下:
ShellExecute(Handle,'open','拆好c:\windows\2.exe', nil, {这里写2.exe的默认目录}'旅中铅c:\windows\', SW_NORMAL)
你的意思是不是,象你这样写,就是先启动hypmain.exe 完以后才启动的2.exe!你想在同一时间启动这两个程序!
其实你就直接写成如下的,,时间间隔也就是几毫秒而已:
procedure TForm1.XPButton2Click(Sender: TObject)
begin
if (suiedit1.Text='1234'培纯)and(suiedit2.Text='1234') then
begin
ShellExecute(self.Handle,'open','internet\hypmain.exe', nil, nil, SW_NORMAL)
ShellExecute(self.Handle,'open','c:\windows\2.exe ', nil, nil, SW_NORMAL)
end
else
begin
Showmessage('输入的用户名或密码错误!')
end
end
首先确保你的程序在运行时拥有足够的权限,比如使用管理员运行。通过FindWindow函数找到你想要控制的程序,比如通过主窗口的名称或者类名,如果你不知道,可以用Spy++这样的小工具来找。
然后继续通过FindWindow在父窗口中通过WindowsClass名找到你要控制的Edit,函数将会返回一个窗口句柄。
然后你通过SendMessage(hwnd, WM_CHAR, .....)来向窗口发送字符。
WM_CHAR的具体含义可以查阅MSDN或者Delphi 自带的Win32帮助。
如果上述过程你觉得虚型蔽繁琐,可以通过Spy++直接获得租乱Edit的句柄。但是这样的话程序没有通用性,因为程序每次运行时窗口的句柄都是差州不一样的,spy++只能获得你这一次运行的句柄。你自己使用FindWindow则可以每次都做查找。
输入一、控件输入Edit、DBEdit、族液裂MaskEdit、Memo、RichEdit、StringGrid、DBGrid等控件埋伏;
二、使用InputBox('标题','输入的兆闭项目','请输入内容')
输出
一、控件输出Edit、DBEdit、MaskEdit、Memo、RichEdit、StringGrid、DBGrid等控件也支持输出;
二、showmessage('这是输出的内容')
application.messagebox('这是输出的内容','提示',mb_ok)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)