应该怎样设置这个字符数组变量?? --用Delphi得到密码 的程序出现了问题!(100分)

  • 主题发起人 主题发起人 杀大龙
  • 开始时间 开始时间

杀大龙

Unregistered / Unconfirmed
GUEST, unregistred user!
我想编一个 偷窥 他人 &nbsp;密码的程序(现在很流行),可是在实现时出了问题。<br>&nbsp;<br>我是这样做的。<br>1 设置鼠标挂钩,成功。<br>2 定义一个函数得到 &nbsp;鼠标所在的 &nbsp;控件 的文本。(WM_gettext)<br>3 鼠标挂钩调用该函数,也成功。<br><br>问题出来了,需要用一个字符数组(或字符窜)来作为 “密码”的缓冲,<br>比如 &nbsp;a : array [1..2000] of char;<br>或 a : string;<br>但鼠标移动到本窗体的button1 上, &nbsp;可以得到button1的caption属性的字符窜,但<br><br>当移动到其它的程序上面,立即报错,并且把该程序(不是我的程序,)关闭。(估计<br>它犯了“指针访问越界”, <br><br>在vc中,该字符数组是设置成全局变量,而在delphi中,我无论怎样设置<br>用尽方法,也没有办法使其不出错!!<br><br>比如getmem ,都试过了,还是不行。。<br><br><br>请大侠救命。!<br>
 
你的软件如果是系统级的就可以了
 
1.注意你的鼠标挂钩应该是在一个DLL里面的<br>2.最好不要在DLL里面使用string,有可能出问题<br>3.如果要把在DLL里面得到的字符串传给你的控制程序使用FileMapping,<br>这是一个比较通用的办法
 
我的鼠标挂钩不在dll啊,在本单元,它可以自由的运行,并且可以得到本身窗体的控件(如button)<br>的文本(caption);<br>相关源代码!:<br><br>1 挂钩函数<br>function &nbsp;HookProc( nCode :integer ; &nbsp;wParam : WPARAM; lParam :LPARAM) : LResult; &nbsp;//HHook;<br>var<br>pMouseEvent &nbsp;: ^tagMOUSEHOOKSTRUCT;<br>begin<br><br>&nbsp; If nCode &gt;= 0 Then<br>&nbsp; begin<br>&nbsp; &nbsp; &nbsp;pMouseEvent := pointer(lParam);<br><br>&nbsp; &nbsp; &nbsp;Form1.GetPointText(pMouseEvent.pt);<br>&nbsp; end;<br>&nbsp; Result := CallNextHookEx(Hookhandle, nCode, wParam, lParam);<br>&nbsp; <br>end;<br>// 2 &nbsp;得到文本!<br>procedure TForm1.GetPointText(pt :TPOINT );<br>var<br>dWnd : HWND;<br>begin<br>&nbsp;// &nbsp;GetMem(ss,2555);<br>&nbsp; dWnd:= WindowFromPoint(pt);<br>&nbsp; &nbsp; &nbsp;ss := @sbb;<br>&nbsp; &nbsp; &nbsp; if (dWnd &lt;&gt; &nbsp;0) then<br>&nbsp; &nbsp; begin<br>&nbsp; &nbsp; &nbsp;if SendMessage(dWnd,WM_GETTEXT,32000,LPARAM(LPCTSTR(ss))) &gt; 0 then<br>&nbsp; &nbsp; &nbsp; &nbsp;begin<br>&nbsp; &nbsp; &nbsp; &nbsp;szText := ss; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// 问题就是这个SS 应该设置成什么样的变量??<br>&nbsp; &nbsp; &nbsp; &nbsp;Edit1.Text := szText;<br>&nbsp; &nbsp; &nbsp; &nbsp;end;<br>&nbsp; &nbsp; end;<br>&nbsp; <br>end;<br><br><br>也可以用其它办法做到这一点。<br>说明一点,本程序从vc中改来,!
 
ft,你的鼠标挂钩!!!不应该!!!在应用程序里面,应该<br>编写在一个DLL里面设置,你的应用程序使用这个DLL的输出函<br>数控制挂钩和得到其他应用程序的信息<br>如果是在应用程序里面挂钩就只能得到你的程序本身的编辑框<br>内容了,只有使用DLL才能得到其它程序的信息
 
我可以理解,可能用dll 就可以了。<br><br>但是vc为什么又不用呢?<br>vc 那个程序也是在程序中这样写的,他的字符数组是全局变量。。<br>我还编译了那个源文件,没有问题啊?!<br>
 
你是说那个VC程序能够在一个应用程序里面SetWindowsHookEx,<br>而且这个挂钩函数本身也在应用程序里面吗?我觉得这样的话<br>它也不可能获得其他程序的信息。编译成功没有用,看他能不能<br>获得其他程序的信息?<br>如果能够请把这个VC程序给我信箱里面发一份,我看看这个程序<br>怎么编的,OK?多谢了,我的信箱是seawalker_z@sina.com
 
是的,你说的完全正确,我现在就要出去上课了,<br>先送给你一分zip,里面有完全源代码!!<br>但是我不会优化,居然生成1.几M,而原来它是26k的(不知道怎么调的);<br>那个东西还可以得到Ip。<br><br>我下个星期再来。
 
我看了一下,这个程序是在程序里面设置鼠标钩子的,不过你要注意他在<br>SetWindowsHookEx之前调用了SetCapture,这样的话就保持了当前的线程<br>(就是程序的主线程)总在前台,通信是没有问题的。在你设置的HookProc<br>里面可以直接访问hWndDisplay什么的,但是如果没有SetCapture你的程序<br>会出大漏子,因为这时候你的hWndDislplay什么的在其他的线程里面没有意<br>义。<br>至于文件大小没什么,在Project-&gt;Settings里面可以设置的,去掉所有的<br>Debug信息然后对大小进行优化就可以了,可以非常小,但是没有意义,因<br>为你的程序要事先在别人的机器上面安装MS的很大的C库文件,垃圾
 
说得好,<br>&nbsp;那么如果我在程序中setcap..呢,可以吗/? 我先去试试。<br>但是vc编译的那个文件是26k哦,可能他压缩了的,、<br>虽然vc文件要库支持,而且库也很大(vc的技术不能和vcl相比!),<br>但是他是win98,winme自带的,。。。。惨!~<br><br>所以我很希望mis会被拆开两个,这样windows可能就会将vcl库放在其中,<br>那么delphi的程序就会很小了~!!
 
我试了很久,还是不成功。。c语言我可以很轻松的看懂,<br>那个dishandle 是用getsafehandle 得到的,那就是编辑框的handle吧?<br>可以为什么要“安全”呢? 。。<br>&nbsp;vc 我实在不熟悉,。。 我还是把我自己写的源代码send给你,可以帮我<br>改改吗?谢谢了。。
 
收到回复了,<br>按你的说法改了,可是还不成功,鼠标移动出窗口就error,。。<br><br>不管怎么说还是多谢你。
 
没有人才了,真惨,。 &nbsp;现在接受答案吧。<br>如果谁有解决方法,可以再接上,我另外加200分!
 
杀大龙,先把你的名字改过再说!
 
什么意思? 要别人改名字才是不礼貌的,。。<br>我没觉得不妥,虽然有点另类,。。嘻嘻,。。<br>唉,又不是反动派,名字只是代表一种个性,难道我也错了吗?
 
你慢慢胡涂吧!<br>待到清醒时,<br>天已经黑了。<br>哦!你的生命中,从没有白天。<br>伴着你的,<br>永远是黑色的夜,<br>黑沉沉的夜。<br>无法入睡的时候,<br>你在想些什么,<br>我的孩子?<br>现在,真的好想,好想,<br>把那个大幕,<br>拉下来,<br>盖在你的身上,<br>毕竟,深夜,太寒冷!<br>你那无助的眼神,<br>面对峭壁的寒风!<br>真冷、真的很冷!<br>……<br>
 
后退
顶部