Delphi 我想获得进程句柄,怎么每次都变化

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Delphi 我想获得进程句柄,怎么每次都变化相关的知识,希望对你有一定的参考价值。

var id : HWnd; pid : Thandle;beginid := FindWindow(nil,pchar(Edit1.Text)); //获取窗口句柄if id > 0 thenbeginGetWindowThreadProcessId(id,pid); //获取进程PIDpp := OpenProcess(PROCESS_ALL_ACCESS,false,pid); //获取进程句柄label8.Caption := '连接状态 = 连接成功';label6.Caption := inttostr(id);label5.Caption := inttostr(pid);label7.Caption := inttostr(pp);end;if id = 0 thenbeginlabel8.Caption := '连接状态 = 连接失败';label3.Caption := '0';Timer1.Enabled := false; end;end;每次这个OpenProcess(PROCESS_ALL_ACCESS,false,pid); 返回值都是变来变去的怎么回事

这是正常的,因为我们每次获得的都是快照,所以每次都不同,但可以正常操作进程。 参考技术A 进行句柄,当然每次运行会有变化啊! 参考技术B 句柄不是一尘不变的。

delphi获取窗体的句柄

两个独立的问题。
1.我想用ShellExecute命令运行外部程序(带有窗体),同时想获得这个窗体的句柄。补充:在实际中我想多次打开同个外部程序,并想通过句柄区分它们
2.在外部程序运行到指定的时候,执行某一条命令。
补充:比如,外部程序完全打开需要一定的时间,我想等其完全打开后再执行某一条语句。
谢谢了

参考技术A 要获取窗体句柄,必须createprocess,WaitForSingleObject等待结束后通过findwindow查找得到,你可以根据标题或者窗体类获得 参考技术B 两个程序都是自己写的吗?是的话弄个mutex启动后设置? 参考技术C 你百度一下delphi createprocess吧,你说的问题都可以用它解决?追问

谢谢你,我找了,通过参数lpProcessInformation获得进程的句柄,再通过WaitForSingleObject设置等待的时间实现了第二个目的。 但是createprocess中的参数lpProcessInformation只有进程和当前线程的句柄,还是没有窗体的句柄,请问怎么获得窗体的句柄,麻烦说详细点。 而且我发现用createprocess同时打开两次某一个外部程序,参数lpProcessInformation的hProcess和hThread在两次中是相同的,起不到区分打开先后的作用。

以上是关于Delphi 我想获得进程句柄,怎么每次都变化的主要内容,如果未能解决你的问题,请参考以下文章

delphi获取窗体的句柄

delphi 知道路径和进程如何获取窗口句柄?

DELPHI 通過窗口句柄或窗口标题得到进程句柄

DELPHI 通過窗口句柄或窗口标题得到进程句柄

如何获取窗体中组件的句柄

一个进程有很多窗口,怎么取这个进程的下所有窗口句柄