Stuart McLachlan
stuart at lexacorp.com.pg
Tue Jul 1 08:19:33 CDT 2003
On 1 Jul 2003 at 8:59, Griffiths, Richard wrote: > Hi > > Does anyone have the equivalent code snipet to get the same functionality as > SysCmd(acSysCmdAccessDir) from within a VB app > I had something in my toolbox which looked in the registry to get the "Shell Open" command for any registered file extension. With a bit of tweaking, I came up with this which works for me: Public Declare Function RegOpenKeyEx Lib "advapi32.dll" Alias "RegOpenKeyExA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal ulOptions As Long, ByVal samDesired As Long, phkResult As Long) As Long Public Declare Function RegQueryValueEx Lib "advapi32.dll" Alias "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, lpData As String, lpcbData As Long) As Long ' Note that if you declare the lpData parameter as String, you must pass it By Value. Public Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long Public Const HKEY_CLASSES_ROOT = &H80000000 Public Const KEY_QUERY_VALUE = &H1 Public Const REG_SZ = 1 Function AccessDir() As String 'Get the executable directory for the current version of MS Access from the registry Dim retval As Long Dim hKey As Long Dim strAppName As String Dim strExtension As String Dim strOpenCommand As String Dim strpathname As String strAppName = Space$(255) strpathname = Space$(255) 'Get the Application name for the current version of Access strExtension = ".mdb" retval = RegOpenKeyEx(HKEY_CLASSES_ROOT, strExtension, 0, KEY_QUERY_VALUE, hKey) retval = RegQueryValueEx(hKey, "", 0, REG_SZ, ByVal strAppName, 256) retval = RegCloseKey(hKey) strAppName = Left$(strAppName, InStr(strAppName, Chr$(0)) - 1) 'Get Open Command for the Access Application strOpenCommand = strAppName & "\shell\Open\command" retval = RegOpenKeyEx(HKEY_CLASSES_ROOT, strOpenCommand, 0, KEY_QUERY_VALUE, hKey) retval = RegQueryValueEx(hKey, "", 0, REG_SZ, ByVal strpathname, 256) retval = RegCloseKey(hKey) 'Extract Application Directory from the Open Command 'First get the full executable path and filename ' assuming executable is quoted which it always is in my experience strpathname = Trim$(Left$(strpathname, InStr(2, strpathname, Chr$(34)))) 'Now strip off the application filename AccessDir = Left$(strpathname, InStrRev(strpathname, "\")) End Function -- Lexacorp Ltd http://www.lexacorp.com.pg Information Technology Consultancy, Software Development,System Support.