SaveBuffer of screencapture on desktop (path)

Blitz3D Forums/Blitz3D Programming/SaveBuffer of screencapture on desktop (path)

jtassinari(Posted 2010) [#1]
Hi there,

does anyone know how to save a screencapture on the "desktop"?

I use SaveBuffer (BackBuffer(), "temp.bmp")
Anything get out from SystemProperty (property$)?
I have seen some dos code as:

%HOMEDRIVE% => c:
%HOMEPATH% => \Documents and Settings\{username}
%USERPROFILE% => C:\Documents and Settings\{username}

(ref: http://vlaurie.com/computers2/Articles/environment.htm)

but i do not know how to reach the path location using Blitz3d commands...

Any Suggestion?

thanks indeed,
cheers,

jTassinari

Last edited 2010


_PJ_(Posted 2010) [#2]
Using the environment varables such as %USERPROFILE% works within B3D and is better (compatible with different Windows versions like Vista, 7) than just "C:\Documents and Settings\" etc.

So the path for the current user's desktop is:
"%USERPROFILE%\Desktop\" 

Alternatively, there's
"%ALLUSERSPROFILE%\Desktop\"

if you wanted the 'shared' desktop which is available to all users.


jtassinari(Posted 2010) [#3]
thanks man, i try and test it =)

cheers,

jTassinari


Warner(Posted 2010) [#4]
Alternatively, in the code archives, there is this lib which can retreive the locations of several 'special folders'. I'm not sure if \Desktop could be used on non-English versions of Windows.
http://www.blitzbasic.com/Community/posts.php?topic=49838


_PJ_(Posted 2010) [#5]
That's a good point, Warner.

Alternatively the display name for "Desktop" (and the path in fact)could be read from the Registry?

If you're going to go the DLL route, then I recommend using SHGetSPecialFolderPath() rather than the relative location one, especially since the Desktop is ALWAYS the root of the namespace.

Const CSIDL_DESKTOP                 = 0
Const CSIDL_INTERNET                = 1
Const CSIDL_PROGRAMS                = 2
Const CSIDL_CONTROLS                = 3
Const CSIDL_PRINTERS                = 4
Const CSIDL_PERSONAL                = 5
Const CSIDL_FAVORITES               = 6
Const CSIDL_STARTUP                 = 7
Const CSIDL_RECENT                  = 8
Const CSIDL_SENDTO                  = 9
Const CSIDL_BITBUCKET               = 16
Const CSIDL_STARTMENU               = 17
Const CSIDL_NETWORK                 = 18
Const CSIDL_NETHOOD                 = 19
Const CSIDL_FONTS                   = 20
Const CSIDL_TEMPLATES               = 21
Const CSIDL_COMMON_STARTMENU        = 22
Const CSIDL_COMMON_PROGRAMS         = 23
Const CSIDL_COMMON_STARTUP          = 24
Const CSIDL_COMMON_DESKTOPDIRECTORY = 25
Const CSIDL_APPDATA                 = 26
Const CSIDL_PRINTHOOD               = 27
Const CSIDL_LOCAL_APPDATA           = 28
Const CSIDL_ALTSTARTUP              = 29
Const CSIDL_COMMON_ALTSTARTUP       = 30
Const CSIDL_COMMON_FAVORITES        = 31
Const CSIDL_INTERNET_CACHE          = 32
Const CSIDL_COOKIES                 = 33
Const CSIDL_HISTORY                 = 34
Const CSIDL_COMMON_APPDATA          = 35
Const CSIDL_WINDOWS                 = 36
Const CSIDL_SYSTEM                  = 37
Const CSIDL_PROGRAM_FILES           = 38
Const CSIDL_MYPICTURES              = 39
Const CSIDL_PROFILE                 = 40
Const CSIDL_SYSTEMX86               = 41
Const CSIDL_PROGRAM_FILESX86        = 42
Const CSIDL_PROGRAM_FILES_COMMON    = 43
Const CSIDL_PROGRAM_FILES_COMMONX86 = 44
Const CSIDL_COMMON_TEMPLATES        = 45
Const CSIDL_COMMON_DOCUMENTS        = 46
Const CSIDL_COMMON_ADMINTOOLS       = 47
Const CSIDL_ADMINTOOLS              = 48
Const CSIDL_CONNECTIONS             = 49

Const CSIDL_FLAG_CREATE             = 32768
Const CSIDL_FLAG_DONT_VERIFY        = 16384
Const CSIDL_FLAG_MASK               = 65280

Const CSIDL_DESKTOPDIRECTORY        = $10
Const CSIDL_DRIVES                  = $11

Const MAX_PATH%=512

Print GetSpecialFolderPath()

Function GetSpecialFolderPath$(CSIDL%=0)
	Local bPathBank%=CreateBank(4)
	Local bInBank%=CreateBank(4)
	PokeInt(bInBank,0,CSIDL)
	CallDLL ("Shell32","SHGetSpecialFolderLocation",bInBank,bPathBank)
	FreeBank bInBank
	Local nIDList%=PeekInt(bPathBank,0)
	FreeBank bPathBank
	Local sReturn$=""
	If (nIDList)
		Local bIDBank%=CreateBank(MAX_PATH)
		PokeInt(bIDBank,0,nIDList)
		Local bReturnBank%=CreateBank(MAX_PATH)
		Local Valid%=CallDLL("Shell32","SHGetPathFromIDList",bIDBank,bReturnBank)
		If (Valid) Then sReturn=peekstring(bPathBank);PeekString(bReturnBank)
		FreeBank bIDBank
	End If
	Return sReturn$
End Function

Function PeekString$(bBank%,nOffset%=0)
	Local sReturn$=""
	Local Size%=BankSize(bBank)
	If ((Size)*(nOffset<(Size+1)))
		Local IterBytes%
		Local Byte%
		For IterBytes=nOffset To Size-1
			Byte=PeekByte(bBank,IterBytes)
			If (Byte)
				sReturn = sReturn + Chr$(Byte)
			Else
				Exit
			End If
		Next
	End If
	Return sReturn$
End Function