请教Delphi大神,如何获取当前程序所在路径外部程序,焦点所在的句柄

如何获取自己在程序中运行的外部exe的handle?_delphi教程-虚拟主机资讯|虚拟主机动态
产品服务快速通道
----------------
==域名注册==
英文域名注册
中文域名注册
==网站推广==
==虚拟主机==
----------------
双线路虚拟主机
基本型虚拟主机
商用型虚拟主机
论坛型虚拟主机
功能型虚拟主机
Vip合租虚拟主机
虚拟主机性能对比
虚拟主机免费试用
机房速度测试
----------------
==租用托管==
服务器租用
----------------
==企业邮局==
购买企业邮局
----------------
==付款方式==
----------------
==联系我们==
您当前位置:->-> ->
如何获取自己在程序中运行的外部exe的handle?_delphi教程
作者:网友供稿
  西部数码-全国虚拟主机10强!20余项管理功能,全国领先!第6代双线路虚拟主机,南北访问畅通无阻!可在线rar解压,自动数据恢复设置虚拟目录等.免费赠送访问统计,企业邮局.Cn域名注册10元/年,480元起,免费试用7天,满意再付款!P4主机租用799元/月.月付免压金!
文章页数:&
这是我在一个论坛的讨论稿,我想这些情况在实践程序设计过程中会常碰到,所以就将这些讨论资料写了下来:
作者:e梦缘
请问用什么方法可以运行一个外部的EXE并返回它的Handle?WinExec 返回不是该EXE的HandleShellExecute, ShellExecuteEx 也不是CreateProcess 返回的是 Process Handle到底要如何才可以返回和 GetWindow 所返回的一样的 Handle?
可以用FindWindow()函数,它能够解决这个问题,它有两个参数:lpClassName:程序的类名;lpWindowName:程序窗体的标题。
procedure TForm1.Button1Click(Sender: TObject);beginShellExecute(handle,open,notepad.exe,nil,nil,SW_ShowNormal);
procedure TForm1.Button2Click(Sender: TObject);varExeHandle:TBegin//获得句柄ExeHandle:=FindWindow(notepad,nil);//);//返回句柄//关闭程序if ExeHandle&&0 thenSendMessage(ExeHandle,WM_Close,0,0)ElseApplication.MessageBox(没有打开"记事本"程序!,提示,MB_IconInformation+MB_OK);
?FindWindow() 方法不是我想要的,因为这里的lpWindowName 具有不确定性,没有办法准确地找到。我希望能在执行这支外部程序里就可以得到它的 Handle.比如有没有办法,通过Process Handle得到它有 Application Handle 以及 MainForm Handle
您可以通过lpClassName:程序的类名来准确地找到。
ExeHandle:=FindWindow(notepad,nil);//返回句柄
function ExecuteFile(const FileName, Params, DefaultDir: S
ShowCmd: Integer): TH
zFileName, zParams, zDir: array[0..79] of C
Result := ShellExecute(Application.MainForm.Handle, nil,
StrPCopy(zFileName, FileName), StrPCopy(zParams, Params),
StrPCopy(zDir, DefaultDir), ShowCmd);
procedure TForm1.Button3Click(Sender: TObject);varhwd:begin
hwd:=ExecuteFile(notepad.exe,,,SW_ShowNormal);if hwd&&0 then showmessage(哈哈~~+#13+我取到handle了,是&&&+inttostr(hwd));
谢谢您的热心帮助,但ShellExecute得到的并不是Handle用FindWindow得到的才是真正的Handle你可以试一下.最简单的方法就是向你得到的Handle发一个WM_QUIT消息,看它是否会被关闭.如:SendMessage(AHandle, WM_QUIT, 0, 0);
我看了很多delphi的资料,好像只有FindWindow()函数是 可以实现的,至于是否还有其它的方法,我 不太清楚!
最后结果:
我已从大富翁论坛上得到了满意的结论了,在这和大家分享一下:(大富翁论坛: )
typePEnumInfo = ^TEnumITEnumInfo = recordProcessID : DWORD;HWND : TH
function EnumWindowsProc(Wnd: DWORD; var EI: TEnumInfo): BvarPID : DWORD;beginGetWindowThreadProcessID(Wnd, @PID);Result := (PID && EI.ProcessID) or(not IsWindowVisible(WND)) or(not IsWindowEnabled(WND));
if not result then EI.HWND := WND;
function FindMainWindow(PID: DWORD): DWORD;varEI : TEnumIbeginEI.ProcessID := PID;EI.HWND := 0;EnumWindows(@EnumWindowsProc, Integer(@EI));Result := EI.HWND;
procedure TForm1.Button1Click(Sender: TObject);varSI : TStartupIPI : TProcessIH : THS : SbeginZeroMemory(@SI, SizeOf(SI));ZeroMemory(@PI, SizeOf(PI));SI.cb := SizeOf(SI);if CreateProcess(nil,CALC.EXE, nil, nil, FALSE, 0 ,nil,nil, SI, PI) thenbegin//注意!WaitForInputIdle(PI.hProcess, INFINITE);
H := FindMainWindow(PI.dwProcessID);if H & 0 thenbeginSetLength(S, 255);GetWindowText(H, PChar(S), 255);SetLength(S, StrLen(PChar(S)));ShowMessage(S);
CloseHandle(PI.hProcess);CloseHandle(PI.hThread);end.
文章整理:西部数码--专业提供、服务
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!
文章页数:&
??????????
??????????
版权申明:本站文章均来自网络,如有侵权,请联系我们,我们收到后立即删除,谢谢!
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有。
版权所有 西部数码(www.west.cn)
CopyRight (c)
west263.com all right reserved.
公司地址:四川省成都市金牛区一环路北一段99号环球广场24楼 邮编:610031
电话总机:028-08 38
售前咨询:总机转201 202 203 204 206 208
售后服务:总机转211 212 213 214
财务咨询:总机转224 223 传真:028- 财务QQ:
售前咨询QQ:2182518
售后服务QQ: 上传我的文档
 上传文档
 下载
 收藏
粉丝量:38
该文档贡献者很忙,什么也没留下。
 下载此文档
正在努力加载中...
Delphi获取句柄并发送消息
下载积分:400
内容提示:Delphi获取句柄并发送消息
文档格式:PDF|
浏览次数:386|
上传日期: 23:31:17|
文档星级:
全文阅读已结束,如果下载本文需要使用
 400 积分
下载此文档
该用户还上传了这些文档
Delphi获取句柄并发送消息
关注微信公众号delphi下,通过已知pid,如何获取这个程序的句柄名称。_百度知道
delphi下,通过已知pid,如何获取这个程序的句柄名称。
delphi下,通过已知pid,如何获取这个程序的句柄名称。取出后的效果,就像windows资源监视器中,“关联的句柄”中,“句柄名称”列那样。请教高手,实在弄不出来了。最好能附上代码,谢谢。
我有更好的答案
这个和delphi没关系,请参考《windows 核心编程》,主要在于win32api的调用,Delphi上面自带也有api的帮助的,你可以找一找。 来自梦想软件工作室,希望采纳,谢谢!
采纳率:90%
为您推荐:
其他类似问题
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。Delphi获取其它进程窗口句柄的三种方法_百度文库
您的浏览器Javascript被禁用,需开启后体验完整功能,
享专业文档下载特权
&赠共享文档下载特权
&10W篇文档免费专享
&每天抽奖多种福利
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
Delphi获取其它进程窗口句柄的三种方法
&&Delphi获取其它进程窗口句柄的三种方法
阅读已结束,下载本文需要
想免费下载更多文档?
定制HR最喜欢的简历
你可能喜欢delphi 如何获取外部程序的窗体大小(宽高,以及屏幕坐标)
[问题点数:20分]
本版专家分:0
CSDN今日推荐
本版专家分:15859
2014年10月 Delphi大版内专家分月排行榜第一2012年12月 Delphi大版内专家分月排行榜第一
2012年7月 Delphi大版内专家分月排行榜第二
2013年8月 Delphi大版内专家分月排行榜第三2012年8月 Delphi大版内专家分月排行榜第三2012年6月 Delphi大版内专家分月排行榜第三
本版专家分:15859
2014年10月 Delphi大版内专家分月排行榜第一2012年12月 Delphi大版内专家分月排行榜第一
2012年7月 Delphi大版内专家分月排行榜第二
2013年8月 Delphi大版内专家分月排行榜第三2012年8月 Delphi大版内专家分月排行榜第三2012年6月 Delphi大版内专家分月排行榜第三
本版专家分:2782
本版专家分:3485
本版专家分:2423
本版专家分:1
本版专家分:1
本版专家分:1
本版专家分:48159
2018年5月 Delphi大版内专家分月排行榜第一2018年2月 Delphi大版内专家分月排行榜第一2018年1月 Delphi大版内专家分月排行榜第一2017年12月 Delphi大版内专家分月排行榜第一2017年8月 Delphi大版内专家分月排行榜第一2017年7月 Delphi大版内专家分月排行榜第一2017年5月 Delphi大版内专家分月排行榜第一2017年3月 Delphi大版内专家分月排行榜第一2017年2月 Delphi大版内专家分月排行榜第一2016年12月 Delphi大版内专家分月排行榜第一2016年11月 Delphi大版内专家分月排行榜第一2016年10月 Delphi大版内专家分月排行榜第一2016年9月 Delphi大版内专家分月排行榜第一2016年8月 Delphi大版内专家分月排行榜第一2016年7月 Delphi大版内专家分月排行榜第一2016年6月 Delphi大版内专家分月排行榜第一2016年5月 Delphi大版内专家分月排行榜第一2016年4月 Delphi大版内专家分月排行榜第一2016年3月 Delphi大版内专家分月排行榜第一2016年2月 Delphi大版内专家分月排行榜第一2016年1月 Delphi大版内专家分月排行榜第一2015年12月 Delphi大版内专家分月排行榜第一2015年11月 Delphi大版内专家分月排行榜第一2015年10月 Delphi大版内专家分月排行榜第一2015年9月 Delphi大版内专家分月排行榜第一2015年8月 Delphi大版内专家分月排行榜第一2015年7月 Delphi大版内专家分月排行榜第一2015年6月 Delphi大版内专家分月排行榜第一2015年5月 Delphi大版内专家分月排行榜第一2015年4月 Delphi大版内专家分月排行榜第一2015年3月 Delphi大版内专家分月排行榜第一2015年2月 Delphi大版内专家分月排行榜第一2015年1月 Delphi大版内专家分月排行榜第一2014年12月 Delphi大版内专家分月排行榜第一2014年11月 Delphi大版内专家分月排行榜第一
2017年11月 Delphi大版内专家分月排行榜第二2017年4月 Delphi大版内专家分月排行榜第二2017年1月 Delphi大版内专家分月排行榜第二2014年10月 Delphi大版内专家分月排行榜第二2014年9月 Delphi大版内专家分月排行榜第二
本版专家分:0
本版专家分:135
本版专家分:0
本版专家分:10
匿名用户不能发表回复!|
其他相关推荐}

我要回帖

更多关于 c 获取程序所在目录 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信