AdmiralAlkex Posted August 8, 2011 Share Posted August 8, 2011 To use this you need KB2533623 installed (Win7/WinVista)Links to the functions:SetDefaultDllDirectoriesAddDllDirectoryRemoveDllDirectoryUDF:expandcollapse popup#cs ---------------------------------------------------------------------------- AutoIt Version: 3.3.6.1 (stable) Author: Alexander Samuelsson AKA AdmiralAlkex Script Function: See http://support.microsoft.com/kb/2533623 for details #ce ---------------------------------------------------------------------------- Global Const $LOAD_LIBRARY_SEARCH_APPLICATION_DIR = 0x00000200 Global Const $LOAD_LIBRARY_SEARCH_DEFAULT_DIRS = 0x00001000 Global Const $LOAD_LIBRARY_SEARCH_SYSTEM32 = 0x00000800 Global Const $LOAD_LIBRARY_SEARCH_USER_DIRS = 0x00000400 #cs Specifies a default set of directories to search when the calling process loads a DLL. This search path is used when LoadLibraryEx is called with no LOAD_LIBRARY_SEARCH flags. http://msdn.microsoft.com/en-us/library/hh310515(v=VS.85).aspx Return Value If the function succeeds, the return value is nonzero. If the function fails, the return value is zero. To get extended error information, call GetLastError. #ce Func _SetDefaultDllDirectories($iDirectoryFlags) $aRet = DllCall("Kernel32.dll", "int", "SetDefaultDllDirectories", "DWORD", $iDirectoryFlags) If @error Then Return SetError(@error, 0, 0) Return $aRet[0] EndFunc #cs Adds a directory to the process DLL search path. http://msdn.microsoft.com/en-us/library/hh310513(v=VS.85).aspx Return Value If the function succeeds, the return value is an opaque pointer that can be passed to RemoveDllDirectory to remove the DLL from the process DLL search path. If the function fails, the return value is zero. To get extended error information, call GetLastError. #ce Func _AddDllDirectory($sNewDirectory) $aRet = DllCall("Kernel32.dll", "ptr", "AddDllDirectory", "wstr", $sNewDirectory) If @error Then Return SetError(@error, 0, 0) Return $aRet[0] EndFunc #cs Removes a directory that was added to the process DLL search path by using AddDllDirectory. http://msdn.microsoft.com/en-us/library/hh310514(VS.85).aspx Return Value If the function succeeds, the return value is nonzero. If the function fails, the return value is zero. To get extended error information, call GetLastError. #ce Func _RemoveDllDirectory($pCookie) $aRet = DllCall("Kernel32.dll", "int", "RemoveDllDirectory", "ptr", $pCookie) If @error Then Return SetError(@error, 0, 0) Return $aRet[0] EndFuncExample:#include "SetDefaultDllDirectories UDF.au3" ;Some random dll we can test DllOpen on $sDll = "advpack.dll" _DLL() _SetDefaultDllDirectories($LOAD_LIBRARY_SEARCH_USER_DIRS) _DLL() $pCookie = _AddDllDirectory(@SystemDir) _DLL() _RemoveDllDirectory($pCookie) _DLL() _SetDefaultDllDirectories($LOAD_LIBRARY_SEARCH_DEFAULT_DIRS) _DLL() Func _DLL($Whatever2 = @ScriptLineNumber) $hDLL = DllOpen($sDll) _CW($hDLL, $Whatever2) DllClose($hDLL) EndFunc Func _CW($Whatever1, $Whatever2 = @ScriptLineNumber, $Whatever3 = @error, $Whatever4 = @extended) ConsoleWrite("(" & $Whatever2 & ") :" & " /Current@Error:" & $Whatever3 & " /Current@Extended:" & $Whatever4 & " /VarGetType:" & VarGetType($Whatever1) & " /Value:" & $Whatever1 & @CRLF) EndFuncWindows XP (SP1) has the similar (but much simpler!!) SetDllDirectory.UDF/Example:expandcollapse popup#cs ---------------------------------------------------------------------------- AutoIt Version: 3.3.6.1 (stable) Author: Alexander Samuelsson AKA AdmiralAlkex Script Function: See http://msdn.microsoft.com/en-us/library/ms686203(v=VS.85).aspx for details #ce ---------------------------------------------------------------------------- #cs ;Example ;Some random dll we can test DllOpen on $sDll = "bnts.dll" $sDllPath = @WindowsDir & "\Help" _DLL() _SetDllDirectory($sDllPath) _DLL() _SetDllDirectory("") _DLL() Func _DLL($Whatever2 = @ScriptLineNumber) $hDLL = DllOpen($sDll) _CW($hDLL, $Whatever2) DllClose($hDLL) EndFunc Func _CW($Whatever1, $Whatever2 = @ScriptLineNumber, $Whatever3 = @error, $Whatever4 = @extended) ConsoleWrite("(" & $Whatever2 & ") :" & " /Current@Error:" & $Whatever3 & " /Current@Extended:" & $Whatever4 & " /VarGetType:" & VarGetType($Whatever1) & " /Value:" & $Whatever1 & @CRLF) EndFunc #ce #cs Adds a directory to the search path used to locate DLLs for the application. http://msdn.microsoft.com/en-us/library/ms686203(v=VS.85).aspx Return Value If the function succeeds, the return value is nonzero. If the function fails, the return value is zero. To get extended error information, call GetLastError. #ce Func _SetDllDirectory($sPathName) $aRet = DllCall("Kernel32.dll", "int", "SetDllDirectoryW", "wstr", $sPathName) If @error Then Return SetError(@error, 0, 0) Return $aRet[0] EndFunc .Some of my scripts: ShiftER, Codec-Control, Resolution switcher for HTC ShiftSome of my UDFs: SDL UDF, SetDefaultDllDirectories, Converting GDI+ Bitmap/Image to SDL Surface Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now