读书人

请教如何用API获取当前程序文件的全路

发布时间: 2012-05-02 15:36:04 作者: rapoo

请问怎么用API获取当前程序文件的全路径名
如题,需要支持UNICODE,最好还能分别获得所在目录的全路径名和文件名(不含路径)

[解决办法]

VB code
Option ExplicitConst CSIDL_ADMINTOOLS As Long = &H30             '(用户)\开始菜单\程序\系统管理工具Const CSIDL_ALTSTARTUP As Long = &H1D             '未本地化的启动Const CSIDL_APPDATA As Long = &H1A                '(用户)\应用程序的数据Const CSIDL_BITBUCKET As Long = &HA               '(桌面)\回收站Const CSIDL_CONTROLS As Long = &H3                '我的电脑\控制面板Const CSIDL_COOKIES As Long = &H21Const CSIDL_DESKTOP As Long = &H0                 '桌面Const CSIDL_DESKTOPDIRECTORY As Long = &H10       '(用户)\桌面Const CSIDL_FAVORITES As Long = &H6               '(用户)\个性化设置Const CSIDL_FONTS As Long = &H14                  'windows\字体Const CSIDL_HISTORY As Long = &H22Const CSIDL_INTERNET As Long = &H1                'IE(桌面上的图标Const CSIDL_INTERNET_CACHE As Long = &H20         '因特网缓存文件夹Const CSIDL_LOCAL_APPDATA  As Long = &H1C         '(用户)\本地设置\应用程序数据Const CSIDL_DRIVES As Long = &H11                 '我的电脑Const CSIDL_MYPICTURES As Long = &H27             'C:\Program Files\My PicturesConst CSIDL_NETHOOD As Long = &H13                '(用户)\网上邻居中的元素Const CSIDL_NETWORK As Long = &H12                '网上邻居Const CSIDL_PRINTERS As Long = &H4                '我的电脑\打印机Const CSIDL_PRINTHOOD As Long = &H1B              '(用户)\打印机连接Const CSIDL_PERSONAL As Long = &H5                '我的文档Const CSIDL_PROGRAM_FILES As Long = &H26          'C:\Program FilesConst CSIDL_PROGRAM_FILESX86 As Long = &H2A       'x86 apps (Alpha)的程序文件目录Const CSIDL_PROGRAMS As Long = &H2                '开始菜单\程序Const CSIDL_PROGRAM_FILES_COMMON As Long = &H2B   'Program Files\CommonConst CSIDL_PROGRAM_FILES_COMMONX86 As Long = &H2C 'RISC上的x86 \Program Files\CommonConst CSIDL_RECENT As Long = &H8                  '(用户)\最近记录目录Const CSIDL_SENDTO As Long = &H9                  '(用户)\发送到目录Const CSIDL_STARTMENU As Long = &HB               '(用户)\开始菜单Const CSIDL_STARTUP As Long = &H7                 '开始菜单\程序\启动Const CSIDL_SYSTEM As Long = &H25                 'system文件夹Const CSIDL_SYSTEMX86 As Long = &H29              'x86 apps (Alpha)的system文件夹Const CSIDL_TEMPLATES As Long = &H15Const CSIDL_PROFILE As Long = &H28                '用户概貌文件夹Const CSIDL_WINDOWS As Long = &H24                'Windows目录或SYSROOT()Const CSIDL_COMMON_ADMINTOOLS As Long = &H2F      '(所有用户)\开始菜单\程序\系统管理工具Const CSIDL_COMMON_ALTSTARTUP As Long = &H1E      '未本地化的通用启动Const CSIDL_COMMON_APPDATA As Long = &H23         '(所有用户)\应用程序数据Const CSIDL_COMMON_DESKTOPDIRECTORY As Long = &H19 '(所有用户)\桌面Const CSIDL_COMMON_DOCUMENTS As Long = &H2E       '(所有用户)\文档Const CSIDL_COMMON_FAVORITES As Long = &H1F       '(所有用户)\设置Const CSIDL_COMMON_PROGRAMS As Long = &H17        '(所有用户)\程序Const CSIDL_COMMON_STARTMENU As Long = &H16       '(所有用户)\开始菜单Const CSIDL_COMMON_STARTUP As Long = &H18         '(所有用户)\启动Const CSIDL_COMMON_TEMPLATES As Long = &H2D       '(所有用户)\临时'Api函数Declare Function SHGetFolderPath Lib "shfolder.dll" Alias "SHGetFolderPathA" _    (ByVal hWndOwner As Long, ByVal nFolder As Long, _     ByVal hToken As Long, ByVal dwReserved As Long, _     ByVal lpszPath As String) As Long'其他常量Const CSIDL_FLAG_CREATE = &H8000&Const CSIDL_FLAG_DONT_VERIFY = &H4000Const CSIDL_FLAG_MASK = &HFF00Const SHGFP_TYPE_CURRENT = &H0Const SHGFP_TYPE_DEFAULT = &H1'自写调用函数Function GetFolderPath(hWndOwner As Long, CSIDL As Long) As String   Dim sPath As String * 255   If SHGetFolderPath(hWndOwner, CSIDL, 0&, SHGFP_TYPE_CURRENT, sPath) = 0 Then       GetFolderPath = Left$(sPath, InStr(sPath, Chr$(0)) - 1)   End IfEnd Function
[解决办法]
VB code
Option ExplicitPrivate Const MAX_PATH = 255Private Declare Function GetModuleFileNameW Lib "kernel32" (ByVal hModule As Long, ByVal lpFileName As Long, ByVal nSize As Long) As LongPrivate Function GetModuleFileName(ByVal hModule As Long, ByRef lpFileName As String, ByVal nSize As Long) As Long    GetModuleFileName = GetModuleFileNameW(hModule, StrPtr(lpFileName), nSize)End FunctionPrivate Sub Form_Load()    'KPD-Team 2000    'URL: http://www.allapi.net/    'E-Mail: KPDTeam@Allapi.net    Dim ModuleName As String, FileName As String, hInst As Long    'create a buffer    ModuleName = String$(MAX_PATH, Chr$(0))    'get the hInstance application:    hInst = App.hInstance   ' GetWindowLong(Me.hwnd, GWW_HINSTANCE)    'get the ModuleFileName:    'enter the following two lines as one, single line:    ModuleName = Left$(ModuleName, GetModuleFileName(hInst, ModuleName, Len(ModuleName)))    'set graphics mode to persistent    Me.AutoRedraw = True    'show the module filename    Me.Print "Module Filename: " + ModuleName    Me.Print "Dir: " + ExtractFileDir(ModuleName)    Me.Print "FileName: " + ExtractFileName(ModuleName)End SubPrivate Function ExtractFileDir(ByVal FileName As String) As String    ExtractFileDir = Left$(FileName, InStrRev(FileName, "\") - 1)End FunctionPrivate Function ExtractFileName(ByVal FileName As String) As String    ExtractFileName = Mid$(FileName, InStrRev(FileName, "\") + 1)End Function 

读书人网 >VB

热点推荐