123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327 |
- #include "Main.h"
- /*
- static HDDEDATA CALLBACK GroupDDECallback (UINT uiType, UINT uiFmt, HANDLE hConv,
- HSZ sz1, HSZ sz2, HDDEDATA hData, LONG lData1, LONG lData2) {
- return ((HDDEDATA) NULL);
- }
- static BOOL CreateGroup(HWND hwnd);
- static BOOL AddProgramItems (HWND hwnd, LPSTR szDummy);
- static CONVCONTEXT CCFilter = { sizeof (CONVCONTEXT), 0, 0, 0, 0L, 0L };
- static LONG lIdInst;
- static LONG lIdInst2;
- */
- //CreateShortCut(hwnd,"D:\\WINNT\\Profiles\\Administrator\\Application Data\\Microsoft\\Internet Explorer\\Quick Launch\\Winamp.lnk","C:\\winamp\\winamp.exe");
- //CreateShortCut(hwnd,"D:\\WINNT\\Profiles\\Administrator\\Desktop\\Winamp.lnk","C:\\winamp\\winamp.exe");
- #if 0
- void dde_adddesktop(HWND hwnd)
- {
- HKEY mp3Key;
- char name[MAX_PATH]="";
- if (RegOpenKey(HKEY_CURRENT_USER,"Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders",&mp3Key) == ERROR_SUCCESS)
- {
- int s=sizeof(name);
- if (RegQueryValueEx(mp3Key,"Desktop",0,NULL,name,&s) == ERROR_SUCCESS)
- {
- }
- RegCloseKey(mp3Key);
- }
- if (lstrlen(name))
- {
- char exe[MAX_PATH];
- GetModuleFileName(NULL,exe,sizeof(exe));
- lstrcat(name,"\\WINAMP.LNK");
- CreateShortCut(hwnd,name,exe,NULL,0);
- }
- }
- void dde_addquicklaunch(HWND hwnd)
- {
- HKEY mp3Key;
- char name[MAX_PATH]="";
- if (RegOpenKey(HKEY_CURRENT_USER,"Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders",&mp3Key) == ERROR_SUCCESS)
- {
- int s=sizeof(name);
- if (RegQueryValueEx(mp3Key,"AppData",0,NULL,name,&s) == ERROR_SUCCESS)
- {
- }
- RegCloseKey(mp3Key);
- }
- if (lstrlen(name))
- {
- char exe[MAX_PATH];
- GetModuleFileName(NULL,exe,sizeof(exe));
- lstrcat(name,"\\Microsoft\\Internet Explorer\\Quick Launch\\WINAMP.LNK");
- CreateShortCut(hwnd,name,exe,NULL,0);
- }
- }
- int dde_isquicklaunchavailable(void)
- {
- HKEY mp3Key;
- char name[MAX_PATH]="";
- if (RegOpenKey(HKEY_CURRENT_USER,"Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders",&mp3Key) == ERROR_SUCCESS)
- {
- int s=sizeof(name);
- if (RegQueryValueEx(mp3Key,"AppData",0,NULL,name,&s) == ERROR_SUCCESS)
- {
- }
- RegCloseKey(mp3Key);
- }
- if (lstrlen(name))
- {
- HANDLE h;
- WIN32_FIND_DATA fd;
- lstrcat(name,"\\Microsoft\\Internet Explorer\\Quick Launch");
- h=FindFirstFile(name,&fd);
- if (h != INVALID_HANDLE_VALUE)
- {
- FindClose(h);
- if (fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY ) return 1;
- }
- }
- return 0;
- }
- #if 1
- int dde_addstart(HWND hwnd)
- {
- HKEY mp3Key;
- char startMenu[MAX_PATH]="";
- if (RegOpenKey(HKEY_CURRENT_USER,"Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders",&mp3Key) == ERROR_SUCCESS)
- {
- int s=sizeof(startMenu)/sizeof(startMenu[0]);
- if (RegQueryValueEx(mp3Key, "Programs", 0, NULL, startMenu, &s) == ERROR_SUCCESS)
- {
- char exe[MAX_PATH], shortcut[MAX_PATH], target[MAX_PATH];
- GetModuleFileName(NULL,exe,sizeof(exe));
- // create Winamp folder
- PathAppend(startMenu, "Winamp");
- CreateDirectory(startMenu, NULL);
- // winamp.exe
- PathCombine(shortcut, startMenu, "Winamp.lnk");
- CreateShortCut(hwnd, shortcut, exe, NULL, 0);
- // we don't need the executable filename anymore, but we need its path
- PathRemoveFileSpec(exe);
-
- // whatsnew.txt
- PathCombine(target, exe, "whatsnew.txt");
- PathCombine(shortcut, startMenu, "What's new.lnk");
- CreateShortCut(hwnd, startMenu, target, NULL, 0);
-
- // uninstwa.exe
- PathCombine(shortcut, startMenu, "Uninstall Winamp.lnk");
- PathAppend(target, exe, "uninstwa.exe");
- CreateShortCut(hwnd, shortcut, target, NULL, 0);
- }
- RegCloseKey(mp3Key);
- }
- return 0;
- }
- #else
- int dde_addstart(HWND hwnd)
- {
- CreateGroup(hwnd);
- AddProgramItems (hwnd, NULL);
- return 0;
- }
- void dde_delstart(void)
- {
- HDDEDATA hData;
- LPSTR szText;
- LPSTR szCommand;
- HCONV hConv;
- HSZ szProgMan;
- LONG lResult;
- szText = VirtualAlloc (NULL, 64, MEM_COMMIT, PAGE_READWRITE);
- szCommand = VirtualAlloc (NULL, 128, MEM_COMMIT, PAGE_READWRITE);
- if (szText) {
- if (DdeInitialize(&lIdInst, (PFNCALLBACK) GroupDDECallback,
- (DWORD) APPCMD_CLIENTONLY, 0L)) {
- VirtualFree (szText, 128, MEM_DECOMMIT);
- return;
- }
- szProgMan = DdeCreateStringHandle (lIdInst, "PROGMAN", CP_WINANSI);
- if (szProgMan) {
- hConv = DdeConnect (lIdInst, szProgMan, szProgMan, &CCFilter);
- lstrcpy(szText,app_name);
- wsprintf (szCommand, "[DeleteGroup(%s)]", szText);
- hData = DdeCreateDataHandle (lIdInst, szCommand,
- lstrlen (szCommand) + 1, 0, (HSZ) NULL, CF_TEXT, 0L);
- if (!DdeClientTransaction ((LPBYTE) hData, 0xFFFFFFFF, hConv,
- (HSZ) NULL, 0, XTYP_EXECUTE, 10000, &lResult)) {
- lResult = DdeGetLastError (lIdInst);
- }
- DdeFreeStringHandle (lIdInst, szProgMan);
- DdeDisconnect (hConv);
- } else {
- lResult = DdeGetLastError (lIdInst);
- }
- VirtualFree (szText, 64, MEM_DECOMMIT);
- VirtualFree (szCommand, 64, MEM_DECOMMIT);
- DdeUninitialize (lIdInst);
- lIdInst = 0L;
- return;
- } else {
- }
- }
- static BOOL CreateGroup(HWND hwnd) {
- HDDEDATA hData;
- LPSTR szText;
- LPSTR szCommand;
- HCONV hConv;
- HSZ szProgMan;
- LONG lResult;
- szText = VirtualAlloc (NULL, 64, MEM_COMMIT, PAGE_READWRITE);
- szCommand = VirtualAlloc (NULL, 128, MEM_COMMIT, PAGE_READWRITE);
- if (szText) {
- if (DdeInitialize(&lIdInst, (PFNCALLBACK) GroupDDECallback,
- (DWORD) APPCMD_CLIENTONLY, 0L)) {
- // MessageBox (hwnd, "DDEML Initialization Failure", "Error", MB_OK);
- VirtualFree (szText, 128, MEM_DECOMMIT);
- return (FALSE);
- }
- szProgMan = DdeCreateStringHandle (lIdInst, "PROGMAN", CP_WINANSI);
- if (szProgMan) {
- hConv = DdeConnect (lIdInst, szProgMan, szProgMan, &CCFilter);
- lstrcpy(szText,app_name);
- wsprintf (szCommand, "[CreateGroup(%s)]", szText);
- hData = DdeCreateDataHandle (lIdInst, szCommand,
- lstrlen (szCommand) + 1, 0, (HSZ) NULL, CF_TEXT, 0L);
- if (!DdeClientTransaction ((LPBYTE) hData, 0xFFFFFFFF, hConv,
- (HSZ) NULL, 0, XTYP_EXECUTE, 10000, &lResult)) {
- lResult = DdeGetLastError (lIdInst);
- // MessageBox (hwnd, "DdeClientTransaction Failed", "Error",
- // MB_OK);
- }
- DdeFreeStringHandle (lIdInst, szProgMan);
- DdeDisconnect (hConv);
- } else {
- lResult = DdeGetLastError (lIdInst);
- }
- VirtualFree (szText, 64, MEM_DECOMMIT);
- VirtualFree (szCommand, 64, MEM_DECOMMIT);
- DdeUninitialize (lIdInst);
- lIdInst = 0L;
- return (TRUE);
- } else {
- // MessageBox (hwnd, "Memory Allocation failure", "Error", MB_OK);
- }
- return (FALSE);
- }
- static BOOL AddProgramItems (HWND hwnd, LPSTR szDummy) {
- HDDEDATA hData;
- HCONV hConv;
- HSZ szProgMan;
- int lSelCount;
- LONG lResult;
- LPLONG lpSelection;
- LPSTR szProgName;
- LPSTR szExePath;
- LPSTR szExecuteString;
- int iIndex;
- int iGroupCount;
- iGroupCount = 2;
- lSelCount = 3;
- lpSelection = VirtualAlloc (NULL, lSelCount * sizeof (int), MEM_COMMIT,PAGE_READWRITE);
- if (lpSelection) {
- if (DdeInitialize (&lIdInst2, (PFNCALLBACK) GroupDDECallback,
- (DWORD) APPCMD_CLIENTONLY, 0L)) {
- VirtualFree (lpSelection, lSelCount * sizeof (int), MEM_DECOMMIT);
- return (FALSE);
- }
- szProgMan = DdeCreateStringHandle (lIdInst2, "PROGMAN", CP_WINANSI);
- hConv = DdeConnect (lIdInst2, szProgMan, szProgMan, &CCFilter);
- DdeFreeStringHandle (lIdInst2, szProgMan);
- szProgName = VirtualAlloc (NULL, MAX_PATH * 2, MEM_COMMIT, PAGE_READWRITE);
- szExePath = szProgName + MAX_PATH;
- szExecuteString = VirtualAlloc (NULL, MAX_PATH * 4, MEM_COMMIT,
- PAGE_READWRITE);
- for (iIndex = 0; iIndex < lSelCount; iIndex++) {
- {
- static char *paths[4] = {
- "Winamp.exe",
- "WhatsNew.txt",
- "Winamp.exe"
- };
- static char *names[4] =
- {
- "Winamp",
- "What's New",
- "Uninstall Winamp",
- };
- lstrcpy(szProgName,names[iIndex]);
- {
- szExePath[0] = '\"';
- GetModuleFileName(NULL,szExePath+1,MAX_PATH);
- scanstr_back(szExePath,"\\",szExePath-1)[1]=0;
- lstrcat(szExePath,paths[iIndex]);
- lstrcat(szExePath,"\"");
- if (iIndex==2) lstrcat(szExePath," /UNINSTALL");
- }
- }
- // Create the command string to add the item.
- wsprintf (szExecuteString, "[AddItem(%s,%s)]", szExePath,
- (LPARAM) szProgName);
- // Create a DDEML Data handle for the command string.
- hData = DdeCreateDataHandle (lIdInst2, szExecuteString,
- lstrlen (szExecuteString) + 1, 0, (HSZ) NULL, CF_TEXT, 0L);
- // Send the command over to the program manager.
- if (!DdeClientTransaction ((LPBYTE) hData, 0xFFFFFFFF,
- hConv, (HSZ) NULL, 0, XTYP_EXECUTE, 1000, &lResult)) {
- lResult = DdeGetLastError (lIdInst2);
- }/*endIf*/
- }/*endFor*/
- // Release the memory allocated for path and name retrieval.
- VirtualFree (szProgName, MAX_PATH * 2, MEM_DECOMMIT);
- // Release the command line memory.
- VirtualFree (szExecuteString, MAX_PATH * 4, MEM_DECOMMIT);
- // Disoconnect the DDEML Conversation
- DdeDisconnect (hConv);
- // Release the memory allocate for the list selections.
- VirtualFree (lpSelection, lSelCount * sizeof (int), MEM_DECOMMIT);
- }/*endIf*/
- // Clear the selection in the lists.
- // Uninitialize the local conversation.
- DdeUninitialize (lIdInst2);
-
- lIdInst2 = 0L;
- return (TRUE);
- }/* end AddProgramItems */
- #endif
- #endif
|