aboutsummaryrefslogtreecommitdiff
path: root/Src/Winamp/GEN.H
diff options
context:
space:
mode:
Diffstat (limited to 'Src/Winamp/GEN.H')
-rw-r--r--Src/Winamp/GEN.H86
1 files changed, 86 insertions, 0 deletions
diff --git a/Src/Winamp/GEN.H b/Src/Winamp/GEN.H
new file mode 100644
index 00000000..29310147
--- /dev/null
+++ b/Src/Winamp/GEN.H
@@ -0,0 +1,86 @@
+#ifndef NULLSOFT_WINAMP_GEN_H
+#define NULLSOFT_WINAMP_GEN_H
+// General Purpose plugin interface
+
+#include <windows.h>
+
+typedef struct {
+ int version;
+ char* description;
+ int(__cdecl* init)();
+ void(__cdecl* config)();
+ void(__cdecl* quit)();
+ HWND hwndParent;
+ HINSTANCE hDllInstance;
+} winampGeneralPurposePlugin;
+
+// return values from the init(..) which determines if Winamp will continue loading
+// and handling the plugin or if it will disregard the load attempt. If GEN_INIT_FAILURE
+// is returned then the plugin will be listed as [NOT LOADED] on the plug-in prefs page.
+#define GEN_INIT_SUCCESS 0
+#define GEN_INIT_FAILURE 1
+
+#define GPPHDR_VER 0x10
+
+// added 5.64+
+#define GPPHDR_VER_U 0x11
+// specify GPPHDR_VER_U if you want to provide a unicode (wchar_t*) description and only work on 5.64+
+// specify GPPHDR_VER to use the original (char*) description as before
+// note: we are using the fact that sizeof(char*) == sizeof(wchar_t*) to be able to allow this
+// so when using GPPHDR_VER_U you will need to cast description to (wchar_t*) to set
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+ typedef winampGeneralPurposePlugin* (__cdecl* winampGeneralPurposePluginGetter)();
+#ifdef __cplusplus
+}
+#endif
+
+// These are the return values to be used with the uninstall plugin export function:
+// __declspec(dllexport) int __cdecl winampUninstallPlugin(HINSTANCE hDllInst, HWND hwndDlg, int param)
+// which determines if Winamp can uninstall the plugin immediately or on winamp restart.
+// If this is not exported then Winamp will assume an uninstall with reboot is the only way.
+//
+#define GEN_PLUGIN_UNINSTALL_NOW 0x1
+#define GEN_PLUGIN_UNINSTALL_REBOOT 0x0
+//
+// Uninstall support was added from 5.0+ and uninstall now support from 5.5+ though note
+// that it is down to you to ensure that if uninstall now is returned that it will not
+// cause a crash i.e. don't use if you've been subclassing the main window.
+//
+// The HWND passed in the calling of winampUninstallPlugin(..) is the preference page HWND.
+//
+// The following is a psuedo example of using winampUninstallPlugin(..) which shows its usage:
+//
+//
+// // use this as a control on saving settings as quit(..) will be called afterwards
+// int no_uninstall = 1;
+// __declspec(dllexport) int __cdecl winampUninstallPlugin(HINSTANCE hDllInst, HWND hwndDlg, int param){
+// // prompt to remove our settings with default as no (just incase)
+// if(MessageBox(hwndDlg,"Do you also want to remove the saved settings for this plugin?",
+// plugin.description,MB_YESNO|MB_DEFBUTTON2) == IDYES)
+// {
+// // PLUGIN_NAME is the name of the section you save settings into
+// // and this call will make the OS remove the setion passed
+// WritePrivateProfileString(PLUGIN_NAME,0,0,ini_file);
+// no_uninstall = 0;
+// }
+// // as we're doing too much in subclasses, etc we cannot allow for on-the-fly removal so need to do a normal reboot
+// return GEN_PLUGIN_UNINSTALL_REBOOT;
+// }
+//
+
+// For a general purpose plugin to be correctly detected by Winamp you need to ensure that
+// the exported winampGetGeneralPurposePlugin(..) is exported as an undecorated function
+// e.g.
+// #ifdef __cplusplus
+// extern "C" {
+// #endif
+// __declspec(dllexport) winampGeneralPurposePlugin * __cdecl winampGetGeneralPurposePlugin(){ return &plugin; }
+// #ifdef __cplusplus
+// }
+// #endif
+//
+
+#endif \ No newline at end of file