2011-09-21 147 views
1

我想在C#中创建一个“WH_JOURNALPLAYBACK”钩子的回调。这是代码WH_JOURNALPLAYBACK挂钩在C#

private delegate IntPtr JournalPlaybackProc(int nCode, IntPtr wParam, IntPtr lParam); 

private static IntPtr JournalPlaybackCallback(int nCode, IntPtr wParam, IntPtr lParam) 
{ 
     if (HC_GETNEXT == nCode && curr < EventMsgs.Count) 
     { 
      EVENTMSG hookStruct = (EVENTMSG)Marshal.PtrToStructure(lParam, typeof(EVENTMSG)); 
      EVENTMSG currentMsg = EventMsgs[curr]; 
      hookStruct.message = currentMsg.message; 
      hookStruct.paramL = currentMsg.paramL; 
      hookStruct.paramH = currentMsg.paramH; 
      hookStruct.hwnd = currentMsg.hwnd; 
      hookStruct.time = currentMsg.time; 
     } 
     if (HC_SKIP == nCode) 
     { 
      curr++; 
     } 
     if (curr == EventMsgs.Count) 
     { 
      UnhookWindowsHookEx(_journalPlaybackProcHookID); 
      _journalPlaybackProcHookID = IntPtr.Zero; 
     } 
     return CallNextHookEx(_journalPlaybackProcHookID, nCode, wParam, lParam); 
} 

我得到正确的回调,我想我需要修改的lParam的值与我的数据回放事件。我该怎么做呢?

+0

我也有同样的问题。我可以很好地记录这些值,但播放效果很麻烦。你找到解决方案吗? – Kelly

回答

0

我假设你需要

Marshal.StructureToPtr(hookStruct,lParam的,真正的);

在某个时刻写回来。当我运行它只是挂起。