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.
     
     

  • 相关阅读:
    查询记录时rs.previous()的使用
    Cocos2d-x中由sprite来驱动Box2D的body运动(用来制作平台游戏中多变的机关)
    vim经常使用命令总结
    微信公众号:码农的世界
    RHEL5 X86-64上安装Oracle 11gR2演示样例与总结
    JavaScript中获取当前项目的绝对路径
    thinkphp内置标签简单讲解
    function $(id) {}表示什么函数
    表单实例(判断两次密码是否一致)
    thinkphp模板继承
  • 原文地址:https://www.cnblogs.com/zhqian/p/9994619.html
Copyright © 2011-2022 走看看