zoukankan      html  css  js  c++  java
  • Delphi的TService 服务路径获取 Dll中获取文件路径

    研究delphi服务的路径,试了好几个方法 ,都没取出来,最后发现,要采用取DLL路径的方法


    //一、获取Dll自身路径

    //1)方法一:

    Function GetDllPath(sDllName:string):string;

    var
    ModuleFileName:array[0..255] of char;

    begin
    //{取得dll的实际位置}
    GetModuleFileName(GetModuleHandle(sDllName), @ModuleFileName[0], SizeOf(ModuleFileName));
    Result := ModuleFileName;
    end;

    //2)方法二:

    Function GetDllPath:string;

    var
    ModuleName:string;
    begin
    SetLength(ModuleName, 255);
    //取得Dll自身路径
    GetModuleFileName(HInstance, PChar(ModuleName), Length(ModuleName));
    Result := PChar(ModuleName);

    end;


    // 二、获取调用程序路径

    Function GetExecutPath:string;

    var
    ModuleName:string;
    begin
    SetLength(ModuleName, 255);
    //取得调用Dll程序的路径
    GetModuleFileName(GetModuleHandle(nil), PChar(ModuleName), Length(ModuleName));
    Result := PChar(ModuleName);

    end;

    点击打开链接

    Delphi遍历进程并获取进程路径

    获得进程可执行文件的路径: GetModuleFileNameEx, GetProcessImageFileName, QueryFullProcessImageName

    功能模块改良版:

    unit UntModulePath;

    interface

    uses
    Windows, SysUtils, PsAPI;

    //获取EXE、Dll模块名称 或 路径
    function GetModuleFileNameDef(GetPath: Boolean = True): string;

    function GetWindowProcHandle(Wnd: HWND; GetPath: Boolean = True): string;

    var
    DllPath: string;

    implementation

    function GetModuleFileNameDef(GetPath: Boolean = True): string;
    var
    ModuleName: array [0..MAX_PATH - 1]of Char;
    begin
    FillChar(ModuleName, Length(ModuleName), 0);
    //取得Dll自身路径
    GetModuleFileName(HInstance, ModuleName, Length(ModuleName));

    if GetPath then
    Result := ExtractFilePath(StrPas(ModuleName))
    else
    Result := StrPas(ModuleName);
    end;


    function GetWindowProcHandle(Wnd: HWND; GetPath: Boolean = True): string;
    var
    pID: Cardinal;
    hProc: THandle;
    ModuleName: array [0..MAX_PATH - 1]of Char;
    begin
    Result := '';
    if Wnd= 0 then
    Exit;

    FillChar(ModuleName, Length(ModuleName), 0);

    GetWindowThreadProcessId(Wnd, pID);
    hProc:= OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ, False, pID);
    if hProc= 0 then
    Exit;
    try
    GetModuleFileNameEx(hProc, 0, ModuleName, Length(ModuleName));
    finally
    CloseHandle(hProc);
    end;
    if GetPath then
    Result := ExtractFilePath(StrPas(ModuleName))
    else
    Result := StrPas(ModuleName);
    end;

    initialization
    DllPath:= GetModuleFileNameDef;

    end.
     
     

  • 相关阅读:
    C#中WinForm程序退出方法技巧(转载)
    webbrowser访问网站禁止弹窗
    (转载)ASP.NET三大核心对象及基础功能解析
    webBrowser调用外部js文件和js函数(转载)
    java IO流
    java线程状态,优先级
    java线程
    Collection接口,Map接口
    序列化和反序列化
    JsonUtil自定义
  • 原文地址:https://www.cnblogs.com/zhqian/p/9994619.html
Copyright © 2011-2022 走看看