16 * ROUTINES ___________________________________________________________________
20 void Shortcut_Init (void)
26 void Shortcut_Exit (void)
32 BOOL Shortcut_Create (LPTSTR pszTarget, LPCTSTR pszSource, LPTSTR pszDesc)
35 HRESULT rc = CoCreateInstance (CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER, IID_IShellLink, (void **)&psl);
39 rc = psl->QueryInterface (IID_IPersistFile, (void **)&ppf);
42 rc = psl->SetPath (pszSource);
45 rc = psl->SetDescription (pszDesc ? pszDesc : pszSource);
49 rc = ppf->Save (pszTarget, TRUE);
52 MultiByteToWideChar (CP_ACP, 0, pszTarget, -1, wsz, MAX_PATH);
53 rc = ppf->Save (wsz, TRUE);
61 return SUCCEEDED(rc) ? TRUE : FALSE;
65 void Shortcut_FixStartup (LPCTSTR pszLinkName, BOOL fAutoStart)
67 TCHAR szShortcut[ MAX_PATH ] = TEXT("");
70 if (RegOpenKey (HKEY_LOCAL_MACHINE, TEXT("Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders"), &hk) == 0)
72 DWORD dwSize = sizeof(szShortcut);
73 DWORD dwType = REG_SZ;
74 RegQueryValueEx (hk, TEXT("Common Startup"), NULL, &dwType, (LPBYTE)szShortcut, &dwSize);
75 if (szShortcut[0] == TEXT('\0'))
77 dwSize = sizeof(szShortcut);
79 RegQueryValueEx (hk, TEXT("Startup"), NULL, &dwType, (LPBYTE)szShortcut, &dwSize);
83 if (szShortcut[0] == TEXT('\0'))
85 GetWindowsDirectory (szShortcut, MAX_PATH);
86 lstrcat (szShortcut, TEXT("\\Start Menu\\Programs\\Startup"));
88 lstrcat (szShortcut, TEXT("\\"));
89 lstrcat (szShortcut, pszLinkName);
91 TCHAR szSource[ MAX_PATH ];
92 GetModuleFileName (GetModuleHandle(NULL), szSource, MAX_PATH);
96 Shortcut_Create (szShortcut, szSource);
98 else // (!g.fAutoStart)
100 DeleteFile (szShortcut);