VB 灰色按钮客星
来源:互联网 发布:行测做题顺序知乎 编辑:程序博客网 时间:2024/04/29 23:37
无聊时写的程序。没什么技术可言,就是使用了鼠标钩子和一些遍历子窗体的函数等等,有兴趣的可以看看,下面是源码。
主窗体源码:
Option Explicit
Private Declare Function MessageBox Lib "user32" Alias "MessageBoxA" (ByVal hwnd As Long, ByVal lpText As String, ByVal lpCaption As String, ByVal wType As Long) As Long
'显示XP风格函数
Private Declare Sub InitCommonControls Lib "comctl32.dll" ()
Private Sub Form_Initialize()
'显示XP风格
InitCommonControls
End Sub
Private Sub cmdEnabled_Click()
If Me.lstEnableButton.ListCount = 0 Then
MessageBox Me.hwnd, "目前还没有选项!!", "提示", 0
End If
Dim strList As String, lnghWnd As Long
strList = Me.lstEnableButton.List(Me.lstEnableButton.ListIndex)
strList = Mid(strList, InStr(strList, "句柄为:") + Len("句柄为:") + 1, Len(strList) - InStr(strList, "句柄为:") - Len("句柄为:"))
If IsNumeric(strList) Then
lnghWnd = CLng(strList)
Else
lnghWnd = 0
End If
Call EnableWindow(lnghWnd, 0)
MessageBox Me.hwnd, "设置成功!!", "提示", 0
End Sub
Private Sub cmdExit_Click()
Unload Me
End Sub
Private Sub cmdRestore_Click()
Dim strList As String, lnghWnd As Long
If Me.lstEnableButton.ListCount = 0 Then
MessageBox Me.hwnd, "目前还没有选项!!", "提示", 0
End If
strList = Me.lstEnableButton.List(Me.lstEnableButton.ListIndex)
strList = Mid(strList, InStr(strList, "句柄为:") + Len("句柄为:") + 1, Len(strList) - InStr(strList, "句柄为:") - Len("句柄为:"))
If IsNumeric(strList) Then
lnghWnd = CLng(strList)
Else
lnghWnd = 0
End If
Call EnableWindow(lnghWnd, 1)
MessageBox Me.hwnd, "设置成功!!", "提示", 0
End Sub
Private Sub cmdStop_Click()
If cmdStop.Caption = "停止扫描" Then
UnhookWindowsHookEx hHook
cmdStop.Caption = "开始扫描"
Else
cmdStop.Caption = "停止扫描"
hHook = SetWindowsHookEx(WH_MOUSE_DLL, AddressOf MouseProc, App.hInstance, 0)
End If
End Sub
Private Sub Form_Load()
hHook = SetWindowsHookEx(WH_MOUSE_DLL, AddressOf MouseProc, App.hInstance, 0)
End Sub
Private Sub Form_Unload(Cancel As Integer)
UnhookWindowsHookEx hHook
End Sub
模块源码:
Option Explicit
Public Const WH_MOUSE = 7
Public Const WH_MOUSE_DLL = 14
Private Declare Function CallNextHookEx Lib "user32" (ByVal hHook As Long, ByVal ncode As Long, ByVal wParam As Long, lParam As Any) As Long
Declare Function SetWindowsHookEx Lib "user32" Alias "SetWindowsHookExA" (ByVal idHook As Long, ByVal lpfn As Long, ByVal hmod As Long, ByVal dwThreadId As Long) As Long
Declare Function UnhookWindowsHookEx Lib "user32" (ByVal hHook As Long) As Long
Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
Private Declare Function WindowFromPoint Lib "user32" (ByVal xPoint As Long, ByVal yPoint As Long) As Long
Private Declare Function GetClassName Lib "user32" Alias "GetClassNameA" (ByVal hwnd As Long, ByVal lpClassName As String, ByVal nMaxCount As Long) As Long
Private Declare Function IsWindowEnabled Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function ShowWindow Lib "user32" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long
Public Declare Function EnableWindow Lib "user32" (ByVal hwnd As Long, ByVal fEnable As Long) As Long
Private Declare Function EnumChildWindows Lib "user32" (ByVal hWndParent As Long, ByVal lpEnumFunc As Long, ByVal lParam As Long) As Long
Private Declare Function GetParent Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long
Private Declare Function GetWindowTextLength Lib "user32" Alias "GetWindowTextLengthA" (ByVal hwnd As Long) As Long
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Const LB_FINDSTRING = &H18F
Private Type POINTAPI
X As Long
Y As Long
End Type
Private Type MOUSEHOOKSTRUCT
pt As POINTAPI
hwnd As Long
wHitTestCode As Long
dwExtraInfo As Long
End Type
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
Public hHook As Long
Private objMOUSEMSG As MOUSEHOOKSTRUCT
Public Function MouseProc(ByVal idHook As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Dim p As POINTAPI, strClassName As String * 260, lnghWnd As Long, lngRet As Long
If idHook < 0 Then
'call the next hook
MouseProc = CallNextHookEx(hHook, idHook, wParam, ByVal lParam)
Else
CopyMemory objMOUSEMSG, ByVal lParam, LenB(objMOUSEMSG)
'GetCursorPos p
'lnghWnd = WindowFromPoint(p.X, p.Y)
lnghWnd = WindowFromPoint(objMOUSEMSG.pt.X, objMOUSEMSG.pt.Y)
If lnghWnd > 0 And lnghWnd <> frmMain.hwnd Then EnumChildWindows lnghWnd, AddressOf ChlidWindowProc, 0
'lngRet = GetClassName(lnghWnd, strClassName, 260)
' If LCase(Left(strClassName, lngRet)) = "button" Or Left(strClassName, lngRet) = "ThunderCommandButton" Then
' If IsWindowEnabled(lnghWnd) Then
' 'EnableWindow lnghWnd, 0
' ShowWindow lnghWnd, 0
' Else
' 'EnableWindow lnghWnd, 1
' ShowWindow lnghWnd, 5
' End If
' End If
' Debug.Print "鼠标下的句柄是:" & lnghWnd & " 类名是:" & Left(strClassName, lngRet)
'call the next hook
MouseProc = CallNextHookEx(hHook, idHook, wParam, ByVal lParam)
End If
End Function
Public Function ChlidWindowProc(ByVal hwnd As Long, ByVal lParam As Long) As Boolean
Dim lngRet As Long, strClassName As String * 260, strMessage As String, lngFind As Long
lngRet = GetClassName(hwnd, strClassName, 260)
If InStr(LCase(Left(strClassName, lngRet)), "button") > 0 Then
If 0 = IsWindowEnabled(hwnd) Then
strMessage = "在窗体名为: " & GetWindowCaption(GetParenthWnd(hwnd)) & " 被禁用的按钮名为: " & GetWindowCaption(hwnd) & " 句柄为: " & hwnd
lngFind = SendMessage(frmMain.lstEnableButton.hwnd, LB_FINDSTRING, -1, ByVal strMessage)
If lngFind = -1 Then frmMain.lstEnableButton.AddItem strMessage
'Debug.Print "在窗体: " & GetWindowCaption(GetParenthWnd(hWnd)) & " 被禁用的按钮: " & GetWindowCaption(hWnd) & " 句柄为: " & hWnd
'EnableWindow hWnd, 1
End If
End If
ChlidWindowProc = True
End Function
Public Function GetParenthWnd(ByVal hwnd As Long) As Long
Dim lngPrehWnd As Long, lnghWnd As Long
lnghWnd = GetParent(hwnd)
If lnghWnd > 0 Then
Do While 1
DoEvents
lngPrehWnd = lnghWnd
lnghWnd = GetParent(lnghWnd)
If lnghWnd = 0 Then
GetParenthWnd = lngPrehWnd
Exit Function
End If
Loop
Else
GetParenthWnd = hwnd
End If
End Function
Public Function GetWindowCaption(ByVal hwnd As Long) As String
Dim lngLen As String, strTmp As String * 260, lngRet As Long
lngLen = GetWindowTextLength(hwnd)
If lngLen = 0 Then
GetWindowCaption = ""
Else
lngRet = GetWindowText(hwnd, strTmp, lngLen + 1)
GetWindowCaption = Replace(Trim(Left(strTmp, lngRet)), Chr(0), "")
End If
End Function
- VB 灰色按钮客星
- 灰色按钮的破解
- 关闭按钮变灰色
- 灰色按钮激活代码
- 点击按钮高亮时是灰色
- JAVASCRIPT之灰色按钮
- iReport按钮灰色 失效解决方法
- 突破灰色按钮原理讲解
- UITextField的return按钮灰色
- 软件灰色按钮 隐藏按钮破解
- toolbar的按钮还是灰色的
- 对灰色按钮克星的屏蔽
- 电脑休眠按钮灰色的解决方法
- 让按钮变灰色,不可用</
- iis5.1 添加删除映射 按钮灰色
- 提交按钮变灰色不可用状态
- ubuntu10.10中发送/接收按钮灰色
- plsql developer 导出表按钮灰色
- 全新java初学者实践教程17(java SE5.0版)--基本语法6--final关键字
- 对于ERP系统后续的一点思考.....
- 评:日本的“泡沫”代价
- 如何调用Symbian的输入法控件
- xhtml的新attribute
- VB 灰色按钮客星
- VB 分别用DIR和API遍历驱动器实例
- VB Ring3下解锁文件的模块
- September 2007
- VB 更改注册表键权限
- 我们需要什么样的管理方式
- Ad-Hoc 是什么?
- Something about Distinguished Field
- 全新java初学者实践教程19(java SE5.0)--基本语法7- 访问控制和内部类