BOOL WINAPI DeleteDesktopItemW(BOOL bCommonItem, LPCWSTR lpItemName) { WCHAR szLinkPath[MAX_PATH]; DPRINT("DeleteDesktopItemW() called\n"); if (!GetDesktopPath(bCommonItem, szLinkPath)) { DPRINT1("GetDesktopPath() failed\n"); return FALSE; } wcscat(szLinkPath, L"\\"); wcscat(szLinkPath, lpItemName); wcscat(szLinkPath, L".lnk"); DPRINT("Link path: '%S'\n", szLinkPath); return DeleteFileW (szLinkPath); }
/* Returns 1 on success, 0 on failure */ int InstallFiles(char *programpath) { char fullfilepath[1024]; char desktop[1024]; int retval = 0; CreateInstallDirectory(programpath); if (GetDesktopPath(desktop, 1024) == 0) { #ifdef DEBUG fprintf(stderr, "Couldnt obtain Desktop path.\n"); #endif desktop[0] = '\0'; } #ifdef DEBUG fprintf(stdout, "Desktop Path: %s\n", desktop); #endif strcat(desktop, "\\Vutam.lnk"); // Link name on DeskTop sprintf(fullfilepath, "%s\\%s", programpath, NAME_KEYTRANS); retval = MyCreateFile(fullfilepath, KeyTrans, LENGTH_KEYTRANS); sprintf(fullfilepath, "%s\\%s", programpath, NAME_KEYTRANSHOOKDLL); retval += MyCreateFile(fullfilepath, KeyTransHook, LENGTH_KEYTRANSHOOKDLL); sprintf(fullfilepath, "%s\\%s", programpath, NAME_VUTAMTTF); retval += MyCreateFile(fullfilepath, Vutam, LENGTH_VUTAMTTF); sprintf(fullfilepath, "%s\\%s", programpath, NAME_README); retval += MyCreateFile(fullfilepath, README, LENGTH_README); sprintf(fullfilepath, "%s\\%s", programpath, NAME_KEYTRANS); MakeDesktopLink(desktop, fullfilepath); if (retval == 4) return(1); else return(0); }
BOOL WINAPI AddDesktopItemW(BOOL bCommonDesktop, LPCWSTR lpItemName, LPCWSTR lpArguments, LPCWSTR lpIconLocation, INT iIcon, LPCWSTR lpWorkingDirectory, /* Optional */ WORD wHotKey, INT iShowCmd) { DYN_FUNCS Ole32; WCHAR szLinkPath[MAX_PATH]; WCHAR szArguments[MAX_PATH]; WCHAR szCommand[MAX_PATH]; WIN32_FIND_DATAW FindData; HANDLE hFind; LPWSTR Ptr; DWORD dwLength; IShellLinkW* psl; IPersistFile* ppf; HRESULT hr; BOOL bResult; DPRINT("AddDesktopItemW() called\n"); bResult = FALSE; if (!GetDesktopPath(bCommonDesktop, szLinkPath)) { DPRINT1("GetDesktopPath() failed\n"); return FALSE; } DPRINT("Desktop path: '%S'\n", szLinkPath); /* Make sure the path exists */ hFind = FindFirstFileW(szLinkPath, &FindData); if (hFind == INVALID_HANDLE_VALUE) { DPRINT("'%S' does not exist\n", szLinkPath); /* Create directory path */ if (!CreateDirectoryPath(szLinkPath, NULL)) return FALSE; } else { DPRINT("'%S' exists\n", szLinkPath); FindClose(hFind); } /* Append backslash, item name and ".lnk" extension */ wcscat(szLinkPath, L"\\"); wcscat(szLinkPath, lpItemName); wcscat(szLinkPath, L".lnk"); DPRINT("Link path: '%S'\n", szLinkPath); /* Split 'lpArguments' string into command and arguments */ Ptr = wcschr(lpArguments, L' '); DPRINT("Ptr %p lpArguments %p\n", Ptr, lpArguments); if (Ptr != NULL) { dwLength = (DWORD)(Ptr - lpArguments); DPRINT("dwLength %lu\n", dwLength); memcpy(szCommand, lpArguments, dwLength * sizeof(WCHAR)); szCommand[dwLength] = 0; Ptr++; wcscpy(szArguments, Ptr); } else { wcscpy(szCommand, lpArguments); szArguments[0] = 0; } DPRINT("szCommand: '%S'\n", szCommand); DPRINT("szArguments: '%S'\n", szArguments); /* Dynamically load ole32.dll */ if (!LoadDynamicImports(&DynOle32, &Ole32)) { DPRINT1("USERENV: Unable to load OLE32.DLL\n"); return FALSE; } Ole32.fn.CoInitialize(NULL); hr = Ole32.fn.CoCreateInstance(&CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER, &IID_IShellLinkW, (LPVOID*)&psl); if (!SUCCEEDED(hr)) { Ole32.fn.CoUninitialize(); UnloadDynamicImports(&Ole32); return FALSE; } hr = psl->lpVtbl->QueryInterface(psl, &IID_IPersistFile, (LPVOID*)&ppf); if (SUCCEEDED(hr)) { psl->lpVtbl->SetDescription(psl, lpItemName); psl->lpVtbl->SetPath(psl, szCommand); psl->lpVtbl->SetArguments(psl, szArguments); psl->lpVtbl->SetIconLocation(psl, lpIconLocation, iIcon); if (lpWorkingDirectory != NULL) { psl->lpVtbl->SetWorkingDirectory(psl, lpWorkingDirectory); } else { psl->lpVtbl->SetWorkingDirectory(psl, L"%HOMEDRIVE%%HOMEPATH%"); } psl->lpVtbl->SetHotkey(psl, wHotKey); psl->lpVtbl->SetShowCmd(psl, iShowCmd); hr = ppf->lpVtbl->Save(ppf, szLinkPath, TRUE); if (SUCCEEDED(hr)) bResult = TRUE; ppf->lpVtbl->Release(ppf); } psl->lpVtbl->Release(psl); Ole32.fn.CoUninitialize(); UnloadDynamicImports(&Ole32); DPRINT("AddDesktopItemW() done\n"); return bResult; }