明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1997|回复: 6

取得本dll路径的方法及按键Hook的方法

[复制链接]
发表于 2012-8-4 10:46:11 | 显示全部楼层 |阅读模式
本帖最后由 badboy518 于 2012-8-4 10:48 编辑
  1.   public static class Xsys
  2.   {
  3.     /// <summary>
  4.     /// 取得本dll的路径
  5.     /// </summary>
  6.     /// <returns></returns>
  7.     public static string GetAssemblyPath()
  8.     {
  9.       string _CodeBase = System.Reflection.Assembly.GetExecutingAssembly().CodeBase;

  10.       _CodeBase = _CodeBase.Substring(8, _CodeBase.Length - 8);    // 8是 file:// 的长度

  11.       string[] arrSection = _CodeBase.Split(new char[] { '/' });

  12.       string _FolderPath = "";
  13.       for (int i = 0; i < arrSection.Length - 1; i++)
  14.       {
  15.         _FolderPath += arrSection[i] + "/";
  16.       }
  17.       return _FolderPath;
  18.     }
  19.   }
  1.   /// <summary>
  2.   /// 消息Hook,目前仅Hook了WM_KEYDOWN,事件发生时会发送回按键码
  3.   /// </summary>
  4.   public class MessageHook
  5.   {
  6.     const int WM_KEYDOWN = 0x100;

  7.     public delegate void KeyDown(int keycode);//事件所需要的委托(注意,声明委托,必须加上括号)
  8.     public event KeyDown OnKeyDown;//事件声明
  9.     public void SetKeyHook()
  10.     {
  11.       Application.PreTranslateMessage += Application_PreTranslateMessage;
  12.     }
  13.     public void UnKeyHook()
  14.     {
  15.       Application.PreTranslateMessage -= Application_PreTranslateMessage;
  16.     }
  17.     void Application_PreTranslateMessage(object sender, PreTranslateMessageEventArgs e)
  18.     {
  19.       if (e.Message.message == WM_KEYDOWN)
  20.       {
  21.         //Tools.WriteMessageWithReturn(e.Message.wParam.ToString());
  22.         OnKeyDown(e.Message.wParam.ToInt32());
  23.       }
  24.     }


  25.   }
复制代码

发表于 2012-8-4 16:50:09 | 显示全部楼层
获取的路径没有程序名称
 楼主| 发表于 2012-8-4 22:10:53 | 显示全部楼层
第11行时,已取得成功。只是我故意做的过滤,只取路径
发表于 2012-8-5 23:15:18 | 显示全部楼层
这样行不行
string _CodeBase = System.Reflection.Assembly.GetExecutingAssembly().CodeBase
_CodeBase.Substring(0 , _CodeBase.LastIndexOf('\') )
 楼主| 发表于 2012-8-7 08:37:43 | 显示全部楼层
可能更好,
发表于 2012-9-6 12:57:41 | 显示全部楼层
        Dim Mnetp As String = Microsoft.VisualBasic.Compatibility.VB6.Support.GetPath()
        Dim Mnetn As String = Microsoft.VisualBasic.Compatibility.VB6.Support.GetEXEName()
simple and work well! Though old.
发表于 2012-9-17 14:31:11 | 显示全部楼层
请问一下您是CAD200几的,我2008的好像不行!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-25 17:55 , Processed in 0.243005 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表