- DdeCommand ("[CreateGroup (\"Gnu Emacs\")]");
- DdeCommand ("[ReplaceItem (Emacs)]");
- if (argc > 2)
- sprintf (additem, "[AddItem (\"%s\\bin\\%s\", Emacs, \"%s\")]",
- emacs_path, prog_name, argv[2]);
- else
- sprintf (additem, "[AddItem (\"%s\\bin\\%s\", Emacs)]",
- emacs_path, prog_name);
- DdeCommand (additem);
+ if (strlen (start_folder) < (MAX_PATH - 20))
+ {
+ BOOL retval;
+
+ strcat (start_folder, "\\Gnu Emacs");
+ if (CreateDirectory (start_folder, NULL)
+ || GetLastError () == ERROR_ALREADY_EXISTS)
+ {
+ char full_emacs_path[MAX_PATH + 1];
+ IPersistFile *lnk;
+ strcat (start_folder, "\\Emacs.lnk");
+ sprintf (full_emacs_path, "%s\\bin\\%s", emacs_path, prog_name);
+ IShellLinkA_SetPath (shortcut, full_emacs_path);
+ IShellLinkA_SetDescription (shortcut, "GNU Emacs");
+ result = IShellLinkA_QueryInterface (shortcut, &IID_IPersistFile,
+ (void **) &lnk);
+ if (SUCCEEDED (result))
+ {
+ wchar_t unicode_path[MAX_PATH];
+ MultiByteToWideChar (CP_ACP, 0, start_folder, -1,
+ unicode_path, MAX_PATH);
+ if (SUCCEEDED (IPersistFile_Save (lnk, unicode_path, TRUE)))
+ shortcuts_created = 1;
+ IPersistFile_Release (lnk);
+ }
+ }
+ }
+ }
+
+ if (!shortcuts_created && com_available
+ && SHGetSpecialFolderPath (NULL, start_folder, CSIDL_PROGRAMS, 0))
+ {
+ /* Ensure there is enough room for "...\GNU Emacs\Emacs.lnk". */
+ if (strlen (start_folder) < (MAX_PATH - 20))
+ {
+ BOOL retval;