我用钩子捕获word消息,为什么每次消息发生时,钩子函数都会执行很多次呢?请懂得人指教,多谢多谢 如题,我试过,任何消息都是这样 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 你回调函数怎么写的?? 有的操作,比如单击一下鼠标,会有WM_MOUSEDOWN跟WM_MOUSEON两个事件,所以如果你在回调函数里面没有区分的话,会执行两次.. LRESULT WINAPI GetMsgProc(int nCode,WPARAM wParam,LPARAM lParam){ MSG *pmsg; UINT uMsg; pmsg = (MSG *)lParam; uMsg = pmsg->message; if(nCode==HC_ACTION) { if (pmsg->message ==WM_CHAR) { CLSID clsid; ::CLSIDFromProgID(L"Word.Application",&clsid); LPUNKNOWN punk = NULL; LPDISPATCH pDisp = NULL; if( ::GetActiveObject(clsid,NULL,&punk) == S_OK ) { if( punk->QueryInterface(IID_IDispatch,(void**)&pDisp) == S_OK ) { _Application m_App; m_App.AttachDispatch(pDisp,TRUE); m_Sel.AttachDispatch(m_App.GetSelection()); m_Sel.MoveDown(COleVariant((short)4),COleVariant((short)1),COleVariant((short)0)); m_Sel.MoveDown(COleVariant((short)5),COleVariant((short)1),COleVariant((short)0)); m_Sel.TypeText("123456"); // Release dispatch pointers. m_Sel.ReleaseDispatch(); } }}}return (CallNextHookEx(g_hhook,nCode,wParam,lParam));} 很简单的一个函数,只是在word上输出几个数字,但实际效果是输出好几次 THE QUESTION HAS BEEN SOLVEDif (nCode == HC_ACTION && (wParam & PM_REMOVE)) 两个类之间 操作CLISTCTRL 属性表单问题 关闭音频输出设备时无响应 还是关于标准的“打开/保存”对话框 怎么把组合框里的第一项在第一行就显示出来呢? 有现成的COM动态连接库,如何使用其中的接口? 如何通过对方的ip(可能不再一个nbt内), 获得对方机器的名称 vc如何调用vb写的dll? 如何使List Control有垂直滚动条? 如何在初始何时,默认选中一个工具栏上的CheckButton 菜鸟问题 消息钩子的一点疑问, 以及CallNextHookEx的疑问...
{
MSG *pmsg;
UINT uMsg; pmsg = (MSG *)lParam;
uMsg = pmsg->message;
if(nCode==HC_ACTION)
{
if (pmsg->message ==WM_CHAR)
{
CLSID clsid;
::CLSIDFromProgID(L"Word.Application",&clsid);
LPUNKNOWN punk = NULL;
LPDISPATCH pDisp = NULL;
if( ::GetActiveObject(clsid,NULL,&punk) == S_OK )
{
if( punk->QueryInterface(IID_IDispatch,(void**)&pDisp) == S_OK )
{
_Application m_App;
m_App.AttachDispatch(pDisp,TRUE);
m_Sel.AttachDispatch(m_App.GetSelection()); m_Sel.MoveDown(COleVariant((short)4),COleVariant((short)1),COleVariant((short)0));
m_Sel.MoveDown(COleVariant((short)5),COleVariant((short)1),COleVariant((short)0));
m_Sel.TypeText("123456");
// Release dispatch pointers.
m_Sel.ReleaseDispatch();
}
}
}
}
return (CallNextHookEx(g_hhook,nCode,wParam,lParam));
}
if (nCode == HC_ACTION && (wParam & PM_REMOVE))