File "ReadShortcut.inc"
Path: /ShuffleGUI/inc/ReadShortcut.inc
File size: 5.77 KB
MIME-type:
Charset: utf-8
'--------------------------------------------------------------------------------
' This is ReadShortcut.inc v0.2 for PBWin9. Usage:
' ? ReadShortcut (PathToLnkFile)
'--------------------------------------------------------------------------------
#INCLUDE ONCE "Win32Api.inc"
#INCLUDE ONCE "ObjBase.inc"
'--------------------------------------------------------------------------------
%HOTKEYF_SHIFT = 1
%HOTKEYF_CONTROL = 2
%HOTKEYF_ALT = 4
%HOTKEYF_EXT = 8
'--------------------------------------------------------------------------------
TYPE LinkType
zLinkFolder AS ASCIIZ * %MAX_PATH 'Folder holding the .LNK file
zLinkName AS ASCIIZ * %MAX_PATH 'Shortcut .LNK file name
zExeName AS ASCIIZ * %MAX_PATH 'Target .exe path and name
zArguments AS ASCIIZ * %MAX_PATH 'Arguments
zWorkDir AS ASCIIZ * %MAX_PATH 'Working directory
ShowFlag AS DWORD 'Show flag: %SW_SHOWNORMAL %SW_MAXIMIZE %SW_SHOWMINIMIZED
zComment AS ASCIIZ * %MAX_PATH 'Comment
zIconFile AS ASCIIZ * %MAX_PATH 'Icon path, $NUL for current .exe icon
IconIndex AS DWORD 'Icon index, zero based
zHotKey AS ASCIIZ * 2 'Hotkey letter
casHotKey AS WORD 'Hotkey Control, Alt and Shift state: %HOTKEYF_SHIFT %HOTKEYF_CONTROL %HOTKEYF_ALT %HOTKEYF_EXT
END TYPE
'--------------------------------------------------------------------------------
FUNCTION ReadShortcut(BYVAL LnkPath AS STRING) AS STRING
LOCAL Link AS LinkType
Link.zLinkName = (PATHNAME$(NAMEX, LnkPath))
Link.zLinkFolder = (PATHNAME$(PATH, LnkPath))
LinkQuery(Link)
FUNCTION = "Link folder :" & $TAB & Link.zLinkFolder & $CRLF & _
"Link name :" & $TAB & Link.zLinkName & $CRLF & _
"Exe name :" & $TAB & Link.zExeName & $CRLF & _
"Arguments :" & $TAB & Link.zArguments & $CRLF & _
"Working folder :" & $TAB & Link.zWorkDir & $CRLF & _
"Show flag :" & $TAB & CHOOSE$(Link.ShowFlag, _
"Normal", "Minimize", "Maximize", "NoActivate", "Show", _
"Minimize", "MinNoActivate", "ShowNa", "Restore", "Default", _
"ForceMinimize") & " (" & FORMAT$(Link.ShowFlag) & ")" & $CRLF & _
"Comment :" & $TAB & Link.zComment & $CRLF & _
"Icon file :" & $TAB & $TAB & Link.zIconFile & $CRLF & _
"Icon index :" & $TAB & FORMAT$(Link.IconIndex) & $CRLF & _
"Hotkey :" & $TAB & $TAB & _
IIF$((Link.casHotKey AND %HOTKEYF_SHIFT) , "Shift " , "") & _
IIF$((Link.casHotKey AND %HOTKEYF_CONTROL), "Control ", "") & _
IIF$((Link.casHotKey AND %HOTKEYF_ALT) , "Alt " , "") & _
IIF$((Link.casHotKey AND %HOTKEYF_EXT) , "Ext " , "") & _
Link.zHotKey
END FUNCTION
'--------------------------------------------------------------------------------
DECLARE FUNCTION F1(P1 AS ANY) AS DWORD
DECLARE FUNCTION F2(P1 AS ANY, P2 AS ANY) AS DWORD
DECLARE FUNCTION F3(P1 AS ANY, P2 AS ANY, P3 AS ANY) AS DWORD
DECLARE FUNCTION F4(P1 AS ANY, P2 AS ANY, P3 AS ANY, P4 AS ANY) AS DWORD
DECLARE FUNCTION F5(P1 AS ANY, P2 AS ANY, P3 AS ANY, P4 AS ANY, P5 AS ANY) AS DWORD
'--------------------------------------------------------------------------------
FUNCTION LinkQuery(BYREF Link AS LinkType)AS LONG
LOCAL IID_Persist AS GUID
LOCAL CLSID_ShellLink AS GUID
LOCAL IID_IShellLink AS GUID
LOCAL FileData AS WIN32_FIND_DATA
LOCAL zBuffer AS ASCIIZ * %MAX_PATH
LOCAL zBufferWide AS ASCIIZ * %MAX_PATH * 2
LOCAL PP AS DWORD POINTER
LOCAL PPF AS DWORD POINTER
LOCAL PSL AS DWORD POINTER
LOCAL Flags AS DWORD
LOCAL HotKey AS DWORD
LOCAL Retval AS LONG
CLSID_ShellLink = CHR$(001, 20, 2, 0, 0, 0, 0, 0, 192, 0, 0, 0, 0, 0, 0, 70)
IID_IShellLink = CHR$(238, 20, 2, 0, 0, 0, 0, 0, 192, 0, 0, 0, 0, 0, 0, 70)
IID_Persist = CHR$(011, 01, 0, 0, 0, 0, 0, 0, 192, 0, 0, 0, 0, 0, 0, 70)
IF CoCreateInstance(CLSID_ShellLink, BYVAL NOTHING, 1, IID_IShellLink, PSL) = %S_OK THEN
PP = @PSL : CALL DWORD @PP USING F3(BYVAL PSL, IID_Persist, PPF) TO Retval
zBuffer = Link.zLinkFolder & Link.zLinkName
Retval = MultiByteToWideChar(%CP_ACP, 0, zBuffer, -1, BYVAL VARPTR(zBufferWide), (%MAX_PATH * 2))
PP = @PPF + 20 : CALL DWORD @PP USING F3(BYVAL PPF, zBufferWide, BYVAL %True) 'SetIDList
PP = @PSL + 12 : CALL DWORD @PP USING F5(BYVAL PSL, Link.zExeName, BYVAL %MAX_PATH, FileData, Flags) 'Get Path & zExeName
IF LEN(Link.zExeName) THEN
FUNCTION = %TRUE
PP = @PSL + 24 : CALL DWORD @PP USING F5(BYVAL PSL, Link.zComment, BYVAL %MAX_PATH, FileData, Flags) 'Comment
PP = @PSL + 32 : CALL DWORD @PP USING F5(BYVAL PSL, Link.zWorkDir, BYVAL %MAX_PATH, FileData, Flags) 'WorkDir
PP = @PSL + 40 : CALL DWORD @PP USING F5(BYVAL PSL, Link.zArguments, BYVAL %MAX_PATH, FileData, Flags) 'Argument
PP = @PSL + 48 : CALL DWORD @PP USING F2(BYVAL PSL, Hotkey) 'HotKey: %HOTKEYF_SHIFT=1 HOTKEYF_CONTROL=2 %HOTKEYF_ALT=4 % %HOTKEYF_EXT=8
Link.zHotKey = CHR$(LO(WORD, Hotkey))
Link.casHotKey = HI(BYTE, Hotkey)
PP = @PSL + 56 : CALL DWORD @PP USING F2(BYVAL PSL, Link.ShowFlag) 'Show Normal-Maximize-Minimize
PP = @PSL + 64 : CALL DWORD @PP USING F4(BYVAL PSL, Link.zIconFile, BYVAL %MAX_PATH, Link.IconIndex) 'External icon file and index
END IF
PP = @PPF + 8: CALL DWORD @PP USING F1( BYVAL PPF ) 'Release the persistant file
PP = @PSL + 8: CALL DWORD @PP USING F1( BYVAL PSL ) 'Unbind the shell link object from the persistent file
END IF
END FUNCTION
'--------------------------------------------------------------------------------