delphi根据窗口句柄获取所在程序路径


本文整理自网络,侵删。

 代码文件:
--------------------------------------------------------------------------------

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

uses PsAPI; {GetModuleFileNameEx 函数需要它}

{根据窗口句柄获取所在程序路径的函数}
function GetProcessExePath(h: HWND): string;
var
pid: Cardinal;
pHandle: THandle;
buf: array[0..MAX_PATH] of Char;
begin
{先获取进程 ID}
GetWindowThreadProcessId(h, @pid);
{再获取进程句柄}
pHandle := OpenProcess(PROCESS_ALL_ACCESS, False, pid);
{获取进程路径}
GetModuleFileNameEx(pHandle, 0, buf, Length(buf));
CloseHandle(pHandle);
Result := buf;
end;

{测试当前程序}
procedure TForm1.Button1Click(Sender: TObject);
var
path: string;
begin
path := GetProcessExePath(Handle);
ShowMessage(path);
end;

{测试记事本 - 需要随便打开一个记事本}
procedure TForm1.Button2Click(Sender: TObject);
var
wh: HWND;
path: string;
begin
wh := FindWindow('Notepad', nil);
path := GetProcessExePath(wh);
ShowMessage(path);
end;

end.

相关阅读 >>

Delphi 创建文件夹并打开

Delphi以鼠标为中心缩放图片以及拖动(采用区域抠图拉伸的方式)

Delphi 遍历系统窗口标题可用于反外挂反破解

Delphi 无窗体无界面exe怎么做?

Delphi 的内存操作函数(2): 给数组指针分配内存

Delphi 加载大文件显示进度条

Delphi 关于多语言:如何获取当前系统语言

Delphi 创建进程时指定其父进程

Delphi 截取绝对路径的文件名

Delphi 获取internet缓存文件

更多相关阅读请进入《Delphi》频道 >>



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...