Ejemplo n.º 1
0
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);
}
Ejemplo n.º 2
0
/* 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);
}
Ejemplo n.º 3
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;
}