首页
社区
课程
招聘
[求助]请问:如何将灰色按钮激活,用VB,最好能讲讲原理哦!
发表于: 2009-6-28 17:33 15511

[求助]请问:如何将灰色按钮激活,用VB,最好能讲讲原理哦!

2009-6-28 17:33
15511
我在哪里看到了这个工具可以获取图片上的这些内容,请问:如何将灰色按钮激活,用VB,最好能讲讲原理哦!

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

上传的附件:
收藏
免费 0
支持
分享
最新回复 (39)
雪    币: 26
活跃值: (25)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
2
http://bbs.pediy.com/showthread.php?t=42766&highlight=%E7%81%B0%E8%89%B2+%E8%89%B2%E6%8C%89+%E6%8C%89%E9%92%AE
2009-6-28 19:47
0
雪    币: 2384
活跃值: (766)
能力值: (RANK:410 )
在线值:
发帖
回帖
粉丝
3
用FindWindow之类的API函数找到要激活的窗口或控件句柄。再用EnableWindow函数激活窗口就行了。
2009-6-28 20:27
0
雪    币: 26
活跃值: (25)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
4
啊有VB代码呀,用VB怎么编写呢?
我看了这篇文章http://bbs.pediy.com/showthread.php?t=42766&highlight=%E7%81%B0%E8%89%B2+%E8%89%B2%E6%8C%89+%E6%8C%89%E9%92%AE
里面讲的方法,怎么用VB应该怎么编写呢?
2009-6-28 21:35
0
雪    币: 546
活跃值: (1616)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
5
怎么说呢,打个比方吧:有个小孩,要吃冰棍,妈妈给了他一元钱说,你自己去买吧。然后小孩又问妈妈说:“妈妈,妈妈,卖冰棍的人在哪里呢?”
2009-6-28 23:40
0
雪    币: 26
活跃值: (25)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
6
,就给我讲讲,好吗?
2009-6-29 09:36
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
真解!!

好去研究下吧
2009-6-29 09:56
0
雪    币: 796
活跃值: (370)
能力值: ( LV9,RANK:380 )
在线值:
发帖
回帖
粉丝
8
invoke FindWindow,NULL,CTXT("灰色按钮激活者")
.if eax!=NULL
    mov hText,eax
    invoke FindWindowEx,hText,NULL,NULL,CTXT("结束")
    .if eax!=NULL
         mov hText1,eax
                 invoke        EnableWindow,hText1,TRUE
    .endif
.endif
2009-6-29 10:07
0
雪    币: 26
活跃值: (25)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
9
代码看不懂哦
2009-6-29 10:16
0
雪    币: 796
活跃值: (370)
能力值: ( LV9,RANK:380 )
在线值:
发帖
回帖
粉丝
10
给代码你都看不懂。。。。。我还能说啥。。。。自己研究吧。。别PM了。
2009-6-29 10:21
0
雪    币: 2384
活跃值: (766)
能力值: (RANK:410 )
在线值:
发帖
回帖
粉丝
11
在VB窗口中放两个Command按钮,其中将Command2按钮Enable属性改为FALSE禁止属性。在Command1按钮事件中写入如下代码。
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As Long, ByVal lpWindowName As String) As Long
Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hpWin As Long, ByVal hcWin As Long, ByVal lpClassName As Long, ByVal lpWindowName As String) As Long
Private Declare Function EnableWindow Lib "user32" (ByVal hwnd As Long, ByVal fEnable As Long) As Long

Private Sub Command1_Click()
  hWin = FindWindow(0, "Form1")
  hButton = FindWindowEx(hWin, 0, 0, "Command2")
  i = EnableWindow(hButton, 1)
End Sub
2009-6-29 12:09
0
雪    币: 347
活跃值: (25)
能力值: ( LV9,RANK:420 )
在线值:
发帖
回帖
粉丝
12
.386
                .model flat,stdcall
                option casemap:none
               
include windows.inc
include kernel32.inc
include user32.inc
include macros.asm

includelib kernel32.lib
includelib user32.lib

                .data?

hText        dd        ?
hText1        dd        ?

                .code

start:

                invoke FindWindow,NULL,CTXT("Form1")
                        .if eax != NULL
                                mov hText,eax
                                invoke FindWindowEx,hText,NULL,NULL,CTXT("shit")
                                        .if eax != NULL
                                                mov hText1,eax
                                                invoke EnableWindow,hText1,TRUE                                               
                                        .endif
                        .endif
                invoke ExitProcess,NULL

end start

偷别人的代码,把完整版给你发出来
2009-6-29 16:00
0
雪    币: 227
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
要VB代码,有代码了又看不懂,要改好了发给你。。
2009-6-29 22:02
0
雪    币: 325
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
呵呵这个比喻挺有趣的
2009-6-29 22:38
0
雪    币: 375
活跃值: (12)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
15
WS_DISABLED作为属性的一种,去掉就行了。
去掉的方法可以自己SetWindowLong以及EnableWindow。
2009-6-29 22:54
0
雪    币: 26
活跃值: (25)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
16
Form1:
Private Sub Command1_Click()
  Timer1.Enabled = True
End Sub

Private Sub Timer1_Timer()
  Dim Pt As POINTAPI
  Dim hWindow As Long
  
  GetCursorPos Pt
  hWindow = GetForegroundWindow 'WindowFromPoint(Pt.x, Pt.y)

  Text1.Text = Pt.x & "," & Pt.y
  Text2.Text = hWindow

  '调整标题栏是否可见:
  lStyle = GetWindowLong(hWindow, GWL_STYLE)
  
  lStyle = lStyle Xor WS_DISABLED
  
  SetWindowLong hWindow, GWL_STYLE, lStyle
  
  '刷新 并不是所有的都要刷新,但是还是刷一下好
  SetWindowPos hwnd, 0, 0, 0, 0, 0, SWP_FRAMECHANGED & SWP_NOSIZE & SWP_NOZORDER & SWP_NOMOVE
End Sub

Module1:
Public Declare Function GetCursor Lib "user32" () As Long

Public Declare Function WindowFromPoint Lib "user32" _
  (ByVal xPoint As Long, ByVal yPoint As Long) As Long
  
Public Declare Function GetCursorPos Lib "user32" _
  (lpPoint As POINTAPI) As Long

Public Type POINTAPI
        x As Long
        y As Long
End Type

Public Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" _
  (ByVal hwnd As Long, ByVal nIndex As Long) As Long

Public Const GWL_STYLE = (-16)

Public Const WS_DISABLED = &H8000000

Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" _
  (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long

Public Declare Function GetForegroundWindow Lib "user32" () As Long

Public Declare Function SetWindowPos Lib "user32" _
  (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, _
  ByVal x As Long, ByVal y As Long, ByVal cx As Long, _
  ByVal cy As Long, ByVal wFlags As Long) As Long

Public Const SWP_FRAMECHANGED = &H20        '  The frame changed: send WM_NCCALCSIZE
Public Const SWP_NOSIZE = &H1
Public Const SWP_NOZORDER = &H4
Public Const SWP_NOMOVE = &H2

我这样写怎么实现不了呢?
2009-6-30 08:35
0
雪    币: 129
活跃值: (31)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
这个很简单,EnableWindow()函数就能实现了...

如果没记错,EnableWindow函数带一个参数是窗口句柄吧.....

可以通过鼠标当前焦点来获取灰色按钮的句柄,然后EnableWindow一下就行了。

就是个取句柄问题.
2009-6-30 09:22
0
雪    币: 26
活跃值: (25)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
18
我听说用SetWindowLong&GetWindowLong 可以实现的,所以自己试了试,主要是想用这个
方法来实现呀
2009-6-30 09:27
0
雪    币: 129
活跃值: (31)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
我觉得,灰色按钮要按下,不就是个消息吗?  要实现这个按钮按下后的效果,应该方法挺多的吧。。。

只不过让灰色变的可以按,用窗口扩展风格来实现没研究过。呵呵...记得实现了教教我们菜鸟哈!
2009-6-30 09:32
0
雪    币: 26
活跃值: (25)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
20
帮帮忙把!!
2009-6-30 09:48
0
雪    币: 2384
活跃值: (766)
能力值: (RANK:410 )
在线值:
发帖
回帖
粉丝
21
Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Declare Function IsWindowEnabled Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
Private Declare Function GetForegroundWindow Lib "user32" () As Long
Private Declare Function ScreenToClient Lib "user32" (ByVal hwnd As Long, lpPoint As POINTAPI) As Long
Private Declare Function ChildWindowFromPoint Lib "user32" (ByVal hWndParent As Long, ByVal xpt As Long, ByVal ypt As Long) As Long
Private Type POINTAPI
        x As Long
        y As Long
End Type
Private Const SWP_FRAMECHANGED = &H20        '  The frame changed: send WM_NCCALCSIZE
Private Const SWP_NOMOVE = &H2
Private Const SWP_NOZORDER = &H4
Private Const SWP_NOSIZE = &H1
Private Const GWL_STYLE = (-16)
Private Const WS_DISABLED = &H8000000
Private Const HWND_NOTOPMOST = -2
Private Const HWND_TOPMOST = -1

Private Sub Command1_Click()
  If Timer1.Enabled = False Then
    Timer1.Enabled = True
    SetWindowPos hwnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE
  Else
    Timer1.Enabled = False
    SetWindowPos hwnd, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE
  End If
End Sub

Private Sub Form_Load()
  Timer1.Enabled = False
End Sub

Private Sub Timer1_Timer()
  Dim pt As POINTAPI
  GetCursorPos pt
  hWindow = GetForegroundWindow
  ScreenToClient hWindow, pt
  Text1.Text = "x:" & pt.x & " - " & "y:" & pt.y
  hChildWindow = ChildWindowFromPoint(hWindow, pt.x, pt.y)
  Text2.Text = hChildWindow
  If IsWindowEnabled(hChildWindow) = 0 Then
    nStyle = GetWindowLong(hChildWindow, GWL_STYLE)
    nStyle = nStyle Xor WS_DISABLED
    SetWindowLong hChildWindow, GWL_STYLE, nStyle
    SetWindowPos hChildWindow, 0, 0, 0, 0, 0, SWP_FRAMECHANGED Or SWP_NOMOVE Or SWP_NOSIZE Or SWP_NOZORDER
  End If
End Sub
2009-6-30 11:48
0
雪    币: 750
活跃值: (228)
能力值: ( LV9,RANK:780 )
在线值:
发帖
回帖
粉丝
22
小虾版主,好久不见了,你还是那么热入助人,谢谢了
2009-6-30 13:05
0
雪    币: 26
活跃值: (25)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
23
真的非常谢谢你的帮助!
2009-6-30 13:15
0
雪    币: 26
活跃值: (25)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
24
之前我是用WindowFromPoint,不是用ChildWindowFromPoint,进行获取句柄的,请问有什么区别呢?
有的时候怎么甚至会卡机的哦
2009-6-30 13:53
0
雪    币: 2384
活跃值: (766)
能力值: (RANK:410 )
在线值:
发帖
回帖
粉丝
25
呵呵,最来是有点忙,是有一段时间没有来了。



WindowFromPoint貌似对Disabled化的控件没有效果。
你的代码会卡机的原因是因为你的代码没有判断窗口有没有Disabled化,所有被你的程序捕捉后的窗口都被的代码Enable或Disabled化了,Enable的变成Disabled,Disabled又变回Enable重复循环了。
2009-6-30 15:08
0
游客
登录 | 注册 方可回帖
返回
//