Application / user / program paths...

Just starting out? Need help? Post your questions and find answers here.
User avatar
blueznl
PureBasic Expert
PureBasic Expert
Posts: 6166
Joined: Sat May 17, 2003 11:31 am
Contact:

Application / user / program paths...

Post by blueznl »

I feel stupid, I know it is somewhere on the forum, I just cannot find it :-(

Okay, here's the little problem: for CodeCaddy I need to figure out where PureBasic stores its tools.prefs file. I know it can be in different places, such as in the local folder (pre 4.00), somewhere else (WinXP) and in some other place (Vista) and so on... Now (though I still need to know all possible locations for CodeCaddy) it triggered me to add a little page to the survival guide, dealing with application vs. user data.

I seem to recall that there was some stuff on the forum regarding this, but I can't seem to find it back... It's probably 'special folder' related.

Any suggestions (and / or a link to a generic webpage regarding the differences when it comes to storage of data on 98 / 2K / XP / Vista / 7) would be very welcome...

(Edit)

Perhaps to better explain: I'm looking for code, or a reference, that will show me how I can, on each OS, find back...

a. prefered application data path
b. user data path
c. where PureBasic stores tools.prefs

:-)
( PB6.00 LTS Win11 x64 Asrock AB350 Pro4 Ryzen 5 3600 32GB GTX1060 6GB)
( The path to enlightenment and the PureBasic Survival Guide right here... )
Trond
Always Here
Always Here
Posts: 7446
Joined: Mon Sep 22, 2003 6:45 pm
Location: Norway

Re: Application / user / program paths...

Post by Trond »

This is for Windows XP and probably 2000/Vista/7 as well.

Boilerplate code:

Code: Select all

Define hShell32 = OpenLibrary(#PB_Any, "shell32.dll")
Prototype PSHGetFolderPath(hWndOwner, nFolder, hToken, dwFlags, pszPath)
CompilerIf #PB_Compiler_Unicode
  Global SHGetFolderPath.PSHGetFolderPath = GetFunction(hShell32, "SHGetFolderPathW")
CompilerElse
  Global SHGetFolderPath.PSHGetFolderPath = GetFunction(hShell32, "SHGetFolderPathA")
CompilerEndIf

Procedure.s GetSpecialFolder(CSIDL)
  Protected Path.s = Space(#MAX_PATH*2)
  SHGetFolderPath(0, CSIDL, 0, 0, @Path)
  ProcedureReturn Path
EndProcedure
Program files (application binary and read-only data):

Code: Select all

Debug GetEnvironmentVariable("PROGRAMFILES")
Debug GetSpecialFolder(#CSIDL_PROGRAM_FILES)
Appdata (user-specific writable data):

Code: Select all

Debug GetEnvironmentVariable("APPDATA") ; or
Debug GetSpecialFolder(#CSIDL_APPDATA)
Common appdata (writable data common to all users):

Code: Select all

Debug GetSpecialFolder(#CSIDL_COMMON_APPDATA)
User avatar
ts-soft
Always Here
Always Here
Posts: 5756
Joined: Thu Jun 24, 2004 2:44 pm
Location: Berlin - Germany

Re: Application / user / program paths...

Post by ts-soft »

Trond wrote:

Code: Select all

Procedure.s GetSpecialFolder(CSIDL)
  Protected Path.s = Space(#MAX_PATH*2)
Just a hint:
#MAX_PATH*2 ?
The API requires #MAX_PATH! Space(#MAX_PATH) have in unicode the double size in bytes!

SHGetFolderPath_() is available, DLL load only required with Demo.

Greetings
Thomas
User avatar
idle
Always Here
Always Here
Posts: 5836
Joined: Fri Sep 21, 2007 5:52 am
Location: New Zealand

Re: Application / user / program paths...

Post by idle »

I use this to load all the sources files in a folder and sub folders just compile and plonk it on the desktop
and then drag and drop a file or folder onto it to open it / them.

Code: Select all

Procedure.s GetSpecialFolderLocation(Value.l)
  If SHGetSpecialFolderLocation_(0, Value, @File_ID) = 0
    SpecialFolderLocation.s = Space(#MAX_PATH*2)
    SHGetPathFromIDList_(File_ID, @SpecialFolderLocation)
    If SpecialFolderLocation
      If Right(SpecialFolderLocation, 1) <> "\"
        SpecialFolderLocation + "\"
      EndIf
    EndIf
  EndIf
  ProcedureReturn SpecialFolderLocation.s
EndProcedure

Procedure NukeSettings(filepath.s,strWorkPath.s)

Protected strpath.s

If OpenPreferences(filepath + "PureBasic\PureBasic.prefs")
    PreferenceGroup("FolderLaunch")
    If ReadPreferenceLong("Backedup", 0) = 0
       WritePreferenceLong("Backedup", 1)
       CopyFile(filepath + "PureBasic\PureBasic.prefs",filepath + "PureBasic\PureBasic_Back.prefs")
    EndIf 
    RemovePreferenceGroup("OpenedFiles")
    PreferenceGroup("Global")
    strpath = ReadPreferenceString("SourceDirectory", "")
    If strpath <> strWorkPath 
       WritePreferenceString("SourceDirectory",strWorkPath +"\")
       PreferenceGroup("Explorer")
       WritePreferenceString("Path",strWorkPath +"\")
       PreferenceGroup("FileViewer")
       WritePreferenceString("Path",strWorkPath +"\")
    EndIf 
    ClosePreferences()
EndIf     
EndProcedure 

Procedure.s dirlist(dir.s,bRec=0)
  Static strFiles.s 
  Static ct1
  mDir = ExamineDirectory(#PB_Any, dir, "*.*")  
  If mDir  
    While NextDirectoryEntry(mDir)
      If DirectoryEntryType(mDir) = #PB_DirectoryEntry_File
          Directory$ = dir
          FileName.s = DirectoryEntryName(mDir)
          If FindString(FileName,".pb", 1)
            FullFileName.s = dir + "\" + FileName
            Debug FullFileName
            strFiles + Chr(34) + FullFileName + Chr(34)  
            ct1+1
          EndIf   
      Else
         tdir$ = DirectoryEntryName(mDir)
         If tdir$ <> "." And tdir$ <> ".."
           If bRec = 0
           dirlist(Dir + "\" + tdir$)
           EndIf 
         EndIf 
      EndIf
   Wend
   FinishDirectory(mDir)
  EndIf
  
  ProcedureReturn strFiles 

EndProcedure 


filepath.s = GetSpecialFolderLocation(26)

If filepath 
   filepath.s
   tdir$ = ProgramParameter()
   If FindString(tdir$,".pb",1)
      tdir$= GetPathPart(tdir$)
      recursive = 1
   EndIf    
   If tdir$ <> "" 
      NukeSettings(filepath,tdir$)
      param$ = dirlist(tdir$,recursive)
            
   EndIf     
EndIf 
User avatar
idle
Always Here
Always Here
Posts: 5836
Joined: Fri Sep 21, 2007 5:52 am
Location: New Zealand

Re: Application / user / program paths...

Post by idle »

I posted this somewhere but can't find where

Code: Select all

#CSIDL_DESKTOP = $0                 ;{desktop}
#CSIDL_INTERNET = $1                ;Internet Explorer (icon on desktop)
#CSIDL_PROGRAMS = $2                ;Start Menu\Programs
#CSIDL_CONTROLS = $3                ;My Computer\Control Panel
#CSIDL_PRINTERS = $4                ;My Computer\Printers
#CSIDL_PERSONAL = $5                ;My Documents
#CSIDL_FAVORITES = $6               ;{user}\Favourites
#CSIDL_STARTUP = $7                 ;Start Menu\Programs\Startup
#CSIDL_RECENT = $8                  ;{user}\Recent
#CSIDL_SENDTO = $9                  ;{user}\SendTo
#CSIDL_BITBUCKET = $A               ;{desktop}\Recycle Bin
#CSIDL_STARTMENU = $B               ;{user}\Start Menu
#CSIDL_DESKTOPDIRECTORY = $10       ;{user}\Desktop
#CSIDL_DRIVES = $11                 ;My Computer
#CSIDL_NETWORK = $12                ;Network Neighbourhood
#CSIDL_NETHOOD = $13                ;{user}\nethood
#CSIDL_FONTS = $14                  ;windows\fonts
#CSIDL_TEMPLATES = $15
#CSIDL_COMMON_STARTMENU = $16       ;All Users\Start Menu
#CSIDL_COMMON_PROGRAMS = $17        ;All Users\Programs
#CSIDL_COMMON_STARTUP = $18         ;All Users\Startup
#CSIDL_COMMON_DESKTOPDIRECTORY = $19;All Users\Desktop
#CSIDL_APPDATA = $1A                ;{user}\Application Data
#CSIDL_PRINTHOOD = $1B              ;{user}\PrintHood
#CSIDL_LOCAL_APPDATA = $1C          ;{user}\Local Settings\Application Data (non roaming)
#CSIDL_ALTSTARTUP = $1D             ;non localized startup
#CSIDL_COMMON_ALTSTARTUP = $1E      ;non localized common startup
#CSIDL_COMMON_FAVORITES = $1F
#CSIDL_INTERNET_CACHE = $20
#CSIDL_COOKIES = $21
#CSIDL_HISTORY = $22
#CSIDL_COMMON_APPDATA = $23          ;All Users\Application Data
#CSIDL_WINDOWS = $24                 ;GetWindowsDirectory()
#CSIDL_SYSTEM = $25                  ;GetSystemDirectory()
#CSIDL_PROGRAM_FILES = $26           ;C:\Program Files
#CSIDL_MYPICTURES = $27              ;C:\Program Files\My Pictures
#CSIDL_PROFILE = $28                 ;USERPROFILE
#CSIDL_SYSTEMX86 = $29               ;x86 system directory on RISC
#CSIDL_PROGRAM_FILESX86 = $2A        ;x86 C:\Program Files on RISC
#CSIDL_PROGRAM_FILES_COMMON = $2B    ;C:\Program Files\Common
#CSIDL_PROGRAM_FILES_COMMONX86 = $2C ;x86 Program Files\Common on RISC
#CSIDL_COMMON_TEMPLATES = $2D        ;All Users\Templates
#CSIDL_COMMON_DOCUMENTS = $2E        ;All Users\Documents
#CSIDL_COMMON_ADMINTOOLS = $2F       ;All Users\Start Menu\Programs\Administrative Tools
#CSIDL_ADMINTOOLS = $30              ;{user}\Start Menu\Programs\Administrative Tools
#CSIDL_FLAG_CREATE = $8000          ;combine with CSIDL_ value to force 
                                                  ;create on SHGetSpecialFolderLocation()
#CSIDL_FLAG_DONT_VERIFY = $4000      ;combine with CSIDL_ value to force 
                                                  ;create on SHGetSpecialFolderLocation()
#CSIDL_FLAG_MASK = $FF00             ;mask for all possible flag values
#SHGFP_TYPE_CURRENT = $0             ;current value for user, verify it exists
#SHGFP_TYPE_DEFAULT = $1


Procedure.s GetSpecialFolderLocation(Value.l)
  Protected Folder_ID,SpecialFolderLocation.s
  
  If SHGetSpecialFolderLocation_(0, Value, @Folder_ID) = 0
    SpecialFolderLocation = Space(#MAX_PATH*2)
    SHGetPathFromIDList_(Folder_ID, @SpecialFolderLocation)
    If SpecialFolderLocation
      If Right(SpecialFolderLocation, 1) <> "\"
        SpecialFolderLocation + "\"
      EndIf
    EndIf
    CoTaskMemFree_(Folder_ID)
  EndIf
  

  ProcedureReturn SpecialFolderLocation.s
EndProcedure


Enumeration
#ALL_USERS_PROFILE 
#USER_APP_DATA       ;Documents And Settings\andrew\Application Data
#CLIENTNAME ;Console
#COMMON_PROGRAM_FILES ;\Program Files\Common Files
#COMPUTERNAME ;
#COMSPEC ;\WINDOWS\system32\cmd.exe
#HOMEDRIVE ;:
#HOMEPATH ; \Documents And Settings\user
#LOGONSERVER ;= ;\\Server
#NUMBER_OF_PROCESSORS; = 1
#OS ;Windows_NT
#ENVPATH ;= \Program Files\PureBasic4.2\Compilers\;:\WINDOWS\system32;:\WINDOWS;
#PATHEXT ;= .COM;.EXE;.BAT;.CMD;
#PROCESSOR_ARCHITECTURE; = x86
#PROCESSOR_IDENTIFIER; = x86 Family 15 Model 44 Stepping 2, AuthenticAMD
#PROCESSOR_LEVEL; = 15
#PROCESSOR_REVISION; = 2c02
#PROGRAMFILES; = \Program Files
#SESSIONNAME;= Console
#SYSTEMDRIVE;= drive letter:
#SYSTEMROOT; = \WINDOWS
#TEMP;  DOCUME~1\andrew\LOCALS~1\Temp
#TMP    ;DOCUME~1\andrew\LOCALS~1\Temp
#USERDOMAIN; = Domain
#USERNAME; = andrew
#USERPROFILE; = Documents And Settings\andrew
#WINDIR; 
EndEnumeration

Procedure.s GetEnvVar(var)

Select var 
Case #ALL_USERS_PROFILE
   var$ = "ALLUSERSPROFILE"
Case #USER_APP_DATA
   var$ = "APPDATA"
Case #CLIENTNAME 
   var$ = "CLIENTNAME"
Case #COMMON_PROGRAM_FILES 
   var$ = "CommonProgramFiles"
Case #COMPUTERNAME ;
   var$ = "COMPUTERNAME" 
Case #COMSPEC 
  var$ = "ComSpec"
Case #HOMEDRIVE ;:
   var$ = "HOMEDRIVE"
Case #HOMEPATH 
   var$ = "HOMEPATH" 
Case #LOGONSERVER 
   var$ = "LOGONSERVER"
Case #NUMBER_OF_PROCESSORS
   var$ = "NUMBER_OF_PROCESSORS"
Case #OS 
   var$ = "OS"
Case #ENVPATH 
   var$ = "Path"
Case #PATHEXT 
   var$ = "PATHEXT"
Case #PROCESSOR_ARCHITECTURE
   var$ = "PROCESSOR_ARCHITECTURE"
Case #PROCESSOR_IDENTIFIER
   var$ = "PROCESSOR_IDENTIFIER"
Case #PROCESSOR_LEVEL
   var$ = "PROCESSOR_LEVEL"
Case #PROCESSOR_REVISION
   var$ = "PROCESSOR_REVISION"
Case #PROGRAMFILES
   var$ = "ProgramFiles"
Case #SESSIONNAME
   var$ = "SESSIONNAME"
Case #SYSTEMDRIVE
   var$ = "SystemDrive"
Case #SYSTEMROOT
   var$ = "SystemRoot"
Case #TEMP
   var$ = "TEMP"
Case #TMP
   var$ = "TMP"
Case #USERDOMAIN
   var$ = "USERDOMAIN"
Case #USERNAME
   var$ = "USERNAME"
Case #USERPROFILE
   var$ = "USERPROFILE"
Case #WINDIR[color=#00FF00][/color]
  var$ = "windir"
EndSelect 

ProcedureReturn GetEnvironmentVariable(var$)

EndProcedure 

Debug GetEnvVar(#ALL_USERS_PROFILE)

Debug GetSpecialFolderLocation(#CSIDL_DESKTOP)

If ExamineEnvironmentVariables()
    While NextEnvironmentVariable()
      Debug EnvironmentVariableName() + " = " + EnvironmentVariableValue()
    Wend
EndIf



User avatar
ts-soft
Always Here
Always Here
Posts: 5756
Joined: Thu Jun 24, 2004 2:44 pm
Location: Berlin - Germany

Re: Application / user / program paths...

Post by ts-soft »

The version of idle supports more paths, dependent of Windows Version and Version of IE.

The version of Trond supports only the "usefull" paths and Require IE 5.0 or higher (works on Win 95 with IE 5.0)

Greetings
Thomas
Trond
Always Here
Always Here
Posts: 7446
Joined: Mon Sep 22, 2003 6:45 pm
Location: Norway

Re: Application / user / program paths...

Post by Trond »

ts-soft wrote:The version of idle supports more paths, dependent of Windows Version and Version of IE.

The version of Trond supports only the "usefull" paths and Require IE 5.0 or higher (works on Win 95 with IE 5.0)

Greetings
Thomas
They should actually support the same paths, I think.
User avatar
blueznl
PureBasic Expert
PureBasic Expert
Posts: 6166
Joined: Sat May 17, 2003 11:31 am
Contact:

Re: Application / user / program paths...

Post by blueznl »

... now the next question would almost have to be: where does M$ want us to store our stuff? That seems to change over time as well...
( PB6.00 LTS Win11 x64 Asrock AB350 Pro4 Ryzen 5 3600 32GB GTX1060 6GB)
( The path to enlightenment and the PureBasic Survival Guide right here... )
User avatar
ts-soft
Always Here
Always Here
Posts: 5756
Joined: Thu Jun 24, 2004 2:44 pm
Location: Berlin - Germany

Re: Application / user / program paths...

Post by ts-soft »

Trond wrote:They should actually support the same paths, I think.
:oops: You're right, i have test it.
Only older Version that uses the "SHFolder.dll" (win9x) doesn't support all.
http://msdn.microsoft.com/en-us/library ... 85%29.aspx

It's my problem to understand all english :wink:

Greetings
Thomas
User avatar
idle
Always Here
Always Here
Posts: 5836
Joined: Fri Sep 21, 2007 5:52 am
Location: New Zealand

Re: Application / user / program paths...

Post by idle »

I actually liked the "useful" quote :lol:

also I think you need to call CoTaskMemFree_(Folder_ID) in the SHGetSpecialFolderLocation function

As for where to store stuff I've got no idea. I still use the users application data folder, but it's not the preferred location for vista or 7 but it works fine there.
User avatar
blueznl
PureBasic Expert
PureBasic Expert
Posts: 6166
Joined: Sat May 17, 2003 11:31 am
Contact:

Re: Application / user / program paths...

Post by blueznl »

It would be nice if people could drop me, or post, some screendumps of this code running on NT, 2K, XP64 and Windows 7:

Code: Select all

EnableExplicit
;
Global width.i = 600
Global height.i = 400
Global event.i
Global x_retval_string.s
Global x_retval.i

Procedure.s x_getspecialfolderlocation(type.i)
  Protected folderid.i
  ;
  ; *** retrieve a special folder name
  ;
  ; in:      type.i
  ; retval:  .s                - string containing the path
  ; out:     x_retval_string.s - as retval
  ;          x_retval.i        - 0 aka #TRUE if successful
  ;
  ; first retrieve a pointer to the itemidlist structure of a 'special folder'
  ; followed by retrieving the path from that imtemidlist structure
  ;
  x_retval = SHGetSpecialFolderLocation_(0,type,@folderid)
  If x_retval = 0
    x_retval_string = Space(#MAX_PATH)
    If SHGetPathFromIDList_(folderid,@x_retval_string) = 0
      x_retval = 1
    ElseIf Right(x_retval_string,1) <> "\"
      x_retval_string = x_retval_string+"\"
    EndIf
    ;
    ; free the itemidlist
    ;
    CoTaskMemFree_(folderid)
  EndIf
  If x_retval <> 0
    x_retval_string = ""
  EndIf
  ProcedureReturn x_retval_string
EndProcedure

OpenWindow(1,10,10,width,height,"Test",#PB_Window_ScreenCentered|#PB_Window_SystemMenu)
ListIconGadget(1,2,2,width-2,height-2,"Item",200,#PB_ListIcon_GridLines)
AddGadgetColumn(1,1,"Value",800)
;
; which OS
;
If OSVersion() < #PB_OS_Windows_NT3_51
  AddGadgetItem(1,-1,"OSVersion()"+#LF$+Str(OSVersion())+" unknown older version")
Else
  Select OSVersion()
  Case #PB_OS_Windows_NT3_51
    AddGadgetItem(1,-1,"OSVersion()"+#LF$+Str(OSVersion())+" Windows NT3")
  Case #PB_OS_Windows_95
    AddGadgetItem(1,-1,"OSVersion()"+#LF$+Str(OSVersion())+" Windows 95")
  Case #PB_OS_Windows_NT_4
    AddGadgetItem(1,-1,"OSVersion()"+#LF$+Str(OSVersion())+" Windows NT4")
  Case #PB_OS_Windows_98
    AddGadgetItem(1,-1,"OSVersion()"+#LF$+Str(OSVersion())+" Windows 98")
  Case #PB_OS_Windows_ME
    AddGadgetItem(1,-1,"OSVersion()"+#LF$+Str(OSVersion())+" Windows ME")
  Case #PB_OS_Windows_2000
    AddGadgetItem(1,-1,"OSVersion()"+#LF$+Str(OSVersion())+" Windows 2000")
  Case #PB_OS_Windows_XP
    AddGadgetItem(1,-1,"OSVersion()"+#LF$+Str(OSVersion())+" Windows XP")
  Case #PB_OS_Windows_Server_2003
    AddGadgetItem(1,-1,"OSVersion()"+#LF$+Str(OSVersion())+" Windows Server 2003")
  Case #PB_OS_Windows_Vista
    AddGadgetItem(1,-1,"OSVersion()"+#LF$+Str(OSVersion())+" Windows Vista")
  Case #PB_OS_Windows_Server_2008
    AddGadgetItem(1,-1,"OSVersion()"+#LF$+Str(OSVersion())+" Windoes Server 2008")
  Case #PB_OS_Windows_7
    AddGadgetItem(1,-1,"OSVersion()"+#LF$+Str(OSVersion())+" Windows 7")
  Case #PB_OS_Windows_Future
    AddGadgetItem(1,-1,"OSVersion()"+#LF$+Str(OSVersion())+" unknown version (too new)")
  Default
    AddGadgetItem(1,-1,"OSVersion()"+#LF$+Str(OSVersion())+" failed (should not happen)")
  EndSelect
EndIf
;
AddGadgetItem(1,-1,"")
AddGadgetItem(1,-1,"ProgramFilename()"+#LF$+ProgramFilename())
AddGadgetItem(1,-1,"GetCurrentDirectory()"+#LF$+GetCurrentDirectory())
AddGadgetItem(1,-1,"GetHomeDirectory()"+#LF$+GetHomeDirectory())
AddGadgetItem(1,-1,"GetTemporaryDirectory()"+#LF$+GetTemporaryDirectory())
;
AddGadgetItem(1,-1,"")
AddGadgetItem(1,-1,"SHGetSpecialFolderLocation_()")
AddGadgetItem(1,-1,"  #CSIDL_PERSONAL"+#LF$+x_getspecialfolderlocation(#CSIDL_PERSONAL))
AddGadgetItem(1,-1,"  #CSIDL_APPDATA"+#LF$+x_getspecialfolderlocation(#CSIDL_APPDATA))
AddGadgetItem(1,-1,"  #CSIDL_LOCAL_APPDATA"+#LF$+x_getspecialfolderlocation(#CSIDL_LOCAL_APPDATA))
AddGadgetItem(1,-1,"  #CSIDL_COMMON_APPDATA"+#LF$+x_getspecialfolderlocation(#CSIDL_COMMON_APPDATA))
; AddGadgetItem(1,-1,"  #CSIDL_WINDOWS"+#LF$+x_getspecialfolderlocation(#CSIDL_WINDOWS))
; AddGadgetItem(1,-1,"  #CSIDL_SYSTEM"+#LF$+x_getspecialfolderlocation(#CSIDL_SYSTEM))
; AddGadgetItem(1,-1,"  #CSIDL_PROGRAM_FILES_COMMON"+#LF$+x_getspecialfolderlocation(#CSIDL_PROGRAM_FILES_COMMON))
; AddGadgetItem(1,-1,"  #CSIDL_COMMON_DOCUMENTS"+#LF$+x_getspecialfolderlocation(#CSIDL_COMMON_DOCUMENTS))
; AddGadgetItem(1,-1,"  #SHGFP_TYPE_CURRENT"+#LF$+x_getspecialfolderlocation(#SHGFP_TYPE_CURRENT))
; AddGadgetItem(1,-1,"  #SHGFP_TYPE_DEFAULT"+#LF$+x_getspecialfolderlocation(#SHGFP_TYPE_DEFAULT))
;
AddGadgetItem(1,-1,"")
AddGadgetItem(1,-1,"GetEnvironmentVariable()")
AddGadgetItem(1,-1,"  USERPROFILE"+#LF$+GetEnvironmentVariable("USERPROFILE"))
AddGadgetItem(1,-1,"  APPDATA"+#LF$+GetEnvironmentVariable("APPDATA"))
AddGadgetItem(1,-1,"  HOMEPATH"+#LF$+GetEnvironmentVariable("HOMEPATH"))
AddGadgetItem(1,-1,"  TEMP"+#LF$+GetEnvironmentVariable("TEMP"))
AddGadgetItem(1,-1,"  TMP"+#LF$+GetEnvironmentVariable("TMP"))
; AddGadgetItem(1,-1,"  CLIENTNAME"+#LF$+GetEnvironmentVariable("CLIENTNAME"))
; AddGadgetItem(1,-1,"  SYSTEMDRIVE"+#LF$+GetEnvironmentVariable("SYSTEMDRIVE"))
; AddGadgetItem(1,-1,"  SYSTEMROOT"+#LF$+GetEnvironmentVariable("SYSTEMROOT"))
; AddGadgetItem(1,-1,"  ALLUSERSPROFILE"+#LF$+GetEnvironmentVariable("ALLUSERSPROFILE"))
; AddGadgetItem(1,-1,"  PATHEXT"+#LF$+GetEnvironmentVariable("PATHEXT"))

Repeat
  event = WaitWindowEvent()
Until event = #PB_Event_CloseWindow
Last edited by blueznl on Mon Mar 01, 2010 9:45 am, edited 1 time in total.
( PB6.00 LTS Win11 x64 Asrock AB350 Pro4 Ryzen 5 3600 32GB GTX1060 6GB)
( The path to enlightenment and the PureBasic Survival Guide right here... )
Trond
Always Here
Always Here
Posts: 7446
Joined: Mon Sep 22, 2003 6:45 pm
Location: Norway

Re: Application / user / program paths...

Post by Trond »

By the way, local appdata is for cache and similar.
wallgod
User
User
Posts: 48
Joined: Wed Oct 06, 2010 2:03 pm

Re: Application / user / program paths...

Post by wallgod »

Image
Procrastinators unite... tomorrow!
User avatar
blueznl
PureBasic Expert
PureBasic Expert
Posts: 6166
Joined: Sat May 17, 2003 11:31 am
Contact:

Re: Application / user / program paths...

Post by blueznl »

Could I have a few other dumps for this? Especially non-english non-XP dumps. I can produce Vista64, Windows 7 64 bit and Windows XP 32 dumps, but I'm especially interested in 'strange but legal' setups where people run with limited rights, have changed their default folders, work in a different language, etcetera...

(It's for a new section of the Survival Guide.)

Code: Select all

EnableExplicit
;
Global width.i = 700
Global height.i = 500
Global event.i
Global x_retval_string.s
Global x_retval.i

Procedure.s x_getspecialfolderlocation(type.i)                                               
  Protected folderid.i
  ;
  ; *** retrieve a special folder name
  ;
  ; in:      type.i
  ; retval:  .s                - string containing the path
  ; out:     x_retval_string.s - as retval
  ;          x_retval.i        - 0 aka #TRUE if successful
  ;
  ; first retrieve a pointer to the itemidlist structure of a 'special folder'
  ; followed by retrieving the path from that imtemidlist structure
  ;
  x_retval = SHGetSpecialFolderLocation_(0,type,@folderid)
  If x_retval = 0
    x_retval_string = Space(#MAX_PATH)
    If SHGetPathFromIDList_(folderid,@x_retval_string) = 0
      x_retval = 1
    ElseIf Right(x_retval_string,1) <> "\"
      x_retval_string = x_retval_string+"\"
    EndIf
    ;
    ; free the itemidlist
    ;
    CoTaskMemFree_(folderid)
  EndIf
  If x_retval <> 0
    x_retval_string = ""
  EndIf
  ProcedureReturn x_retval_string                                                              
EndProcedure

OpenWindow(1,10,10,width,height,"Test",#PB_Window_ScreenCentered|#PB_Window_SystemMenu)
ListIconGadget(1,2,2,width-2,height-2,"Item",200,#PB_ListIcon_GridLines)
AddGadgetColumn(1,1,"Value",800)
;
; which OS
;
If OSVersion() < #PB_OS_Windows_NT3_51
  AddGadgetItem(1,-1,"OSVersion()"+#LF$+Str(OSVersion())+" unknown older version")
Else
  Select OSVersion()
  Case #PB_OS_Windows_NT3_51
    AddGadgetItem(1,-1,"OSVersion()"+#LF$+Str(OSVersion())+" Windows NT3")
  Case #PB_OS_Windows_95
    AddGadgetItem(1,-1,"OSVersion()"+#LF$+Str(OSVersion())+" Windows 95")
  Case #PB_OS_Windows_NT_4
    AddGadgetItem(1,-1,"OSVersion()"+#LF$+Str(OSVersion())+" Windows NT4")
  Case #PB_OS_Windows_98
    AddGadgetItem(1,-1,"OSVersion()"+#LF$+Str(OSVersion())+" Windows 98")
  Case #PB_OS_Windows_ME
    AddGadgetItem(1,-1,"OSVersion()"+#LF$+Str(OSVersion())+" Windows ME")
  Case #PB_OS_Windows_2000
    AddGadgetItem(1,-1,"OSVersion()"+#LF$+Str(OSVersion())+" Windows 2000")
  Case #PB_OS_Windows_XP
    AddGadgetItem(1,-1,"OSVersion()"+#LF$+Str(OSVersion())+" Windows XP")
  Case #PB_OS_Windows_Server_2003
    AddGadgetItem(1,-1,"OSVersion()"+#LF$+Str(OSVersion())+" Windows Server 2003")
  Case #PB_OS_Windows_Vista
    AddGadgetItem(1,-1,"OSVersion()"+#LF$+Str(OSVersion())+" Windows Vista")
  Case #PB_OS_Windows_Server_2008
    AddGadgetItem(1,-1,"OSVersion()"+#LF$+Str(OSVersion())+" Windoes Server 2008")
  Case #PB_OS_Windows_7
    AddGadgetItem(1,-1,"OSVersion()"+#LF$+Str(OSVersion())+" Windows 7")
  Case #PB_OS_Windows_Future
    AddGadgetItem(1,-1,"OSVersion()"+#LF$+Str(OSVersion())+" unknown version (too new)")
  Default
    AddGadgetItem(1,-1,"OSVersion()"+#LF$+Str(OSVersion())+" failed (should not happen)")
  EndSelect
EndIf
;
AddGadgetItem(1,-1,"")
AddGadgetItem(1,-1,"ProgramFilename()"+#LF$+ProgramFilename())
AddGadgetItem(1,-1,"GetCurrentDirectory()"+#LF$+GetCurrentDirectory())
AddGadgetItem(1,-1,"GetHomeDirectory()"+#LF$+GetHomeDirectory())
AddGadgetItem(1,-1,"GetTemporaryDirectory()"+#LF$+GetTemporaryDirectory())
;
AddGadgetItem(1,-1,"")
AddGadgetItem(1,-1,"SHGetSpecialFolderLocation_()")
AddGadgetItem(1,-1,"  #CSIDL_PERSONAL"+#LF$+x_getspecialfolderlocation(#CSIDL_PERSONAL))
AddGadgetItem(1,-1,"  #CSIDL_APPDATA"+#LF$+x_getspecialfolderlocation(#CSIDL_APPDATA))
AddGadgetItem(1,-1,"  #CSIDL_LOCAL_APPDATA"+#LF$+x_getspecialfolderlocation(#CSIDL_LOCAL_APPDATA))
AddGadgetItem(1,-1,"  #CSIDL_COMMON_APPDATA"+#LF$+x_getspecialfolderlocation(#CSIDL_COMMON_APPDATA))
AddGadgetItem(1,-1,"  #CSIDL_WINDOWS"+#LF$+x_getspecialfolderlocation(#CSIDL_WINDOWS))
AddGadgetItem(1,-1,"  #CSIDL_SYSTEM"+#LF$+x_getspecialfolderlocation(#CSIDL_SYSTEM))
AddGadgetItem(1,-1,"  #CSIDL_PROGRAM_FILES_COMMON"+#LF$+x_getspecialfolderlocation(#CSIDL_PROGRAM_FILES_COMMON))
AddGadgetItem(1,-1,"  #CSIDL_COMMON_DOCUMENTS"+#LF$+x_getspecialfolderlocation(#CSIDL_COMMON_DOCUMENTS))
AddGadgetItem(1,-1,"  #SHGFP_TYPE_CURRENT"+#LF$+x_getspecialfolderlocation(#SHGFP_TYPE_CURRENT))
AddGadgetItem(1,-1,"  #SHGFP_TYPE_DEFAULT"+#LF$+x_getspecialfolderlocation(#SHGFP_TYPE_DEFAULT))
;
AddGadgetItem(1,-1,"")
AddGadgetItem(1,-1,"GetEnvironmentVariable()")
AddGadgetItem(1,-1,"  USERPROFILE"+#LF$+GetEnvironmentVariable("USERPROFILE"))
AddGadgetItem(1,-1,"  APPDATA"+#LF$+GetEnvironmentVariable("APPDATA"))
AddGadgetItem(1,-1,"  HOMEPATH"+#LF$+GetEnvironmentVariable("HOMEPATH"))
AddGadgetItem(1,-1,"  TEMP"+#LF$+GetEnvironmentVariable("TEMP"))
AddGadgetItem(1,-1,"  TMP"+#LF$+GetEnvironmentVariable("TMP"))
AddGadgetItem(1,-1,"  CLIENTNAME"+#LF$+GetEnvironmentVariable("CLIENTNAME"))
AddGadgetItem(1,-1,"  SYSTEMDRIVE"+#LF$+GetEnvironmentVariable("SYSTEMDRIVE"))
AddGadgetItem(1,-1,"  SYSTEMROOT"+#LF$+GetEnvironmentVariable("SYSTEMROOT"))
AddGadgetItem(1,-1,"  ALLUSERSPROFILE"+#LF$+GetEnvironmentVariable("ALLUSERSPROFILE"))
AddGadgetItem(1,-1,"  PATHEXT"+#LF$+GetEnvironmentVariable("PATHEXT"))

Repeat
  event = WaitWindowEvent()
Until event = #PB_Event_CloseWindow
( PB6.00 LTS Win11 x64 Asrock AB350 Pro4 Ryzen 5 3600 32GB GTX1060 6GB)
( The path to enlightenment and the PureBasic Survival Guide right here... )
Post Reply