AnonymousX Posted February 17, 2017 Posted February 17, 2017 Hello, What command would I use to open the following folder directories for: Computer/This PC (windows 7/Windows 10) Libraries\documents Libraries\Pictures I know: Run("Explorer.exe " & $filepath) ShellExecute($filepath) can be used to open folder locations when you type in the full directory such as "C:\Users\%username%\Documents" but I'm trying to figure out how to use these windows short paths. Thanks,
Subz Posted February 17, 2017 Posted February 17, 2017 (edited) Sorry pushed submit by accident, I meant to say Do you mean macros like @DocumentsDir or did you want special folders like: _WinAPI_ShellGetSpecialFolderPath https://msdn.microsoft.com/en-us/library/windows/desktop/bb762494(v=vs.85).aspx Edited February 17, 2017 by Subz
jguinch Posted February 17, 2017 Posted February 17, 2017 (edited) You can also have a look to _WinAPI_ShellGetSpecialFolderPath Oups... I didn't see subz's also mentionned this, sorry Edited February 18, 2017 by jguinch Spoiler Network configuration UDF, _DirGetSizeByExtension, _UninstallList Firefox ConfigurationArray multi-dimensions, Printer Management UDF
AnonymousX Posted February 18, 2017 Author Posted February 18, 2017 21 hours ago, Subz said: Sorry pushed submit by accident, I meant to say Do you mean macros like @DocumentsDir or did you want special folders like: _WinAPI_ShellGetSpecialFolderPath https://msdn.microsoft.com/en-us/library/windows/desktop/bb762494(v=vs.85).aspx Referring to things like @DocumentsDir (Which gives me an error of undefined macro. Guessing I'm missing an #include?) See right now, before a user is allowed to save an address I use: FileExists($inputaddress) to check if the path exists, but in this case if $inputaddress was to be "Libraries\Pictures" this would return 0 (Path/file does not exist). However if I go into windows explore and type "Libraries\Pictures" (or just "Pictures" for that matter) it takes me to C:\Users\(username)\Pictures and will not display the full path it just shows "Libraries\Documents". So I'm trying to find out if there is a way that if the user enters in one of these shorten versions of the file path such as "Libraries\Pictures" the code will be able to recognize this as a true path and will be able to open that file location. With further testing I've discovered that both: ShellExecute("Libraries\Pictures") Run('Explorer.exe ' & "Libraries\Pictures") Don't work either, so I'm starting to think this might be a complicated thing to do for me....
Subz Posted February 18, 2017 Posted February 18, 2017 Sorry, @DocumentsDir should have been - @MyDocumentsDir Libraries are ultimately shortcut files with the extension .library-ms files and can be located in @AppDataDir & '\Microsoft\Windows\Libraries. You can use something like the following and it will open to that location ShellExecute('Explorer.exe', @AppDataDir & '\Microsoft\Windows\Libraries\Pictures.library-Ms') The file itself is actually xml, if you use a parser you can grab the <simplelocation>><url>knownfolder:{Guid} you can view a list of Guids and there locations here: https://msdn.microsoft.com/en-us/library/bb882665(v=vs.110).aspx robertocm 1
benners Posted February 18, 2017 Posted February 18, 2017 (edited) I created a function to do something similar a while ago. You may be able to adapt for your needs. expandcollapse popup#include <WinAPIShellEx.au3> #include <WinAPI.au3> Local $s_FilePath = _Win7_GetKnownFolder('PicturesLibrary') if @error Then MsgBox(0,'DOH!', $s_FilePath) Else MsgBox(0,'Yay Found', 'Path: '& $s_FilePath & @crlf & 'File Exists: ' & FileExists($s_FilePath)) EndIf ; #FUNCTION# ==================================================================================================================== ; Name ..........: _Win7_GetKnownFolder ; Description ...: Retrieves the full path of a known folder ; Syntax ........: _Win7_GetKnownFolder($s_Folder) ; Parameters ....: $s_Folder - A string value denoting the known folder ; Return values .: Success - Returns the full folder path ; Failure - Sets @error to 1 and returns a string for logging ; Remarks .......: Only for Windows Vista and above ; Related .......: _XP_GetSpecialFolder (for XP and lower) ; Link ..........: link http://msdn.microsoft.com/en-us/library/dd378457.aspx ; Example .......: _Win7_GetKnownFolder('CommonPrograms') ; =============================================================================================================================== Func _Win7_GetKnownFolder($s_Folder) ; trimmed list of KnownFolder constants Local $s_Constants = 'CommonPrograms|' & _ ;%ALLUSERSPROFILE%\Microsoft\Windows\Start Menu\Programs 'CommonStartMenu|' & _ ; %ALLUSERSPROFILE%\Microsoft\Windows\Start Menu 'CommonStartup|' & _ ; %ALLUSERSPROFILE%\Microsoft\Windows\Start Menu\Programs\StartUp 'CommonTemplates|' & _ ; %ALLUSERSPROFILE%\Microsoft\Windows\Templates 'Desktop|' & _ ; %USERPROFILE%\Desktop 'Documents|' & _ ; %USERPROFILE%\Documents 'DocumentsLibrary|' & _ ; %APPDATA%\Microsoft\Windows\Libraries\Documents.library-ms 'Favorites|' & _ ; %USERPROFILE%\Favorites 'Fonts|' & _ ; %windir%\Fonts 'Libraries|' & _ ; %APPDATA%\Microsoft\Windows\Libraries 'LocalAppData|' & _ ; %LOCALAPPDATA% (%USERPROFILE%\AppData\Local) 'LocalAppDataLow|' & _ ; %USERPROFILE%\AppData\LocalLow 'Music|' & _ ; %USERPROFILE%\Music 'MusicLibrary|' & _ ; %APPDATA%\Microsoft\Windows\Libraries\Music.library-ms 'PhotoAlbums|' & _ ; %USERPROFILE%\Pictures\Slide Shows 'PicturesLibrary|' & _ ; %APPDATA%\Microsoft\Windows\Libraries\Pictures.library-ms 'Pictures|' & _ ; %USERPROFILE%\Pictures 'Playlists|' & _ ; %USERPROFILE%\Music\Playlists 'Profile|' & _ ; %USERPROFILE% (%SystemDrive%\Users\%USERNAME%) 'ProgramData|' & _ ; %ALLUSERSPROFILE% (%ProgramData%, %SystemDrive%\ProgramData) 'ProgramFiles|' & _ ; %ProgramFiles% (%SystemDrive%\Program Files) 'ProgramFilesX64|' & _ ; %ProgramFiles% (%SystemDrive%\Program Files) 'ProgramFilesX86|' & _ ; %ProgramFiles% (%SystemDrive%\Program Files) 'ProgramFilesCommon|' & _ ; %ProgramFiles%\Common Files 'ProgramFilesCommonX64|' & _ ; %ProgramFiles%\Common Files 'ProgramFilesCommonX86|' & _ ; %ProgramFiles%\Common Files 'Programs|' & _ ; %APPDATA%\Microsoft\Windows\Start Menu\Programs 'Public|' & _ ; %PUBLIC% (%SystemDrive%\Users\Public) 'PublicDesktop|' & _ ; %PUBLIC%\Desktop 'PublicDocuments|' & _ ; %PUBLIC%\Documents 'PublicLibraries|' & _ ; %ALLUSERSPROFILE%\Microsoft\Windows\Libraries 'PublicMusic|' & _ ; %PUBLIC%\Music 'PublicPictures|' & _ ; %PUBLIC%\Pictures 'PublicVideos|' & _ ; %PUBLIC%\Videos 'QuickLaunch|' & _ ; %APPDATA%\Microsoft\Internet Explorer\Quick Launch 'ResourceDir|' & _ ; %windir%\Resources 'RoamingAppData|' & _ ; %APPDATA% (%USERPROFILE%\AppData\Roaming) 'SendTo|' & _ ; %APPDATA%\Microsoft\Windows\SendTo 'StartMenu|' & _ ; %APPDATA%\Microsoft\Windows\Start Menu 'Startup|' & _ ; %APPDATA%\Microsoft\Windows\Start Menu\Programs\StartUp 'System|' & _ ; %windir%\system32 'SystemX86|' & _ ; %windir%\system32 'Templates|' & _ ; %APPDATA%\Microsoft\Windows\Templates 'UserPinned|' & _ ; %APPDATA%\Microsoft\Internet Explorer\Quick Launch\User Pinned 'UserProfiles|' & _ ; %SystemDrive%\Users 'UserProgramFiles|' & _ ; %LOCALAPPDATA%\Programs 'UserProgramFilesCommon|' & _ ; %LOCALAPPDATA%\Programs\Common 'Videos|' & _ ; %USERPROFILE%\Videos 'VideosLibrary|' & _ ; %APPDATA%\Microsoft\Windows\Libraries\Videos.library-ms 'Windows' ; %windir% ; check the passed folder name is listed If Not _String_SearchForWords($s_Constants, $s_Folder) Then Return SetError(1, 0, '"' & $s_Folder & '" ' & ' is not listed in the Known Folder list') ; return the value of the variable Local $s_GUID = Eval('FOLDERID_' & $s_Folder) ; get the known folder path Local $s_FolderPath = _WinAPI_ShellGetKnownFolderPath($s_GUID) If @error Then Return SetError(@error, @extended, _WinAPI_GetLastErrorMessage()) Return $s_FolderPath EndFunc ;==>_Win7_GetKnownFolder ; #FUNCTION# ==================================================================================================================== ; Name ..........: _String_SearchForWords ; Description ...: Search for the existance of multiple words in a given string ; Syntax ........: _String_SearchForWords($sCallingFunc, $sTest, $sSearch) ; Parameters ....: $sTest - The string to run the check against ; $sSearch - The string(s) to search for ; Return values .: Success - Returns 0 - No Match ; 1 - Match ; Failure - Sets @error to 1 and logs an error message ; Example .......: MsgBox(0,'', _String_SearchForWords('', 'batcave1,batcave2,xbmc,benneraswell', 'batcave')) ; =============================================================================================================================== Func _String_SearchForWords($sTest, $sSearch) Local $sRunningFunc = '_String_SearchForWords' Local $sPattern = '(?i)^(?=.*\b' & StringReplace($sSearch, '|', '\b)(?=.*\b') & '\b)' Local $iRet = StringRegExp($sTest, $sPattern) If @error Then Return SetError(@error, @extended, '') Return $iRet EndFunc ;==>_String_SearchForWords Or probably better for you Local $s_FileName = FileSelectFolder('Please Select The Folder...', '', 3, "::{20D04FE0-3AEA-1069-A2D8-08002B30309D}") If Not @error Then ; get the folder name of any special folders If StringInStr($s_FileName, '::{') Then $s_DisplayName = SpecialFolders_GetSelfName($s_FileName) $s_FileName = SpecialFolder_ReturnPath($s_FileName) EndIf MsgBox(0,'', $s_FileName) ; check fileexists EndIf Func SpecialFolder_ReturnPath($s_Path) Local $s_Lnk = @TempDir & '\FileName.lnk' ; creste a shortcut for the path If Not FileCreateShortcut($s_Path, $s_Lnk) Then Return $s_Path ; read the shortcuts property to an array Local $a_Shortcut = FileGetShortcut($s_Lnk) If @error Then Return $s_Path FileDelete($s_Lnk) ; get the shortcut target path If IsArray($a_Shortcut) Then Return $a_Shortcut[0] Return $s_Path EndFunc ;==>SpecialFolder_ReturnPath Func SpecialFolders_GetSelfName($s_Path) Local $objShell = ObjCreate("Shell.Application") If Not IsObj($objShell) Then Return '' Return $objShell.NameSpace($s_Path).Self.Name EndFunc ;==>SpecialFolders_GetSelfName Edited February 18, 2017 by benners AnonymousX 1
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