bobbintb Posted October 9, 2009 Posted October 9, 2009 ok i am trying to use @ProgramFilesDir in a script. the issue is this script may to on a variety of machines. If run on an x64 machine @ProgramFilesDir will point to "c:\program files" instead of "c:\program files (x86)". or a user may even have it set up some other crazy way. is there a variable to check both?
FuryCell Posted October 9, 2009 Posted October 9, 2009 (edited) You could use @OSArch to determine if the OS is 32bit or 64 bit and then adjust from there. Edited October 9, 2009 by P5ych0Gigabyte HKTunes:Softpedia | GoogleCodeLyricToy:Softpedia | GoogleCodeRCTunes:Softpedia | GoogleCodeMichtaToolsProgrammer n. - An ingenious device that turns caffeine into code.
FuryCell Posted October 9, 2009 Posted October 9, 2009 I made a little function. It appears to work on my system (Windows 7 x64). MsgBox(0,"",ProgramFiles()) Func ProgramFiles() If StringInStr(@OSArch,"64") then Return @ProgramFilesDir&" (x86)" Return @ProgramFilesDir EndFunc HKTunes:Softpedia | GoogleCodeLyricToy:Softpedia | GoogleCodeRCTunes:Softpedia | GoogleCodeMichtaToolsProgrammer n. - An ingenious device that turns caffeine into code.
bobbintb Posted October 9, 2009 Author Posted October 9, 2009 i considered that but was trying to plan for the unlikely even that the default environmental variable for windows didnt follow that scheme. but i may have to deal with it if i cant find a more "pure" method.
GEOSoft Posted October 9, 2009 Posted October 9, 2009 You can also read it from the registry. $sPFPath = RegRead("HKLM64\SOFTWARE\Microsoft\Windows\CurrentVersion", "ProgramFilesDir") MsgBox(0, "Test Result", "The Program Files Folder is" & @CRLF & @CRLF & $sPFPath) George Question about decompiling code? Read the decompiling FAQ and don't bother posting the question in the forums.Be sure to read and follow the forum rules. -AKA the AutoIt Reading and Comprehension Skills test.*** The PCRE (Regular Expression) ToolKit for AutoIT - (Updated Oct 20, 2011 ver:3.0.1.13) - Please update your current version before filing any bug reports. The installer now includes both 32 and 64 bit versions. No change in version number. Visit my Blog .. currently not active but it will soon be resplendent with news and views. Also please remove any links you may have to my website. it is soon to be closed and replaced with something else. "Old age and treachery will always overcome youth and skill!"
Yashied Posted October 9, 2009 Posted October 9, 2009 (edited) Another way. The "purest" method. expandcollapse popupGlobal Const $CSIDL_ADMINTOOLS = 0x0030 Global Const $CSIDL_ALTSTARTUP = 0x001D Global Const $CSIDL_APPDATA = 0x001A Global Const $CSIDL_BITBUCKET = 0x000A Global Const $CSIDL_CDBURN_AREA = 0x003B Global Const $CSIDL_COMMON_ADMINTOOLS = 0x002F Global Const $CSIDL_COMMON_ALTSTARTUP = 0x001E Global Const $CSIDL_COMMON_APPDATA = 0x0023 Global Const $CSIDL_COMMON_DESKTOPDIRECTORY = 0x0019 Global Const $CSIDL_COMMON_DOCUMENTS = 0x002E Global Const $CSIDL_COMMON_FAVORITES = 0x001F Global Const $CSIDL_COMMON_MUSIC = 0x0035 Global Const $CSIDL_COMMON_PICTURES = 0x0036 Global Const $CSIDL_COMMON_PROGRAMS = 0x0017 Global Const $CSIDL_COMMON_STARTMENU = 0x0016 Global Const $CSIDL_COMMON_STARTUP = 0x0018 Global Const $CSIDL_COMMON_TEMPLATES = 0x002D Global Const $CSIDL_COMMON_VIDEO = 0x0037 Global Const $CSIDL_COMPUTERSNEARME = 0x003D Global Const $CSIDL_CONNECTIONS = 0x0031 Global Const $CSIDL_CONTROLS = 0x0003 Global Const $CSIDL_COOKIES = 0x0021 Global Const $CSIDL_DESKTOP = 0x0000 Global Const $CSIDL_DESKTOPDIRECTORY = 0x0010 Global Const $CSIDL_DRIVES = 0x0011 Global Const $CSIDL_FAVORITES = 0x0006 Global Const $CSIDL_FONTS = 0x0014 Global Const $CSIDL_INTERNET_CACHE = 0x0020 Global Const $CSIDL_HISTORY = 0x0022 Global Const $CSIDL_LOCAL_APPDATA = 0x001C Global Const $CSIDL_MYMUSIC = 0x000D Global Const $CSIDL_MYPICTURES = 0x0027 Global Const $CSIDL_MYVIDEO = 0x000E Global Const $CSIDL_NETHOOD = 0x0013 Global Const $CSIDL_PERSONAL = 0x0005 Global Const $CSIDL_PRINTERS = 0x0004 Global Const $CSIDL_PRINTHOOD = 0x001B Global Const $CSIDL_PROFILE = 0x0028 Global Const $CSIDL_PROGRAM_FILES = 0x0026 Global Const $CSIDL_PROGRAM_FILES_COMMON = 0x002B Global Const $CSIDL_PROGRAM_FILES_COMMONX86 = 0x002C Global Const $CSIDL_PROGRAM_FILESX86 = 0x002A Global Const $CSIDL_PROGRAMS = 0x0002 Global Const $CSIDL_RECENT = 0x0008 Global Const $CSIDL_SENDTO = 0x0009 Global Const $CSIDL_STARTMENU = 0x000B Global Const $CSIDL_STARTUP = 0x0007 Global Const $CSIDL_SYSTEM = 0x0025 Global Const $CSIDL_SYSTEMX86 = 0x0029 Global Const $CSIDL_TEMPLATES = 0x0015 Global Const $CSIDL_WINDOWS = 0x0024 MsgBox(0, '', _WinAPI_ShellGetSpecialFolderPath($CSIDL_PROGRAM_FILES)) MsgBox(0, '', _WinAPI_ShellGetSpecialFolderPath($CSIDL_PROGRAM_FILESX86)) MsgBox(0, '', _WinAPI_ShellGetSpecialFolderPath($CSIDL_SYSTEM)) MsgBox(0, '', _WinAPI_ShellGetSpecialFolderPath($CSIDL_SYSTEMX86)) Func _WinAPI_ShellGetSpecialFolderPath($CSIDL) Local $tPath = DllStructCreate('wchar[1024]') Local $Ret = DllCall('shell32.dll', 'int', 'SHGetSpecialFolderPathW', 'hwnd', 0, 'ptr', DllStructGetPtr($tPath), 'int', $CSIDL, 'int', 0) If (@error) Or ($Ret[0] = 0) Then Return SetError(1, 0, '') EndIf Return DllStructGetData($tPath, 1) EndFunc ;==>_WinAPI_ShellGetSpecialFolderPath Edited October 9, 2009 by Yashied My UDFs: iKey | FTP Uploader | Battery Checker | Boot Manager | Font Viewer | UDF Keyword Manager | Run Dialog Replacement | USBProtect | 3D Axis | Calculator | Sleep | iSwitcher | TM | NetHelper | File Types Manager | Control Viewer | SynFolders | DLL Helper Animated Tray Icons UDF Library | Hotkeys UDF Library | Hotkeys Input Control UDF Library | Caret Shape UDF Library | Context Help UDF Library | Most Recently Used List UDF Library | Icons UDF Library | FTP UDF Library | Script Communications UDF Library | Color Chooser UDF Library | Color Picker Control UDF Library | IPHelper (Vista/7) UDF Library | WinAPI Extended UDF Library | WinAPIVhd UDF Library | Icon Chooser UDF Library | Copy UDF Library | Restart UDF Library | Event Log UDF Library | NotifyBox UDF Library | Pop-up Windows UDF Library | TVExplorer UDF Library | GuiHotKey UDF Library | GuiSysLink UDF Library | Package UDF Library | Skin UDF Library | AITray UDF Library | RDC UDF Library Appropriate path | Button text color | Gaussian random numbers | Header's styles (Vista/7) | ICON resource enumeration | Menu & INI | Tabbed string size | Tab's skin | Pop-up circular menu | Progress Bar without animation (Vista/7) | Registry export | Registry path jumping | Unique hardware ID | Windows alignment More...
bobbintb Posted October 9, 2009 Author Posted October 9, 2009 Another way. The "purest" method. expandcollapse popupGlobal Const $CSIDL_ADMINTOOLS = 0x0030 Global Const $CSIDL_ALTSTARTUP = 0x001D Global Const $CSIDL_APPDATA = 0x001A Global Const $CSIDL_BITBUCKET = 0x000A Global Const $CSIDL_CDBURN_AREA = 0x003B Global Const $CSIDL_COMMON_ADMINTOOLS = 0x002F Global Const $CSIDL_COMMON_ALTSTARTUP = 0x001E Global Const $CSIDL_COMMON_APPDATA = 0x0023 Global Const $CSIDL_COMMON_DESKTOPDIRECTORY = 0x0019 Global Const $CSIDL_COMMON_DOCUMENTS = 0x002E Global Const $CSIDL_COMMON_FAVORITES = 0x001F Global Const $CSIDL_COMMON_MUSIC = 0x0035 Global Const $CSIDL_COMMON_PICTURES = 0x0036 Global Const $CSIDL_COMMON_PROGRAMS = 0x0017 Global Const $CSIDL_COMMON_STARTMENU = 0x0016 Global Const $CSIDL_COMMON_STARTUP = 0x0018 Global Const $CSIDL_COMMON_TEMPLATES = 0x002D Global Const $CSIDL_COMMON_VIDEO = 0x0037 Global Const $CSIDL_COMPUTERSNEARME = 0x003D Global Const $CSIDL_CONNECTIONS = 0x0031 Global Const $CSIDL_CONTROLS = 0x0003 Global Const $CSIDL_COOKIES = 0x0021 Global Const $CSIDL_DESKTOP = 0x0000 Global Const $CSIDL_DESKTOPDIRECTORY = 0x0010 Global Const $CSIDL_DRIVES = 0x0011 Global Const $CSIDL_FAVORITES = 0x0006 Global Const $CSIDL_FONTS = 0x0014 Global Const $CSIDL_INTERNET_CACHE = 0x0020 Global Const $CSIDL_HISTORY = 0x0022 Global Const $CSIDL_LOCAL_APPDATA = 0x001C Global Const $CSIDL_MYMUSIC = 0x000D Global Const $CSIDL_MYPICTURES = 0x0027 Global Const $CSIDL_MYVIDEO = 0x000E Global Const $CSIDL_NETHOOD = 0x0013 Global Const $CSIDL_PERSONAL = 0x0005 Global Const $CSIDL_PRINTERS = 0x0004 Global Const $CSIDL_PRINTHOOD = 0x001B Global Const $CSIDL_PROFILE = 0x0028 Global Const $CSIDL_PROGRAM_FILES = 0x0026 Global Const $CSIDL_PROGRAM_FILES_COMMON = 0x002B Global Const $CSIDL_PROGRAM_FILES_COMMONX86 = 0x002C Global Const $CSIDL_PROGRAM_FILESX86 = 0x002A Global Const $CSIDL_PROGRAMS = 0x0002 Global Const $CSIDL_RECENT = 0x0008 Global Const $CSIDL_SENDTO = 0x0009 Global Const $CSIDL_STARTMENU = 0x000B Global Const $CSIDL_STARTUP = 0x0007 Global Const $CSIDL_SYSTEM = 0x0025 Global Const $CSIDL_SYSTEMX86 = 0x0029 Global Const $CSIDL_TEMPLATES = 0x0015 Global Const $CSIDL_WINDOWS = 0x0024 MsgBox(0, '', _WinAPI_ShellGetSpecialFolderPath($CSIDL_PROGRAM_FILES)) MsgBox(0, '', _WinAPI_ShellGetSpecialFolderPath($CSIDL_PROGRAM_FILESX86)) MsgBox(0, '', _WinAPI_ShellGetSpecialFolderPath($CSIDL_SYSTEM)) MsgBox(0, '', _WinAPI_ShellGetSpecialFolderPath($CSIDL_SYSTEMX86)) Func _WinAPI_ShellGetSpecialFolderPath($CSIDL) Local $tPath = DllStructCreate('wchar[1024]') Local $Ret = DllCall('shell32.dll', 'int', 'SHGetSpecialFolderPathW', 'hwnd', 0, 'ptr', DllStructGetPtr($tPath), 'int', $CSIDL, 'int', 0) If (@error) Or ($Ret[0] = 0) Then Return SetError(1, 0, '') EndIf Return DllStructGetData($tPath, 1) EndFunc ;==>_WinAPI_ShellGetSpecialFolderPath lol! ok, well i don't think i need to get that pure. anyway, thanks everyone. i got some great suggestions.
martin Posted October 10, 2009 Posted October 10, 2009 Another way. The "purest" method. expandcollapse popupGlobal Const $CSIDL_ADMINTOOLS = 0x0030 Global Const $CSIDL_ALTSTARTUP = 0x001D Global Const $CSIDL_APPDATA = 0x001A Global Const $CSIDL_BITBUCKET = 0x000A Global Const $CSIDL_CDBURN_AREA = 0x003B Global Const $CSIDL_COMMON_ADMINTOOLS = 0x002F Global Const $CSIDL_COMMON_ALTSTARTUP = 0x001E Global Const $CSIDL_COMMON_APPDATA = 0x0023 Global Const $CSIDL_COMMON_DESKTOPDIRECTORY = 0x0019 Global Const $CSIDL_COMMON_DOCUMENTS = 0x002E Global Const $CSIDL_COMMON_FAVORITES = 0x001F Global Const $CSIDL_COMMON_MUSIC = 0x0035 Global Const $CSIDL_COMMON_PICTURES = 0x0036 Global Const $CSIDL_COMMON_PROGRAMS = 0x0017 Global Const $CSIDL_COMMON_STARTMENU = 0x0016 Global Const $CSIDL_COMMON_STARTUP = 0x0018 Global Const $CSIDL_COMMON_TEMPLATES = 0x002D Global Const $CSIDL_COMMON_VIDEO = 0x0037 Global Const $CSIDL_COMPUTERSNEARME = 0x003D Global Const $CSIDL_CONNECTIONS = 0x0031 Global Const $CSIDL_CONTROLS = 0x0003 Global Const $CSIDL_COOKIES = 0x0021 Global Const $CSIDL_DESKTOP = 0x0000 Global Const $CSIDL_DESKTOPDIRECTORY = 0x0010 Global Const $CSIDL_DRIVES = 0x0011 Global Const $CSIDL_FAVORITES = 0x0006 Global Const $CSIDL_FONTS = 0x0014 Global Const $CSIDL_INTERNET_CACHE = 0x0020 Global Const $CSIDL_HISTORY = 0x0022 Global Const $CSIDL_LOCAL_APPDATA = 0x001C Global Const $CSIDL_MYMUSIC = 0x000D Global Const $CSIDL_MYPICTURES = 0x0027 Global Const $CSIDL_MYVIDEO = 0x000E Global Const $CSIDL_NETHOOD = 0x0013 Global Const $CSIDL_PERSONAL = 0x0005 Global Const $CSIDL_PRINTERS = 0x0004 Global Const $CSIDL_PRINTHOOD = 0x001B Global Const $CSIDL_PROFILE = 0x0028 Global Const $CSIDL_PROGRAM_FILES = 0x0026 Global Const $CSIDL_PROGRAM_FILES_COMMON = 0x002B Global Const $CSIDL_PROGRAM_FILES_COMMONX86 = 0x002C Global Const $CSIDL_PROGRAM_FILESX86 = 0x002A Global Const $CSIDL_PROGRAMS = 0x0002 Global Const $CSIDL_RECENT = 0x0008 Global Const $CSIDL_SENDTO = 0x0009 Global Const $CSIDL_STARTMENU = 0x000B Global Const $CSIDL_STARTUP = 0x0007 Global Const $CSIDL_SYSTEM = 0x0025 Global Const $CSIDL_SYSTEMX86 = 0x0029 Global Const $CSIDL_TEMPLATES = 0x0015 Global Const $CSIDL_WINDOWS = 0x0024 MsgBox(0, '', _WinAPI_ShellGetSpecialFolderPath($CSIDL_PROGRAM_FILES)) MsgBox(0, '', _WinAPI_ShellGetSpecialFolderPath($CSIDL_PROGRAM_FILESX86)) MsgBox(0, '', _WinAPI_ShellGetSpecialFolderPath($CSIDL_SYSTEM)) MsgBox(0, '', _WinAPI_ShellGetSpecialFolderPath($CSIDL_SYSTEMX86)) Func _WinAPI_ShellGetSpecialFolderPath($CSIDL) Local $tPath = DllStructCreate('wchar[1024]') Local $Ret = DllCall('shell32.dll', 'int', 'SHGetSpecialFolderPathW', 'hwnd', 0, 'ptr', DllStructGetPtr($tPath), 'int', $CSIDL, 'int', 0) If (@error) Or ($Ret[0] = 0) Then Return SetError(1, 0, '') EndIf Return DllStructGetData($tPath, 1) EndFunc ;==>_WinAPI_ShellGetSpecialFolderPath That is very useful. Thanks Yashied Serial port communications UDF Includes functions for binary transmission and reception.printing UDF Useful for graphs, forms, labels, reports etc.Add User Call Tips to SciTE for functions in UDFs not included with AutoIt and for your own scripts.Functions with parameters in OnEvent mode and for Hot Keys One function replaces GuiSetOnEvent, GuiCtrlSetOnEvent and HotKeySet.UDF IsConnected2 for notification of status of connected state of many urls or IPs, without slowing the script.
Shark007 Posted October 13, 2009 Posted October 13, 2009 Yashied, i am having difficulting getting my software to write to the actual users common appdata folder. this path would be - x:\Users\username\AppData\Roaming Global Const $CSIDL_COMMON_APPDATA = 0x0023 - writes to the folder x:\ProgramData Global Const $CSIDL_APPDATA = 0x001A - writes to the folder x:\Users\username\AppData\Local Global Const $CSIDL_LOCAL_APPDATA = 0x001C - also writes to the folder x:\Users\username\AppData\Local Do you have a variation that will write to the actual users appdata folder? this path would be - x:\Users\username\AppData\Roaming
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