File "CreateShortcut.inc"
Path: /MyWebradios/inc/CreateShortcut.inc
File size: 4.15 KB
MIME-type:
Charset: utf-8
'--------------------------------------------------------------------------------
' This is CreateShortcut.inc for PBWin9. Usage:
' CreateShortcut _
' targetfile, _ ' 1. the link file to be created
' EXE.FULL$, _ ' 2. the file/document where the shortcut should point to
' (dw_script), _ ' 3. command-line parameters
' EXE.PATH$, _ ' 4. the folder where the executable file should start in
' %SW_SHOW, _ ' 5. %SW_SHOW, %SW_HIDE etc.
' EXE.FULL$, _ ' 6. icon file or executable file containing an icon
' 0, _ ' 7. icon index in the aforementioned file
' ("(c) "+dw_author+" - v."+dw_ver) ' 8. any comment (stored in the shortcut)
'--------------------------------------------------------------------------------
' Prototypes
DECLARE FUNCTION IShellLink_Call0(BYVAL pUnk AS LONG) AS LONG
DECLARE FUNCTION IShellLink_Call1(BYVAL pUnk AS LONG, BYVAL p1 AS LONG) AS LONG
DECLARE FUNCTION IShellLink_Call2(BYVAL pUnk AS LONG, BYVAL p1 AS LONG, BYVAL p2 AS LONG) AS LONG
DECLARE FUNCTION CoCreateInstance LIB "ole32.dll" ALIAS "CoCreateInstance" _
(rclsid AS GUIDAPI, pUnkOuter AS ANY, BYVAL dwClsContext AS DWORD, riid AS GUIDAPI, ppv AS DWORD) AS LONG
DECLARE FUNCTION CoInitialize LIB "ole32.dll" ALIAS "CoInitialize" (pvReserved AS ANY) AS LONG
DECLARE SUB CoUninitialize LIB "ole32.dll" ALIAS "CoUninitialize" ()
'--------------------------------------------------------------------------------
FUNCTION CreateShortcut( _
BYVAL sTargetLinkName AS STRING _
, BYVAL sSourceFileName AS STRING _
, BYVAL sArguments AS STRING _
, BYVAL sWorkDir AS STRING _
, BYVAL nShowCmd AS LONG _
, BYVAL sIconFile AS STRING _
, BYVAL nIconIndex AS LONG _
, BYVAL sComment AS STRING _
) AS LONG
LOCAL CLSID_ShellLink AS STRING * 16
LOCAL IID_IShellLink AS STRING * 16
LOCAL IID_Persist AS STRING * 16
LOCAL nResult AS LONG
LOCAL pShellLnk AS DWORD PTR
LOCAL pPersist AS DWORD PTR
' IShellLink interface
' IID = 000214EE-0000-0000-C000-000000000046
' Inherited interface = IUnknown
CLSID_ShellLink = MKL$(&H00021401) & CHR$(0, 0, 0, 0, &HC0, 0, 0, 0, 0, 0, 0, &H46)
IID_IShellLink = MKL$(&H000214EE) & CHR$(0, 0, 0, 0, &HC0, 0, 0, 0, 0, 0, 0, &H46)
IID_Persist = MKL$(&H0000010B) & CHR$(0, 0, 0, 0, &HC0, 0, 0, 0, 0, 0, 0, &H46)
sTargetLinkName = UCODE$(sTargetLinkName)
CALL CoInitialize(BYVAL 0&)
IF CoCreateInstance(BYVAL VARPTR(CLSID_ShellLink), BYVAL 0&, 1, BYVAL VARPTR(IID_IShellLink), pShellLnk) = 0 THEN
' IShellLink::SetPath
CALL DWORD @@pShellLnk[20] USING IShellLink_Call1(pShellLnk, STRPTR(sSourceFileName))
' IShellLink::SetsArguments
CALL DWORD @@pShellLnk[11] USING IShellLink_Call1(pShellLnk, STRPTR(sArguments))
' IShellLink::SetWorkingDirectory
CALL DWORD @@pShellLnk[9] USING IShellLink_Call1(pShellLnk, STRPTR(sWorkDir))
' IShellLink::SetnShowCmd
CALL DWORD @@pShellLnk[15] USING IShellLink_Call1(pShellLnk, nShowCmd)
' IShellLink::SetDescription
CALL DWORD @@pShellLnk[7] USING IShellLink_Call1(pShellLnk, STRPTR(sComment))
' Obtain persist interface (QueryInterface)
CALL DWORD @@pShellLnk[0] USING IShellLink_Call2(pShellLnk, VARPTR(IID_Persist), VARPTR(pPersist))
' IShellLink::SetIconLocation
CALL DWORD @@pShellLnk[17] USING IShellLink_Call2(pShellLnk, STRPTR(sIconFile), 0)
IF nResult = 0 THEN
' Convert to unicode
' IPersistFile::Save
CALL DWORD @@pPersist[6] USING IShellLink_Call2(pPersist, STRPTR(sTargetLinkName), 1)
' Release
CALL DWORD @@pPersist[2] USING IShellLink_Call0(pPersist)
END IF
' Release
CALL DWORD @@pShellLnk[2] USING IShellLink_Call0(pShellLnk)
FUNCTION = -1
END IF
CALL CoUninitialize()
END FUNCTION
'--------------------------------------------------------------------------------