//#pragma once // //#include "malloc.h" // //namespace Ooganizer //{ // // enum ButtonState{BUTTON_UP,BUTTON_DOWN}; // // ////////////////////////////////////////////////////////////////////// // // Clss: HookItem // // Desc: Hook Item is used in the HookList. Each HookItem keeps track // // of all the addresses needed for each hook, as well as the // // hookstate. // // // // Note: Add State Items for a Window as neccessary // ////////////////////////////////////////////////////////////////////// // class HookItem // { // public: // HWND m_hWnd; // WNDPROC m_HookWndProc; // WNDPROC m_DefWndProc; // ButtonState m_btnState; // // // Constructor // HookItem(HWND hWnd, WNDPROC hookWndProc, WNDPROC defWndProc): // m_hWnd(hWnd), // m_HookWndProc(hookWndProc), // m_DefWndProc(defWndProc), // m_btnState(BUTTON_UP) // { // } // }; // ////////////////////////////////////////////////////////////////////// // // Clss: HookList // // Desc: Generic List / Custom written list for the sake of speed. // // Hook list is made up of individual HookItems. // // // // Note: You can use GetNext() to iterate thru all the items in the list. // // ~adding or removing an item causes GetNext() to start over. // ////////////////////////////////////////////////////////////////////// // class HookList // { // public: // ////////////////////////////////////////////////////////////////////// // // Func: AddItem() // // Desc: Adds a HookItem to the List // ////////////////////////////////////////////////////////////////////// // void AddItem(HookItem* pItem) // { // m_NbrItems++; // // if ( m_pHookItem == NULL ) // m_pHookItem = (HookItem*) malloc( m_NbrItems * sizeof( HookItem ) ); // else // m_pHookItem = (HookItem*) realloc( m_pHookItem, m_NbrItems * sizeof( HookItem ) ); // // log(pItem->m_hWnd,"hase been added"); // // memcpy( m_pHookItem+(m_NbrItems-1), pItem, sizeof( HookItem ) ); // } // ////////////////////////////////////////////////////////////////////// // // Func: GetItem() // // Desc: Get a HookItem from the List // ////////////////////////////////////////////////////////////////////// // HookItem* GetItem(HWND hWnd) // { // UINT i; // HookItem * pItem = m_pHookItem; // for( i=0; im_hWnd!=hWnd; i++, pItem++ ); // return ( i < m_NbrItems ) ? pItem : NULL; // } // ////////////////////////////////////////////////////////////////////// // // Func: DelItem() // // Desc: Deletes a HookItem from the List // ////////////////////////////////////////////////////////////////////// // void DelItem(HWND hWnd) // { // UINT i; // HookItem * pItem = m_pHookItem; // for( i =0; im_hWnd!=hWnd; i++, pItem++ ); // if ( i < m_NbrItems ) // { // m_NbrItems--; // memcpy( pItem, pItem+1, ( m_NbrItems - i ) * sizeof( HookItem ) ); // m_pHookItem = (HookItem*) realloc( m_pHookItem, m_NbrItems * sizeof( HookItem ) ); // // log(pItem->m_hWnd,"hase been deleted"); // } // } // ////////////////////////////////////////////////////////////////////// // // Func: DelAllItems() // // Desc: Deletes all HookItems from the List // ////////////////////////////////////////////////////////////////////// // void DelAllItems() // { // if ( m_pHookItem != NULL ) // free( m_pHookItem ); // m_pHookItem = NULL; // m_NbrItems = 0; // } // ////////////////////////////////////////////////////////////////////// // // Func: UnhookAllItems() // // Desc: Responsible for iterating through entire list and 'unhooking' // // the WndProc function of every HookItem // // // // Note: has to be put in here since the list has to be iterated here // ////////////////////////////////////////////////////////////////////// // void UnhookAllItems() // { // HookItem * pItem; // // while ( m_NbrItems > 0 ) // { // pItem = m_pHookItem+(m_NbrItems-1); // // // Unhook window // HWND hWnd = pItem->m_hWnd; // // log(hWnd,"Unhooking..."); // SetWindowLong( hWnd, GWL_WNDPROC, (LONG) pItem->m_DefWndProc ); // SendMessage( hWnd, WM_NCPAINT, 1, 0 ); // log(hWnd,"Sending WM_NCPAINT message..."); // // // Delete item // DelItem( hWnd ); // } // } // ////////////////////////////////////////////////////////////////////// // // Func: CleanUp() // // Desc: Unhooks all HookItems in the list and deletes the list // ////////////////////////////////////////////////////////////////////// // void CleanUp() // { // UnhookAllItems(); // DelAllItems(); // } // ////////////////////////////////////////////////////////////////////// // //******************************************************************** // // Construction / Destruction // //******************************************************************** // ////////////////////////////////////////////////////////////////////// // HookList():m_NbrItems(0),m_pHookItem(NULL){} // ~HookList(){CleanUp();} // // protected: // UINT m_NbrItems; // HookItem* m_pHookItem; // }; //}