CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  基础类

大家来看看这段程序

楼主haven(阿天)2001-09-28 10:28:30 在 VC/MFC / 基础类 提问

以下我写的一个dll  
  //   TestDll.cpp   :   Defines   the   entry   point   for   the   DLL   application.  
  //  
   
  #include   <windows.h>  
   
  HINSTANCE   g_hInstance;  
  HHOOK   g_hHook;  
   
  LRESULT   CALLBACK   GetHookProc(int   nCode,WPARAM   wParam,LPARAM   lParam);  
   
   
  BOOL   WINAPI   DllEntryPoint(     HINSTANCE   hDLL,  
          DWORD   dwReason,  
                                  LPVOID   Reserved  
      )  
  {  
  g_hInstance=hDLL;  
          return   TRUE;  
  }  
   
  int   ShowMe(void)  
  {  
  MessageBox(NULL,"i   love   you","hi",MB_OK);  
  return   1;  
  }  
   
  void   Start()  
  {  
  //安装全局钩子  
  g_hHook=SetWindowsHookEx(WH_GETMESSAGE,GetHookProc,g_hInstance,NULL);  
   
  MessageBox(NULL,"this   is   the   world   start","hi",MB_OK);  
  }  
   
  LRESULT   CALLBACK   GetHookProc(int   nCode,WPARAM   wParam,LPARAM   lParam)  
  {  
  HWND   hwndTarget;  
  char   strGetText[5000]="";  
   
  MSG   *pMessage=(MSG   *)lParam;  
   
  if(nCode<0)  
  return   CallNextHookEx(g_hHook,nCode,wParam,lParam);  
  else  
  {  
  /////////////////////////////////////////////////  
  if(pMessage->message==WM_KEYDOWN)  
  {  
  if   (pMessage->wParam==VK_F8)  
  {  
  MessageBox(NULL,"get   F8   key   down","hi",MB_OK);  
   
  }  
   
  }  
  return   CallNextHookEx(g_hHook,nCode,wParam,lParam);  
  }  
  }  
   
  以下是调用Testdll.dll:  
  HINSTANCE   gLibSample=NULL;  
   
  typedef   int(*SHOWME)(void);  
  typedef   void(*START)(void);  
   
  SHOWME   ShowMe;  
  START   Start;  
   
  HCURSOR   CAaDlg::OnQueryDragIcon()  
  {  
  return   (HCURSOR)   m_hIcon;  
  }  
   
   
  void   CAaDlg::OnButton1()    
  {  
  //   TODO:   Add   your   control   notification   handler   code   here  
  gLibSample=LoadLibrary("TESTDLL.DLL");  
  //ShowMe   =   (SHOWME)GetProcAddress(gLibSample,"ShowMe");  
  //ShowMe();  
  Start=(START)GetProcAddress(gLibSample,"Start");  
  Start();  
  FreeLibrary(gLibSample);  
  }  
   
  编译的时候没有问题,执行OnButton1()后出现以下情况:  
  出现非法操作,但是也出现了“this   is   the   world   start”提示框,然后就蓝屏死机了。  
  我想是安装钩子的函数有问题。我是在工程列表中选择Win32   Dynamic-Link   Library->a   simple   dll   project创建该dll的,以前我用mfc   dll向导也写过一个钩子,内容和上面的基本相同,却运行得很好,哪位高人能告诉我这是这么回事吗?  
  问题点数:80、回复次数:10Top

1 楼Jneu(沧海桑田)回复于 2001-09-28 10:33:36 得分 0

gzTop

2 楼karma(无为MS MVP)回复于 2001-09-28 10:34:44 得分 30

you   forget   to   call  
  UnhookWindowsHookEx(   g_hHook   );Top

3 楼haven(阿天)回复于 2001-09-28 10:41:20 得分 0

一定要有UnhookWindowsHookEx(   g_hHook   )才行吗?  
  我想即使没有函数调用UnhookWindowsHookEx(   g_hHook   )钩子也能正常工作呀。Top

4 楼haven(阿天)回复于 2001-09-28 10:48:05 得分 0

up一下Top

5 楼haven(阿天)回复于 2001-09-28 11:01:22 得分 0

再up一下Top

6 楼xiner(叉叉)回复于 2001-09-28 11:12:38 得分 50

你太残忍了,人家刚启动hook,还没unhook你就freelibrary。明摆着让我下不了台吗。我不给你篮屏才怪呢--------your   computer.记得freelibrary在unhook之后。Top

7 楼Julienjut(秋水)回复于 2001-09-28 11:15:12 得分 0

下午不看Top

8 楼GloomyCoder(哥们,搞根烟抽,咱俩一起郁闷!)回复于 2001-09-28 11:49:31 得分 0

好好学习,天天向上Top

9 楼haven(阿天)回复于 2001-09-28 12:03:27 得分 0

我知道了,原来是这样呀,好了给分Top

10 楼Gu_c_h(Gu)回复于 2001-09-28 12:48:47 得分 0

把   DllEntryPoint   改为   DllMain   就好了Top

相关问题

  • 这段程序怎么写?
  • 这段程序有错吗?
  • 帮忙看这段程序
  • 这段程序有错么?
  • 这段程序怎么写?
  • 这段程序怎么写?
  • 看看这段程序!
  • 请问如何将这段ASP程序转换为ASP.NET程序?
  • 下面这段VBA程序怎么改成VB程序?
  • 一段程序

关键词

  • start
  • dll
  • null
  • showme
  • glibsample
  • hhook
  • 钩子
  • gethookproc
  • ncode
  • hinstance

得分解答快速导航

  • 帖主:haven
  • karma
  • xiner

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

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