#ifndef WA_HOTKEYS
#define WA_HOTKEYS

/*
** #define IPC_GEN_HOTKEYS_ADD xxxx // pass a genHotkeysAddStruct * struct in data
**
** To get the IPC_GEN_HOTKEYS_ADD IPC number, you need to do this:
**
** genhotkeys_add_ipc=SendMessage(winampWindow,WM_WA_IPC,(WPARAM)&"GenHotkeysAdd",IPC_REGISTER_WINAMP_IPCMESSAGE);
**
** Then you can use:
**
** PostMessage(winampWindow,WM_WA_IPC,(WPARAM)&myGenHotkeysAddStruct,genhotkeys_add_ipc);
*/

// flags for the genHotkeysAddStruct struct
#define HKF_BRING_TO_FRONT   0x1   // calls SetForegroundWindow before sending the message
#define HKF_HWND_WPARAM      0x2   // sets wParam with Winamp's window handle
#define HKF_COPY             0x4   // copies returned text to the clipboard
#define HKF_PLPOS_WPARAM     0x8   // sets wParam with current pledit position
#define HKF_ISPLAYING_WL     0x10  // sets wParam to genHotkeysAddStruct's wParam if playing, lParam if not
                                   // uses IPC_ISPLAYING to check if playing
#define HKF_SHOWHIDE         0x20  // brings Winamp to front or minimizes Winamp if already at front
#define HKF_NOSENDMSG        0x40  // don't send any message to the winamp window
#define HKF_COPYW            0x80  // copies returned text to the clipboard (using CF_UNICODETEXT)
#define HKF_UNICODE_NAME     0x100 // set this when the 'name' is passed as a unicode string
#define HKF_DISABLED         0x80000000

typedef struct {
  char *name;       // this is the name that will appear in the Global Hotkeys preferences panel
  DWORD flags;      // one or more HKF_* flags from above
  UINT uMsg;        // message that will be sent to winamp's main window (must always be !=NULL)
  WPARAM wParam;    // wParam that will be sent to winamp's main window
  LPARAM lParam;    // lParam that will be sent to winamp's main window
  char *id;         // unique string to identify this command (the string is case insensitive)
  HWND wnd;         // set the HWND to send message (or 0 for the main winamp window)

  int extended[6];  // for future extension - always set this to zero!
} genHotkeysAddStruct;


/*
** Before calling this function you need to setup the genHotkeysAddStruct struct
**
** genHotkeysAddStruct test_key = {0};   // this will make the compiler zero the struct for you
**                                       // though you can do it manually if you want to as well
**
** UINT test_ipc = 0;                    // this will hold the uMsg value to look for in the assigned window proc
**
** // then call the function to register the hotkey
** AddGlobalHotkey(&test_key,"Playback: Test key","Test_key",&test_ipc);
**
** void AddGlobalHotkey(genHotkeysAddStruct *hotkey, char* name, char* id, int* ipc){
** UINT genhotkeys_add_ipc = 0;
**   hotkey->wnd = 0;
**   hotkey->flags = 0;
**   hotkey->name = name;
**   hotkey->id = id;
**   *ipc = hotkey->uMsg = SendMessage(winampWindow,WM_WA_IPC,(WPARAM)&hotkey->id,IPC_REGISTER_WINAMP_IPCMESSAGE);
**
**   genhotkeys_add_ipc=SendMessage(winampWindow,WM_WA_IPC,(WPARAM)&"GenHotkeysAdd",IPC_REGISTER_WINAMP_IPCMESSAGE);
**   PostMessage(winampWindow,WM_WA_IPC,(WPARAM)hotkey,genhotkeys_add_ipc);
** }
*/

/*
** This shows how to detect the registered hotkey message
** then it's upto you what you do
**
** LRESULT CALLBACK WinampWnd(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam){
** int ret = 0;
**
**   // handles the hotkey for the option :o)
**   if(uMsg == test_ipc){
**     // here you can do things needed for the hotkey you registered
**   }
**
**   // do stuff before the winamp proc has been called
** 
**   ret = CallWindowProc(WinampProc,hwnd,uMsg,wParam,lParam);
**
**   // do other stuff after the winamp proc has been called
**   // then return the value from CallWindowProc(..)
**   return ret;
** }
*/

#endif