关于AFX_MANAGE_STATE!

lsaturn 2004-02-16 06:50:55
我在很多地方有都见到
AFX_MANAGE_STATE(AfxGetStaticModuleState( ));
这句,好象和dll有关,但去掉又没有发现有什么错误
有的书上说要正确使用dll就要加这么一句,我原来是做win32sdk的,我没有觉得有什么和这个等效的语句啊!
看了msdn也不太清楚
这句到底是干什么用的啊?
...全文
134 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
在MFC中实现 EventSink 。 (1) 在MFC中,添加ATL简单对象 CFileMonitorSink (2) 添加继承父类 IDispEventImpl public IDispEventImpl (1) 0 唯一标识符, 用于区别 连接到 事件源的多个客户端 CFileMonitorSink, 当前类名 _IFun1Events, COM 中的事件源接口, 包含各种事件 __ATLEventLib, COM 中Lib类 具体查 MSDN --IDispEventImpl (2) 添加映射项 BEGIN_SINK_MAP(CFileMonitorSink) SINK_ENTRY_EX( 0, __uuidof(_IFun1Events), 1, OnNotify) //0 唯一标识符,用于区别 连接到 事件源的多个客户端 同上 , 1, 事件号 , 发生1号事件 由OnNotify来处理 SINK_ENTRY_EX( 0, __uuidof(_IFun1Events), 2, OnNotify2) //发生2号事件 由OnNotify2来处理 END_SINK_MAP() 并添加方法 STDMETHOD(OnNotify)(void); //事件处理类 STDMETHOD(OnNotify2)(CHAR* lszContent); (3) 连接到COM中的事件容器 添加变量 CComPtr m_Object; //COM 中的事件源对象 添加方法 STDMETHOD(Start)(IUnknown* pSinkThisObject, VARIANT_BOOL* succeeded) { AFX_MANAGE_STATE(AfxGetAppModuleState()); // TODO: 在此添加实现代码 if ( DispEventAdvise(pSinkThisObject) == S_OK ) { m_Object = pSinkThisObject; *succeeded = VARIANT_TRUE; } else { *succeeded = VARIANT_FALSE; } return S_OK; } STDMETHOD(Stop)(void) //解除连接 { AFX_MANAGE_STATE(AfxGetAppModuleState()); DispEventUnadvise(m_Object); return S_OK; } 在其他类中的 使用方法: CComPtr m_FileMonitorSink; CComPtr m_FileMonitor; //COM中导出接口 CoInitialize(0); HRESULT lRt = m_FileMonitorSink.CoCreateInstance( __uuidof(FileMonitorSink) ); lRt = m_FileMonitor.CoCreateInstance(__uuidof(Fun1)); //创建COM接口实例 VARIANT_BOOL succeeded; lRt = m_FileMonitorSink->Start(m_FileMonitor, &succeeded); //把 m_FileMonitorSink 连接到COM中的事件容器上 m_FileMonitor->HelloWorld(); //调用COM接口,接口中触发事件s m_FileMonitorSink->stop(); //从COM接口中解除连接 CoUninitialize(); // ################# CFileMonitorSink 类代码 ################# class ATL_NO_VTABLE CFileMonitorSink : public CComObjectRootEx, public CComCoClass, public IDispatchImpl, public IDispEventImpl { public: CFileMonitorSink() { } DECLARE_REGISTRY_RESOURCEID(IDR_FILEMONITORSINK) BEGIN_COM_MAP(CFileMonitorSink) COM_INTERFACE_ENTRY(IFileMonitorSink) COM_INTERFACE_ENTRY(IDispatch) END_COM_MAP() BEGIN_SINK_MAP(CFileMonitorSink) SINK_ENTRY_EX( 0, __uuidof(_IFun1Events), 1, OnNotify) SINK_ENTRY_EX( 0, __uuidof(_IFun1Events), 2, OnNotify2) END_SINK_MAP() DECLARE_PROTECT_FINAL_CONSTRUCT() HRESULT FinalConstruct() { return S_OK; } void FinalRelease() { } CComPtr m_Object; //COM 事件源对象 public: STDMETHOD(OnNotify)(void); STDMETHOD(Stop)(void); STDMETHOD(Start)(IUnknown* pSinkThisObject, VARIANT_BOOL* succeeded); STDMETHOD(OnNotify2)(CHAR* lszContent); };
C++注入框架CHook_DLLApp::CHook_DLLApp() { // TODO: add construction code here, // Place all significant initialization in InitInstance } ///////////////////////////////////////////////////////////////////////////// // The one and only CHook_DLLApp object CHook_DLLApp theApp; LRESULT CALLBACK KeyboardProc( int Code, //Hook絏 WPARAM wParam, //店览龄 VK_F1 , VK_F2 , VK_HOME LPARAM lParam //龄絃癟 (lParam&(1<<30)) 北磅︽Ω ぃ礛㎝秨常穦磅︽ ) { AFX_MANAGE_STATE(AfxGetStaticModuleState()); //ňゎ笆篈硈挡畐岿粇 //判断是否按下HOME键 if(wParam == VK_HOME && (lParam&(1<<30)))//(lParam&(1<<30)) 北磅︽Ω ぃ礛㎝秨常穦磅︽ { //如果按下HOME键(不监视键弹起的动作,只监视键按下的动作) //AfxMessageBox("为目标进程附加(注入)DLL文件成功!"); _asm //游戏注入CALL { mov eax,0X004043A0 call eax } } return CallNextHookEx(0,Code,wParam,lParam); } void SetHook() { HWND h =::FindWindow(NULL,"模拟找CALL练习1.0版=梦工厂出品");//怠嘿 if(h==0) { AfxMessageBox("没找到游戏窗口!"); } DWORD Pid; //游戏进程PID Pid = ::GetWindowThreadProcessId(h,NULL); //把DLL挂钩(注入)到目标游戏进程 ::SetWindowsHookEx( WH_KEYBOARD, //KEY表示的是按键。啥时候触发钩子呢?(按键时候触发) &KeyboardProc, //使用DLL里面的具体某个自定义函数(在这里用函数指针即可) ::GetModuleHandle("Hook_DLL.dll"), //使用具体某个DLL,GetModuleHandle返回DLL的模块句柄 Pid //PID ); }

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧