Convert a short pathname to a longTag(s): Powerscript


The API GetLongPathName was introduced with Win98 and is unavailable on Win95 or WinNT but OK with XP.

[local external definition]
FUNCTION ulong GetLongPathName( &
  REF String lpszShortPath, &
  REF String lpszLongPath, &
  ULong cchBuffer ) &
LIBRARY "kernel32.dll" ALIAS FOR "GetLongPathNameA"


[powerscript]
ContextKeyword lcxk_base
string ls_path_short
string ls_path_long
string ls_values[]

this.GetContextService("Keyword", lcxk_base)
lcxk_base.GetContextKeywords("temp", ls_values)
IF Upperbound(ls_values) > 0 THEN
   ls_path_short = ls_values[1]
ELSE
   ls_path_short = "*UNDEFINED*"
END IF

MessageBox("short",ls_path_short)

// ex :  C:\DOCUME~1\Real\LOCALS~1\Temp

ls_path_long = space(255)

GetLongPathName(ls_path_short, ls_path_long, 255);

MessageBox("long",ls_path_long)

// ex :  C:\Documents and Settings\Real\Local Settings\Temp

To do the conversion long to short, use GetShortPathName API. In PB10, you may need to use the Unicode version, so use the "ALIAS GetLongPathNameW" instead.