如何知道当前那个控件有焦点 ( 积分: 200 )

  • 主题发起人 主题发起人 我要学
  • 开始时间 开始时间
TO konak;<br>用SPY++查看窗口句柄,如果你要就请留下邮箱
 
既然已经用spy找到form的了,为什么不把edit的类也找出来呢,我给你的例子你好像也没有好好看,唉……,为了这200分阿<br><br><br>下面是我写的代码,是循环遍历Edit框的,结合我最初给你的例子,就可以找到你要的东西了,不能干坏事哦(别是偷密码吧:)<br>procedure TForm1.Button1Click(Sender: TObject);<br>var<br> &nbsp; &nbsp;ParentHandle , ChindHanlde : THandle;<br> &nbsp; &nbsp;I, wlong : Integer;<br>begin<br> &nbsp; &nbsp;ParentHandle := FindWindow(nil, PChar('Form1'));// 另外一个程序的标题,我在那个程序里面放了10个Edit框<br> &nbsp; &nbsp;I := 0;<br> &nbsp; &nbsp;if ParentHandle &lt;&gt; 0 then begin<br> &nbsp; &nbsp; &nbsp; &nbsp;// 先找到第一个控件<br> &nbsp; &nbsp; &nbsp; &nbsp;ChindHanlde := FindWindowEx(ParentHandle, 0, PChar('TEdit'), nil);<br> &nbsp; &nbsp; &nbsp; // 循环找<br> &nbsp; &nbsp; &nbsp; &nbsp;while ChindHanlde &lt;&gt; 0 do begin<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;//<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; wlong:=GetWindowLong(ChindHanlde ,GWL_STYLE);<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (wlong and ES_PASSWORD)&lt;&gt;0 then &nbsp; &nbsp;begin<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// 表示是密码框<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// 添加你的处理内容<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; end;<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;ChindHanlde := FindWindowEx(ParentHandle, ChindHanlde, PChar('TEdit'), nil);// 寻找下一个Edit,注意FindWindowEx的地二个参数,是ChindHandle<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Inc(I);<br> &nbsp; &nbsp; &nbsp; &nbsp;end;<br> &nbsp; &nbsp;end;<br>end;
 
TO chenybin,<br>你早就应该那出这代码来了.我还有两百分,再开贴给你一半吧.<br>QQ:313319943<br><br>晚了,明天试你的代码
 
没有接触过网游,不过在网游当中,如果设计者真心地进行保护的话,可能你未必能够通过一般的手段获得这些信息.因为比如所说的ES_PASSWORD,这个东西我完全可以在程序中不使用这个属性而实现同样的功能.甚至也可以做到无句柄.<br>不过SPY++中记得可以显示窗体的属性,不晓得是否支持ES_PASSWORD
 
to 我要学<br><br>要SPY++啊, belfry@126.com<br><br>谢谢.加你QQ 好男人
 
TO chenybin<br>我的水平不怎样,可能是我不能理解你的意思吧;<br><br><br>wlong:=GetWindowLong(GetFocus() ,GWL_STYLE);//GetFocus() 当前焦点窗口句柄<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (wlong and ES_PASSWORD)&lt;&gt;0 then<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;begin<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;LISTBOX1.Items.Add('当前有焦点的窗口是密码窗口');<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;END;<br><br>如果运用在本程序里,有用,但我用在QQ登陆窗口和传奇登陆窗口时就没反应了,<br>是不是用GetFocus(),有没有其它语句.
 
还有,就算我找到绝对句柄,你那代码也会失效;<br><br>VAR<br>TE:THandle;<br>wlong:INTEGER;<br>begin<br>TE:= FindWindowEx(0,TE,'TFrmMain',NIL);<br>TE:= FindWindowEx(TE,0,NIL,NIL);//这个一定是密码窗口句柄<br>wlong:=GetWindowLong(TE,GWL_STYLE);<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (wlong and ES_PASSWORD)&lt;&gt;0 then<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;begin<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;LISTBOX1.Items.Add('密码');<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;END;<br><br>这样也会失效,不知是传奇的原因还是其它问题<br><br>但这在本程序有效
 
再加一百分求解
 
嘿嘿~~传奇这种东西太简单了~最简单的用来练手还可以。。不过也没有实用价值<br>防护性能太差(首先~2000系统以后~~就不能直接用发送WM_GETTEXT来直接获取密码了<br>如果要用~也无非三种方法--我就只知道三种方法--HOOK挂钩,代码注入,还有改变输入框的密码属性!!)。。。。。。
 
对于象QQ和天堂那种有消息过滤的东西~小弟不喜欢用复杂的东西。。。。<br>建议两种方法<br>(驱动键盘记录)--驱动部分不能用Delphi写~放弃--建议第二种方法<br>(还有一种方法很简单:既然他们加密是用窗口子类化加密消息数据的,那我们就将计就计~~我们在此子类化~改变消息处理过程!!这种方法很简单~去看看&lt;&lt;WIndows程序设计&gt;&gt;就知道了~)
 
结了,自已找到答案了.
 
这么搞定的,说一下[:D]
 
Wnd:=GetForegroundWindow; <br> &nbsp;if AttachThreadInput(GetCurrentThreadID, GetWindowThreadProcessID(Wnd,nil),true) then <br> &nbsp; &nbsp; begin<br> &nbsp; &nbsp; &nbsp;Wnd:=GetFocus;//这样就可以得到当前窗口的句柄<br> &nbsp; &nbsp; &nbsp;AttachThreadInput(GetCurrentThreadID,GetWindowThreadProcessID(Wnd,nil),false); <br> &nbsp; &nbsp; end;<br><br><br>不过上面的代码不是我写的,是找到的
 

Similar threads

D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
D
回复
0
查看
864
DelphiTeacher的专栏
D
后退
顶部