| 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 0void 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 1int 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;}#elseint 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
 |