CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  .NET技术 >  VC.NET

我做的hook帮我看看

楼主abctop321(开始编程序)2004-12-02 10:57:01 在 .NET技术 / VC.NET 提问

我做的hook帮我看看,老出错,用vc++.net做的。  
  ================================================================  
  MainFrm.cpp文件:  
  //   MainFrm.cpp   :   CMainFrame   类的实现  
  //  
   
  #include   "stdafx.h"  
  #include   "jsdl.h"  
   
  #include   "MainFrm.h"  
   
  #ifdef   _DEBUG  
  #define   new   DEBUG_NEW  
  #endif  
   
  extern   "C"   __declspec(dllimport)   HHOOK   hHook;//extern   "C"   __declspec(dllimport)    
  LRESULT   CALLBACK     KeyboardProc(int   nCode,   WPARAM   wParam,   LPARAM   lParam);  
   
  //   CMainFrame  
   
  IMPLEMENT_DYNAMIC(CMainFrame,   CFrameWnd)  
   
  BEGIN_MESSAGE_MAP(CMainFrame,   CFrameWnd)  
  ON_WM_CREATE()  
  ON_WM_SETFOCUS()  
  END_MESSAGE_MAP()  
   
  static   UINT   indicators[]   =  
  {  
  ID_SEPARATOR,                       //   状态行指示器  
  ID_INDICATOR_CAPS,  
  ID_INDICATOR_NUM,  
  ID_INDICATOR_SCRL,  
  };  
   
   
  //   CMainFrame   构造/销毁  
   
  CMainFrame::CMainFrame()  
  {  
  hHook=SetWindowsHookEx(WH_KEYBOARD,  
  KeyboardProc,  
  GetModuleHandle("data.dll"),  
  0);  
   
  //   TODO:在此添加成员初始化代码  
  }  
   
  CMainFrame::~CMainFrame()  
  {  
  if(hHook)  
              UnhookWindowsHookEx(hHook);    
  }  
   
   
  int   CMainFrame::OnCreate(LPCREATESTRUCT   lpCreateStruct)  
  {  
  if   (CFrameWnd::OnCreate(lpCreateStruct)   ==   -1)  
  return   -1;  
  //   创建一个视图以占用框架的工作区  
  if   (!m_wndView.Create(NULL,   NULL,   AFX_WS_DEFAULT_VIEW,  
  CRect(0,   0,   0,   0),   this,   AFX_IDW_PANE_FIRST,   NULL))  
  {  
  TRACE0("未能创建视图窗口\n");  
  return   -1;  
  }  
   
  if   (!m_wndToolBar.CreateEx(this,   TBSTYLE_FLAT,   WS_CHILD   |   WS_VISIBLE   |   CBRS_TOP  
  |   CBRS_GRIPPER   |   CBRS_TOOLTIPS   |   CBRS_FLYBY   |   CBRS_SIZE_DYNAMIC)   ||  
  !m_wndToolBar.LoadToolBar(IDR_MAINFRAME))  
  {  
  TRACE0("未能创建工具栏\n");  
  return   -1;             //   未能创建  
  }  
   
  if   (!m_wndStatusBar.Create(this)   ||  
  !m_wndStatusBar.SetIndicators(indicators,  
      sizeof(indicators)/sizeof(UINT)))  
  {  
  TRACE0("未能创建状态栏\n");  
  return   -1;             //   未能创建  
  }  
  //   TODO:   如果不需要工具栏可停靠,则删除这三行  
  m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);  
  EnableDocking(CBRS_ALIGN_ANY);  
  DockControlBar(&m_wndToolBar);  
   
  return   0;  
  }  
   
  BOOL   CMainFrame::PreCreateWindow(CREATESTRUCT&   cs)  
  {  
  if(   !CFrameWnd::PreCreateWindow(cs)   )  
  return   FALSE;  
  //   TODO:   在此处通过修改   CREATESTRUCT   cs   来修改窗口类或  
  //   样式  
   
  cs.dwExStyle   &=   ~WS_EX_CLIENTEDGE;  
  cs.lpszClass   =   AfxRegisterWndClass(0);  
  return   TRUE;  
  }  
   
   
  //   CMainFrame   诊断  
   
  #ifdef   _DEBUG  
  void   CMainFrame::AssertValid()   const  
  {  
  CFrameWnd::AssertValid();  
  }  
   
  void   CMainFrame::Dump(CDumpContext&   dc)   const  
  {  
  CFrameWnd::Dump(dc);  
  }  
   
  #endif   //_DEBUG  
   
   
  //   CMainFrame   消息处理程序  
   
  void   CMainFrame::OnSetFocus(CWnd*   /*pOldWnd*/)  
  {  
  //   将焦点前移到视图窗口  
  m_wndView.SetFocus();  
  }  
   
  BOOL   CMainFrame::OnCmdMsg(UINT   nID,   int   nCode,   void*   pExtra,   AFX_CMDHANDLERINFO*   pHandlerInfo)  
  {  
  //   让视图第一次尝试该命令  
  if   (m_wndView.OnCmdMsg(nID,   nCode,   pExtra,   pHandlerInfo))  
  return   TRUE;  
   
  //   否则,执行默认处理  
  return   CFrameWnd::OnCmdMsg(nID,   nCode,   pExtra,   pHandlerInfo);  
  }  
  ================================================================  
  dll文件代码:  
  //   data.cpp   :   定义   DLL   的初始化例程。  
  //  
   
  #include   "stdafx.h"  
  #include   "data.h"  
   
  #ifdef   _DEBUG  
  #define   new   DEBUG_NEW  
  #endif  
   
  //  
  // 注意!  
  //  
  // 如果此   DLL   动态链接到   MFC  
  // DLL,从此   DLL   导出并  
  // 调入   MFC   的任何函数在函数的最前面  
  // 都必须添加   AFX_MANAGE_STATE   宏。  
  //  
  // 例如:  
  //  
  // extern   "C"   BOOL   PASCAL   EXPORT   ExportedFunction()  
  // {  
  // AFX_MANAGE_STATE(AfxGetStaticModuleState());  
  // //   此处为普通函数体  
  // }  
  //  
  // 此宏先于任何   MFC   调用  
  // 出现在每个函数中十分重要。这意味着  
  // 它必须作为函数中的第一个语句  
  // 出现,甚至先于所有对象变量声明,  
  // 这是因为它们的构造函数可能生成   MFC  
  // DLL   调用。  
  //  
  // 有关其他详细信息,  
  // 请参阅   MFC   技术说明   33   和   58。  
  //  
   
  //   CdataApp  
  #pragma   data_seg("SharedVar")    
  //DLL输出的全局变量  
  extern   "C"   __declspec(dllexport)   HHOOK   hHook=NULL;  
  #pragma   data_seg()  
  //   DLL   自用的全局变量  
  char   buffer=0;    
  FILE   *fl;  
  //定义全局的键盘勾子函数:  
  //DLL输出的勾子函数  
  extern   "C"   __declspec(dllexport)    
  LRESULT   CALLBACK   KeyboardProc(  
      int   nCode,                
      WPARAM   wParam,     //虚键代码  
      LPARAM   lParam       //   击键消息的信息  
  )  
  {  
  if(lParam&0x80000000)      
  {//如果某键按下  
  buffer=MapVirtualKey(wParam,2);  
          //   把虚键代码变为字符  
  //输出到文件  
  fl=fopen(   "keyfile.txt",   "a+"   );  
  fwrite(&buffer,   sizeof(char),   1,   fl);  
  fclose(fl);  
  }  
  return   CallNextHookEx(hHook,nCode,wParam,lParam);  
  }  
   
   
  BEGIN_MESSAGE_MAP(CdataApp,   CWinApp)  
  END_MESSAGE_MAP()  
   
   
  //   CdataApp   结构  
   
  CdataApp::CdataApp()  
  {  
  //   TODO:   在此添加构造代码,  
  //   将所有重要的初始化放置在   InitInstance   中  
  }  
   
   
  //   唯一的   CdataApp   对象  
   
  CdataApp   theApp;  
   
   
  //   CdataApp   初始化  
   
  BOOL   CdataApp::InitInstance()  
  {  
  CWinApp::InitInstance();  
   
  return   TRUE;  
  }  
  全是仿照一个htm教程所作,出错了调不了,我是新手。  
  错误:  
  1、jsdl   error   LNK2001:   无法解析的外部符号   __imp__hHook  
  2、jsdl   error   LNK2019:   无法解析的外部符号   "long   __stdcall   KeyboardProc(int,unsigned   int,long)"   (?KeyboardProc@@YGJHIJ@Z)   ,该符号在函数   "public:   __thiscall   CMainFrame::CMainFrame(void)"   (??0CMainFrame@@QAE@XZ)   中被引用  
  3、jsdl   fatal   error   LNK1120:   2   个无法解析的外部命令  
  在线等待...  
   
  问题点数:10、回复次数:1Top

1 楼somedummy(某人马甲)回复于 2004-12-02 16:50:50 得分 10

手头没有合适的调试器,明天应该有空能调试一下Top

相关问题

  • HOOK
  • HOOK
  • 帮帮我吧 我再一个全局的hook中调用时编译的时候出现了…… 请帮我呀!!!!
  • 怎么做Hook程序?
  • ■■■■■■■■■■■■我的Hook学习笔记▲▲▲▲▲▲▲▲▲▲▲▲▲▲
  • 我的hook出问题了。
  • 我想在windows下做监控软件,应该用什么样的hook?
  • UnhookWindowsHookEx 函数调用之后 explorer.exe程序 就崩溃 ,我做的是hook api
  • API hook问题,我想hook 98下的16位函数ExitWindowsExec
  • Hook到FindNextFile后要怎么做?

关键词

  • 函数
  • 代码
  • mfc
  • debug
  • dll
  • cdataapp
  • cmainframe
  • hhook
  • jsdl
  • keyboardproc

得分解答快速导航

  • 帖主:abctop321
  • somedummy

相关链接

  • CSDN .NET频道
  • .NET类图书
  • C#类图书
  • .NET类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo