I am using the following code to create a shortcut (thanks to whomever created it).
My question is... How were the offets for each method calculated? I'd like to use the SetIconLocation() method to set a different icon than the default one.
--Dave
------------------
Home of the BASIC Gurus
www.basicguru.com
My question is... How were the offets for each method calculated? I'd like to use the SetIconLocation() method to set a different icon than the default one.
--Dave
Code:
SUB CreateLink (BYVAL CSIDL AS LONG, LnkName AS ASCIIZ, _ ExePath AS ASCIIZ, Arguments AS ASCIIZ, WorkDir AS ASCIIZ, _ BYVAL ShowCmd AS DWORD, Comment AS ASCIIZ) LOCAL TmpAsciiz AS ASCIIZ * %MAX_PATH, TmpWide AS ASCIIZ * (2 * %MAX_PATH) LOCAL psl AS DWORD PTR, ppf AS DWORD PTR, pp AS DWORD PTR, lResult AS DWORD LOCAL CLSID_ShellLink AS GUID, IID_IShellLink AS GUID, _ CLSCTX_INPROC_SERVER AS DWORD, IID_Persist AS GUID DEFINE_OLEGUID CLSID_ShellLink, &H00021401, 0, 0 DEFINE_OLEGUID IID_IShellLink, &H000214EE, 0, 0 DEFINE_OLEGUID IID_Persist, &H0000010B, 0, 0 CLSCTX_INPROC_SERVER = 1 CoInitialize %Null IF ISFALSE(CoCreateInstance (CLSID_ShellLink, %Null, CLSCTX_INPROC_SERVER, IID_IShellLink, psl)) THEN pp = @psl + 80: CALL DWORD @pp USING Sub2 (BYVAL psl, ExePath) '21 pp = @psl + 44: CALL DWORD @pp USING Sub2 (BYVAL psl, Arguments) '12 pp = @psl + 36: CALL DWORD @pp USING Sub2 (BYVAL psl, WorkDir) '10 pp = @psl + 60: CALL DWORD @pp USING Sub2 (BYVAL psl, BYVAL ShowCmd) '16 pp = @psl + 28: CALL DWORD @pp USING Sub2 (BYVAL psl, Comment) '8 pp = @psl: CALL DWORD @pp USING Sub3 (BYVAL psl, IID_Persist, ppf) TO lResult IF lResult = 0 THEN DIM pidl AS DWORD TmpAsciiz = CURDIR$ IF ISFALSE(SHGetSpecialFolderLocation(BYVAL %HWND_DESKTOP, BYVAL CSIDL, BYVAL VARPTR(pidl))) THEN SHGetPathFromIDList BYVAL pidl, TmpAsciiz CoTaskMemFree BYVAL pidl END IF TmpAsciiz = TmpAsciiz + "\" + LnkName + ".Lnk" MultiByteToWideChar %CP_ACP, 0, TmpAsciiz, -1, TmpWide, %MAX_PATH pp = @ppf + 24 CALL DWORD @pp USING Sub3 (BYVAL ppf, TmpWide, BYVAL %True) pp = @ppf + 8 CALL DWORD @pp USING Sub1 (BYVAL ppf) END IF pp = @psl + 8: CALL DWORD @pp USING Sub1 (BYVAL psl) END IF CoUninitialize END SUB
------------------
Home of the BASIC Gurus
www.basicguru.com
Comment