超难度问题 api

evjen 2008-09-09 11:02:00
怎样用api (vb)实现
: 启动 QQ 的时候在QQ 的登陆界面上面的广告界面用自己的图片

怎么实现

希望大家讨论下(只限制VB)
...全文
280 31 打赏 收藏 转发到动态 举报
写回复
用AI写文章
31 条回复
切换为时间正序
请发表友善的回复…
发表回复
熊孩子开学喽 2008-11-17
  • 打赏
  • 举报
回复
哪那么多麻烦呢,不用QQ就好啦,这破烂东西又大又慢,广告多不说,木马病毒后门都一起来,实在叫人吃不消,你想自己动手改改吧,它还起诉你.
都用WINDOWS自带的WINDOWS MESSAGE吧,省事多了
zhanghuacheng 2008-11-17
  • 打赏
  • 举报
回复
本测试代码的环境为:WinXP+VB6,
我想“对象不支持属性或方法”是不是指picture1.hdc ,如果是请确保你的Form中包含一个名为:picture1的picture控件

如果还不行,你也可以按26楼提供的方法替换其中相关代码再试一下,
不过有一点要指出的是:
按照26#提供的方法成功运行以后,当“QQ登录窗口”关闭掉以后,你将无法关闭本程序,除非你在“任务管理器”中结束该程序的进程,
或许你也可以再添加一些其它的额外代码来进行检测
再补充:setparent 为一API函数;
evjen 2008-11-17
  • 打赏
  • 举报
回复
按照你的做法 老是报“对象不支持属性或方法 ”
就是这句代码
 BitBlt hdc, rt.Left, rt.Top, rt.Right - rt.Left, rt.Bottom - rt.Top, Picture1.hdc, 0, 0, SRCCOPY
ZOUYONG0929 2008-11-17
  • 打赏
  • 举报
回复
23 楼好点子
zhanghuacheng 2008-11-15
  • 打赏
  • 举报
回复
这个帖子待的时间好长啊! :)


'为picture1添加一个图片,并改变其大小必须要大于QQ登录窗口中的广告窗口
'为该窗口添加如下代码
'测试方法:启动QQ的登录窗口,运行本程序,点击command1按钮

Private Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type

Private Const SRCCOPY = &HCC0020 ' (DWORD) dest = source

Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function ChildWindowFromPoint Lib "user32" (ByVal hwnd As Long, ByVal xPoint As Long, ByVal yPoint As Long) As Long
Private Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function GetClientRect Lib "user32" (ByVal hwnd As Long, lpRect As RECT) As Long
Private Declare Function BitBlt Lib "gdi32" (ByVal hDestDC As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal dwRop As Long) As Long


'以QQ2008登录窗口为例
Private Sub Command1_Click()
Dim hwnd As Long: pwnd = 0
Dim hdc As Long: pdc = 0
Dim rt As RECT

hwnd = FindWindow(vbNullString, "QQ用户登录") '查找QQ主登录窗口
If hwnd Then '如果找到了
hwnd = ChildWindowFromPoint(hwnd, 10, 10) '取得广告窗口
hdc = GetDC(hwnd)
If hdc Then
GetClientRect hwnd, rt

'picture1为一个Picture控件
BitBlt hdc, rt.Left, rt.Top, rt.Right - rt.Left, rt.Bottom - rt.Top, Picture1.hdc, 0, 0, SRCCOPY
End If
End If

End Sub
zhanghuacheng 2008-11-15
  • 打赏
  • 举报
回复
[Quote=引用 24 楼 evjen 的回复:]
对象不支持属性或方法

继续...
[/Quote]
Lz说的清楚点
本代码已经编译通过,下面是截图:
zhanghuacheng 2008-11-15
  • 打赏
  • 举报
回复
26楼说的问题的确存在,这里只不过举个简单的例子来说明一下,
其实解决此问题的方法也有多种,例如可以QQ登录窗口为父窗口新建一个子窗口,
可以用此子窗口覆盖广告窗口或子类化于它都是可行的。
Cauly123 2008-11-15
  • 打赏
  • 举报
回复
楼上方法不好
你把其他一个窗体覆盖一下qq窗口又移开,qq广告就又回来了

我的提议
建立一个窗口,无边框,大小与qq广告大小一致,设定picture属性为想替换的图片
Private Sub form_load()
Dim hwnd As Long
Dim hdc As Long
Dim rt As RECT

hwnd = FindWindow(vbNullString, "QQ用户登录") '查找QQ主登录窗口
If hwnd Then '如果找到了
hwnd = ChildWindowFromPoint(hwnd, 10, 10) '取得广告窗口
setparent me.hwnd,hwnd
End If

End Sub
evjen 2008-11-15
  • 打赏
  • 举报
回复
对象不支持属性或方法

继续...
evjen 2008-10-27
  • 打赏
  • 举报
回复
升温中...
能贴点代码出来嘛?
Cauly123 2008-10-24
  • 打赏
  • 举报
回复
我觉得不是很难呀,因为qq登陆窗口的广告位置确实是不会变的,所以用windowfrompoint完全可以获得那个句柄。。。。然后想干吗干吗了咯……用GetDc获得它的dc,或则干脆弄个窗口setParent挡住他……
chillystar 2008-10-11
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 chenjl1031 的回复:]
替换图片,恐怕有点难。那是人家服务器上的东西。不过,如果你是计算机高手的话,那就不用说了,什么都可以干。
[/Quote]

怎么会难呢?只要图片要下载到本地,QQ显示图片的是组件就至少有2个办法。1是换掉它的图片,2是往它组件里塞东西。
第2个办法的思路就是先提升自己程序权限,使自己能访问其它程序进程,先通过findwindow找到QQ主窗口句柄,然后枚举出所有资源并在里面找出目标组件,,最后读入图片到自己的程序并用sendmessage或者通过memcpy将自己程序中的图片换掉目标组件上的。又不是要黑掉人家服务器,就是要正确调用几个API。
dingdongX 2008-10-11
  • 打赏
  • 举报
回复
服务器也是下载图片到本地 即时替换了这个图平 应该可以办到
evjen 2008-09-11
  • 打赏
  • 举报
回复
但是QQ的log图片都在本地
hpygzhx520 2008-09-11
  • 打赏
  • 举报
回复
是这样的,图片保存在一个DLL里面,你必须替换DLL里面的资源。问题是当QQ启动的时候,该DLL是只读的了。
wuhan__boy 2008-09-11
  • 打赏
  • 举报
回复
没分下东西了,狂发几下回帖子拿分,下东西.
evjen 2008-09-10
  • 打赏
  • 举报
回复
寻求高手中...
nanfei01055 2008-09-09
  • 打赏
  • 举报
回复
查找窗口是一件比较麻烦的事,我用VB写过一个程序,枚举出QQ的所有Window,然后一个一个隐藏掉,找到广告窗口的ClassName,再根据你枚举出的所有窗口的属性(比如大小,ClassName,相对于父窗口的位置等)进行筛选,最后找到你要的窗口,替换图片(这一块没具体做过)即可.
evjen 2008-09-09
  • 打赏
  • 举报
回复
通过其它工具捕捉到图片显示框的句柄,然后把它改成你的图片. ???

怎么弄


还有 这个api 可以用在这里么???
Declare Function WindowFromPoint Lib "user32" Alias "WindowFromPoint" (ByVal xPoint As Long, ByVal yPoint As Long) As Long
返回包含了指定点的窗口的句柄。忽略屏蔽、隐藏以及透明窗口
打死不掉牙 2008-09-09
  • 打赏
  • 举报
回复
上面两熊猫!呵呵!
加载更多回复(11)

1,486

社区成员

发帖
与我相关
我的任务
社区描述
VB API
社区管理员
  • API
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧