无句柄模式是怎么一回事(有分没人抢,无奈,另外请刘麻子和江南草大虾接分) ( 积分: 300 )

  • 主题发起人 主题发起人 chenybin
  • 开始时间 开始时间
C

chenybin

Unregistered / Unconfirmed
GUEST, unregistred user!
怎么样才能实现QQ那样的界面,也同spy捕获不到界面,无句柄模式是这么一回事, 象Java那样的程序在Delphi可以实现吗?就是无句柄的方式,难道要自己在Canvas上面画?<br><br>1、如果实现无句柄模式,也就是里面提到的IRichEidt,让它嵌入到宿主里面,其实实现IE那样就可以了,就是里面的东西没有焦点<br>2、如果实现让spy抓不到句柄,甚至根本就看不到句柄,我已经描述过了,只能抓到外面的Tab框和号码框,密码和登录模式等都不行,我用的是腾讯QQ2005星河贺岁版<br>3、如果用DrawFrameControl,DrawAnimatedRects ,DrawCaption 等API函数,画出焦点效果,就是鼠标过去会有光标闪动,tab可以切换焦点,这个帖子我自己找资料不多不少,如果哪位可以给出代码,另外加300分,<br><br>------------------------<br>以上3个问题 <br>每个200分。不要轻易告诉我去找MSDN,我还是希望我的问题不是大路货,如果真能看MSDN就可以,那么请告诉我看哪里,但是一定是成熟答案,谢谢<br><br>其实都是比较纯的技术问题,暂时没什么实际用途,<br><br>先发分,可能最近不怎么来了<br>http://www.delphibbs.com/delphibbs/dispq.asp?lid=3219939 &nbsp;lichengbin<br>http://www.delphibbs.com/delphibbs/dispq.asp?lid=3219941 zjan521<br>http://www.delphibbs.com/delphibbs/dispq.asp?lid=3219944 江南草<br>http://www.delphibbs.com/delphibbs/dispq.asp?lid=3219945 刘麻子
 
怎么样才能实现QQ那样的界面,也同spy捕获不到界面,无句柄模式是这么一回事, 象Java那样的程序在Delphi可以实现吗?就是无句柄的方式,难道要自己在Canvas上面画?<br><br>1、如果实现无句柄模式,也就是里面提到的IRichEidt,让它嵌入到宿主里面,其实实现IE那样就可以了,就是里面的东西没有焦点<br>2、如果实现让spy抓不到句柄,甚至根本就看不到句柄,我已经描述过了,只能抓到外面的Tab框和号码框,密码和登录模式等都不行,我用的是腾讯QQ2005星河贺岁版<br>3、如果用DrawFrameControl,DrawAnimatedRects ,DrawCaption 等API函数,画出焦点效果,就是鼠标过去会有光标闪动,tab可以切换焦点,这个帖子我自己找资料不多不少,如果哪位可以给出代码,另外加300分,<br><br>------------------------<br>以上3个问题 <br>每个200分。不要轻易告诉我去找MSDN,我还是希望我的问题不是大路货,如果真能看MSDN就可以,那么请告诉我看哪里,但是一定是成熟答案,谢谢<br><br>其实都是比较纯的技术问题,暂时没什么实际用途,<br><br>先发分,可能最近不怎么来了<br>http://www.delphibbs.com/delphibbs/dispq.asp?lid=3219939 &nbsp;lichengbin<br>http://www.delphibbs.com/delphibbs/dispq.asp?lid=3219941 zjan521<br>http://www.delphibbs.com/delphibbs/dispq.asp?lid=3219944 江南草<br>http://www.delphibbs.com/delphibbs/dispq.asp?lid=3219945 刘麻子
 
[ http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/commctls/richedit/richeditcontrols/richeditcontrolreference/richeditinterfaces/iricheditole.asp ]<br>无句柄RichEdit
 
请教activex 控件问题 &nbsp;想用activex 做个画图板的 程序 &nbsp;就想程序附件中自带的哪个画图板一样 只要求画时出现笔的形状 可以改变粗细 和颜色 !就这点功能 其他的就不要了<br>!<br>也可以用form做!就是 用delpji做一个上述要求的画图板 &nbsp;大哥可以帮帮我吗?<br>我初学delphi 老总给个项目 &nbsp;要在网页中调用delphi activex 制作的这个 画图板控件<br>拜托!<br>我以在delphi 中的开发里 提出这个问题了!很希望得到您的指点!!跪谢!
 
其实应该是有句柄的,用WindowFromPoint或EnumChildWindows均可取到
 
先贴一段lichengbin大虾的代码,用EnumChildWindows和WindowFromPoint倒是可以获得,不知道为什么spy不行,我是2003的,spy是VC6带的那个,真是奇怪<br><br>unit Unit1;<br><br>interface<br><br>uses<br> &nbsp;Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,<br> &nbsp;Dialogs, ExtCtrls, StdCtrls, ActnList;<br><br>type<br> &nbsp;TForm1 = class(TForm)<br> &nbsp; &nbsp;LblWndInfo: TLabel;<br> &nbsp; &nbsp;Timer1: TTimer;<br> &nbsp; &nbsp;ActionList1: TActionList;<br> &nbsp; &nbsp;Action1: TAction;<br> &nbsp; &nbsp;Memo1: TMemo;<br> &nbsp; &nbsp;Action2: TAction;<br> &nbsp; &nbsp;procedure Timer1Timer(Sender: TObject);<br> &nbsp; &nbsp;procedure Action1Execute(Sender: TObject);<br> &nbsp; &nbsp;procedure Action2Execute(Sender: TObject);<br> &nbsp;private<br> &nbsp; &nbsp;{ Private declarations }<br> &nbsp; &nbsp;FWnd: HWND;<br> &nbsp;public<br> &nbsp; &nbsp;{ Public declarations }<br> &nbsp;end;<br><br>var<br> &nbsp;Form1: TForm1;<br><br>implementation<br><br>uses Clipbrd;<br><br>{$R *.dfm}<br><br>procedure TForm1.Timer1Timer(Sender: TObject);<br>var<br> &nbsp;P: TPoint;<br> &nbsp;Wnd: HWND;<br> &nbsp;buf: array[0..255] of Char;<br> &nbsp;S: string;<br> &nbsp;ThreadID, ProcessID: DWORD;<br>begin<br> &nbsp;GetCursorPos(P);<br> &nbsp;Wnd := WindowFromPoint(P);<br> &nbsp;if Wnd &lt;&gt; FWnd then<br> &nbsp;begin<br> &nbsp; &nbsp;FWnd := Wnd;<br> &nbsp; &nbsp;ThreadID := GetWindowThreadProcessID(FWnd, ProcessID);<br> &nbsp; &nbsp;S := Format('(%.8x-%.8x)%.8x: ', [ProcessID, ThreadID, FWnd]);<br> &nbsp; &nbsp;GetClassName(FWnd, buf, Sizeof(buf));<br> &nbsp; &nbsp;S := S + buf;<br> &nbsp; &nbsp;SendMessage(FWnd, WM_GETTEXT, Sizeof(buf), Longint(@buf));<br> &nbsp; &nbsp;S := S + ', ' + buf;<br><br> &nbsp; &nbsp;Wnd := GetParent(Wnd);<br> &nbsp; &nbsp;if Wnd &lt;&gt; 0 then<br> &nbsp; &nbsp;begin<br> &nbsp; &nbsp; &nbsp;GetClassName(Wnd, buf, Sizeof(buf));<br> &nbsp; &nbsp; &nbsp;S := S + Format('(Parent: %.8x, %s)', [Wnd, string(buf)]);<br> &nbsp; &nbsp;end;<br> &nbsp; &nbsp;LblWndInfo.Caption := S;<br> &nbsp; &nbsp;if Width &lt; LblWndInfo.Width + 24 then<br> &nbsp; &nbsp; &nbsp;Width := LblWndInfo.Width + 24;<br> &nbsp;end;<br>end;<br><br>procedure TForm1.Action1Execute(Sender: TObject);<br>begin<br> &nbsp;Clipboard.AsText := LblWndInfo.Caption;<br>end;<br><br>function EnumChildProc(hwnd: HWND; lParam: LPARAM): BOOL; stdcall;<br>var<br> &nbsp;S1, S2: array[0..255] of Char;<br> &nbsp;hwndParent: THandle;<br>begin<br> &nbsp;hwndParent := GetParent(hwnd);<br> &nbsp;GetClassName(hwnd, S1, 255);<br> &nbsp;SendMessage(hwnd, WM_GETTEXT, 255, Integer(@S2));<br> &nbsp;Form1.Memo1.Lines.Add(Format('hwnd: %.8x Parent: %.8x ClassName: %s Caption: %s', [hwnd, hwndParent, S1, S2]));<br> &nbsp;Result := True;<br>end;<br><br>procedure TForm1.Action2Execute(Sender: TObject);<br>begin<br> &nbsp;EnumChildWindows(FWnd, @EnumChildProc, 0);<br>end;<br><br>end.
 
可能是SPY用的方法不对,或者作了一些过滤,比如密码框不抓。。
 
高手都来了,麻子大虾详细点说,为什么抓不到,<br><br>现在的问题是,只能捕获tab和里面的号码框,其他的就抓不到,好像根本没有句柄,但是用lichengbin的代码却可以找到句柄,不知道怎么回事,继续
 
请问您测试用的,是什么版本的QQ登录对话框?我找个来试试
 
腾讯QQ2005星河贺岁版
 
倒,怎么用这么古怪的版本,我用的是qq 2005 beta2,好像控件都能抓得到啊?
 
这个还没怎么接触,学习一下,帮顶一G。<br>不会和版本有关吧,有些版本是私人改过的吧。
 
http://www.xpblue.com/soft/3549.htm<br>这里可以下载<br><br>来自:刘麻子, 时间:2005-9-16 11:59:40, ID:3207723 <br>倒,怎么用这么古怪的版本,我用的是qq 2005 beta2,好像控件都能抓得到啊?<br>不会吧,那就不用beta版本的,用我说的这版本,反正交流技术,也看看人家怎么弄出来的<br><br>另外这个版本的QQ我用VC按资源的方式打开里面是没有Dialog的,其他东西也很少,还没用专门的工具打开看过,推荐一个工具看看它的资源<br><br>[red]鄙人认为,有一定挑战性[:D][:D][/red]
 
那如果实现Java那样的,或者VFP那样的又怎么做呢,让窗口无句柄,自然就抓不到消息了
 
Java我不熟悉,它的所谓的一些“控件”是不是都是程序自己画的?
 
怎么画呢?然后自己控制键盘?鼠标?<br><br>比如tab转移焦点,获得焦点光标闪动?可以全选,复制粘贴?
 
对话框资源其实就是一些文本,未必非得放到资源中.<br>JRE有源码,不过其规模,怕不是能看得过来的.
 
那些有窗口句柄的控件也都是画出来的啊,有的部分是自己画的,有的部分是系统代码画的,比如,画焦点可以用DrawFocusRect(),画按钮可以用DrawFrameControl(),当然也可以自己直接用普通绘图函数来画出类似的效果(需要作简单的计算),光标闪动、全选、部分选中等效果本质上也是画出来的嘛,而键盘鼠标复制粘贴,只不过是消息处理罢了。至于Java,我不懂,是乱猜的,我的原意是,如果一个“控件”没有窗口句柄,则可能是直接在主窗体上画出来的。。
 
to 麻子:DrawFrameControl的uType只有<br>DFC_BUTTON Standard button <br>DFC_CAPTION Title bar <br>DCF_MENU Menu bar <br>DFC_POPUPMENU Windows 98, Windows NT 5.0 and later: Popup menu item. <br>DFC_SCROLL Scroll bar <br>没有edit,和Draw有关的api,这里用得上的就只有<br>DrawAnimatedRects &nbsp;<br>DrawCaption &nbsp;<br>DrawEdge &nbsp;<br>DrawFocusRect &nbsp;<br>DrawFrameControl &nbsp;<br>DrawState &nbsp;<br>DrawStateProc <br>,如果画个eidt出来,并有焦点的效果呢<br><br>to zjan521:对话框资源其实就是一些文本,未必非得放到资源中<br>VC里面怎么用呢,可以通过某种方式获得它的这种资源吗?
 
画Edit也很简单啊,无非是画一些矩形啊、线条啊什么的,还有文字等。。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
1K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部