Your welcome, Doug

Dennis

-----Original Message-----
From: [email protected] [mailto:[email protected]] On Behalf Of Doug Hamilton
Sent: Friday, July 25, 2014 1:25 PM
To: RBASE-L Mailing List
Subject: [RBASE-L] - RE: Path of User's Desktop

Yup, that works fine.  Thanks much Dennis.
And I believe you on the trailing nulls, Mike.  :)
Like I said, worked fine for me too until sometime ...

Doug

On 7/25/2014 12:24 PM, MikeB wrote:
> Yeah, use Dennis code.  Better to check if one is there, just in case..
>
>> -----Original Message-----
>> From: [email protected] [mailto:[email protected]] On Behalf Of Dennis
>> McGrath
>> Sent: Friday, July 25, 2014 1:20 PM
>> To: RBASE-L Mailing List
>> Subject: [RBASE-L] - RE: Path of User's Desktop
>>
>> Doug,
>>
>> SLOC is working correctly.
>>
>> I suggest you change your code to:
>>
>> set var vInt int = 0
>> set var vInt = (SLOC(.strpath, (CHAR(0))) if vint > 0 then
>>     SET VAR gUserDeskTop = (SGET(.strpath, (.vInt - 1), 1)) else
>>     SET VAR gUserDeskTop = (TRIM(.strpath)) endif
>>
>> and try tracing with watch variables to see what is happening
>>
>>
>> From: [email protected] [mailto:[email protected]] On Behalf Of Doug
>> Hamilton
>> Sent: Friday, July 25, 2014 12:00 PM
>> To: RBASE-L Mailing List
>> Subject: [RBASE-L] - Path of User's Desktop
>>
>> Back Jan '11, Mike Byerley posted a small RBase routine using stdcall
>> to get the path to the user's desktop.
>> It has worked flawlessly until I did some testing yesterday on a
>> routine that uses Mike's code.  The entire code is below for context,
>> but the specific command where the path is lost is:
>> SET VAR gUserDeskTop = (SGET(.strpath, ((SLOC(.strpath, (CHAR(0)))) -
>> 1), 1))
>>
>> Variable strpath is predefined as 260 null characters.
>> The correct path is returned in the variable strpath; the SGET's
>> purpose is extract just the path from the 260 characters (path + nulls)
>> that was returned by the dlcall.
>> However, it appears that strpath is already trimmed of trailing nulls -
>> or any other characters that I've tried predefining in strpath.  Hence
>> the SLOC chokes and gUserDeskTop that is returned is blank.
>> So I guess the question is: Are trailing characters automatically
>> trimmed in the dlcall?
>> Is this a fluke on my system or a permanent update for which I should
>> remove the SGET command?
>> Is this a change in a Win 7 update or an RBase update? I've scanned 4
>> What's New in R:Base looking for "trim" and "trail" but couldn't find
>> any relevant references.
>>
>> RBase 9.5.4.30717 (32)
>> Win 7, SP1
>>
>> Just wondering what the best course of action should be.
>> TIA,
>> Doug
>>
>> --UserDesktop.RMD  get full path to user's desktop --Courtesy Mike
>> Beyerly, 01/13/11 {demo of SHGetSpecialFolderPath function mbyerley
>> 6/1/2008 }
>>
>> SET VAR max_path INTEGER = 260
>> SET VAR lngfolderfound INTEGER = NULL
>> SET VAR strpath TEXT = NULL
>> SET VAR gUserDeskTop TEXT = NULL
>> IF (chkfunc('SHGetSpecialFolderPathA')) = 0 THEN
>>    STDCALL function 'SHGetSpecialFolderPathA' alias
>> 'SHGetSpecialFolderPath' +
>>     (integer, integer, ptr text (260), integer) : integer ENDIF
>>
>> SET VAR lngfolder = 16
>> { Set the variable as a BUFFER of MAX_PATH Characters filled with
>> Nulls.  The
>>    VAR is passed by Reference and is filled with the PATH in the
>> function.  When
>>    VARs are created this way, you can't trim the length, so we look for
>> the first
>>    NULL (Char(0)) in the returned value and SGET everything up to that
>> value
>>    to COPY to the VAR specfolder.  As Simple as that.  If you wanted to
>> Create the
>>    Special Folder if it is NOT FOUND, you would change the first 0 in
>> the DLCALL
>>    argument to a NON ZERO value.
>> }
>>
>> -- CREATE the BUFFER of length max_path for SET VAR strpath =
>> (SFIL((CHAR(0)), .max_path))
>>
>> SET VAR lngfolderfound = +
>>    (dlcall('Shell32','SHGetSpecialFolderPathA', 0, lngfolder, strpath,
>> 0))
>>
>> IF lngfolderfound > 0 THEN
>>    -- The strpath var has to be SGET to omit the trailing nulls from the
>> BUFFER
>>    SET VAR gUserDeskTop = (SGET(.strpath, ((SLOC(.strpath, (CHAR(0)))) -
>> 1), 1)) ENDIF
>>
>> CLEAR VAR  +
>>   lngfolder, +
>>   lngfolderfound, +
>>   max_path, +
>>   strpath
>>
>> RETURN
>>
>> ________________________________________
>>
>> This email is free from viruses and malware because avast! Antivirus
>> protection is active.
>
>


---
This email is free from viruses and malware because avast! Antivirus protection 
is active.
http://www.avast.com


Reply via email to