简单去掉Dexeperience(DX)未注册限制

[C#适用]
      DXperience是一款相当强大的控件,很多人都喜欢用它,但是注册费用太贵了。破解的吧,又不像是一个普通的EXE那么便捷,网上也有一些破解的版本存在。我找了一些试用,但破解过程复杂,而且,不知道是不是我RP不行啊,总是不成功。
      后来发现,其实未注册的只是程序运行的时候会弹出一个讨厌的版权框,(没有源码和最后程序没有关系),把这个框点击关闭之后就一切正常了。于是萌发了让程序自己把它去掉的想法。

     思路很简单:程序运行时,在控件初始化之前创建一个线程,这个线程一直查找这个提示框,然后给它发送WM_CLOSE 的消息即可。
下面是代码,在VS2005上测试通过:
 1using System.Threading; //添加创建线程的引用
 2using System.Runtime.InteropServices; //添加使用API的引用
 3
 4//声明两个API
 5[DllImport("user32.dll")]
 6        static extern IntPtr FindWindow(IntPtr ptr1, string strWindow); //这里比较特殊,后面会讲到
 7        [DllImport("user32.dll")]
 8        static extern int PostMessage(IntPtr hWnd, int msg, int wParam, int lParam);
 9
10public frmMain()
11        {
12            // 此处关闭窗口
13            Thread myThread = new Thread(new ThreadStart(this.KillDXThread));
14            myThread.Start();
15            // 关闭代码应该在初始化组件之前调用,否则会被DX截停.
16           InitializeComponent();
17        }

18
19        public void KillDXThread()
20        {
21            do 
22            {
23                IntPtr dxWin = FindWindow(IntPtr.Zero, "Information");
24                if(dxWin != IntPtr.Zero)
25                {
26                    PostMessage(dxWin, 0x1000);
27                    break;
28                }

29            }
 while (true);
30            ;
31        }
    正常的 FindWindow函数两个参数都应该是String,只是DX的弹窗的CLASS总是在发生变化(标题不变),所以干脆直接传一个NULL(IntPtr.Zero)给第一个参数,第二个参数是DX的标题.
   PostMessage第二个参数是消息,WM_CLOSE 是 0x10H.

    运行程序,弹窗一闪而过,是不是很简单!(我用的是DX7.3.5版本.)

posted @ 2008-07-09 11:21  顾顾  阅读(702)  评论(2)    收藏  举报