Initial community commit
This commit is contained in:
parent
537bcbc862
commit
fc06254474
16440 changed files with 4239995 additions and 2 deletions
327
Src/Winamp/Dde.cpp
Normal file
327
Src/Winamp/Dde.cpp
Normal file
|
@ -0,0 +1,327 @@
|
|||
#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
|
Loading…
Add table
Add a link
Reference in a new issue