SaveBuffer of screencapture on desktop (path)
Blitz3D Forums/Blitz3D Programming/SaveBuffer of screencapture on desktop (path)
| ||
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 |
| ||
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. |
| ||
thanks man, i try and test it =) cheers, jTassinari |
| ||
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 |
| ||
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 |