手机站
网通分站
电信主站
密 码:
用户名:
当前位置 : 主页>网络编程>Asp.Net编程>列表

制作可以自动隐藏的弹出式菜单

来源:互联网 作者:西部数码 时间:2008-04-10
西部数码-全国虚拟主机10强!40余项虚拟主机管理功能,全国领先!双线多线虚拟主机南北访问畅通无阻!免费赠送企业邮局,.CN域名,自助建站480元起,免费试用7天,满意再付款! P4主机租用799元/月.月付免压金!

''''== 控件与消息函数 =============================
''''CallWindowProc 把消息信息传递给指定的窗体过程
''''GetClassName 为指定的窗口取得类名
''''SetWindowLong 在窗体结构中为指定的窗体设置信息。返回值:Long,指定数据的前一个值。
''''WindowFromPoint 返回包含了指定点的窗口的句柄。
Public Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hWnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Public Declare Function GetClassNameA Lib "user32" (ByVal hWnd As Long, lpClassName As Any, ByVal nMaxCount As Long) As Long
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 WindowFromPoint Lib "user32" (ByVal xPoint As Long, ByVal yPoint As Long) As Long

''''-- SetWindowLong ------------------------------
Public Const GWL_WNDPROC = -4

''''===============================================
Public Const WM_ENTERIDLE = &H121

''''===============================================
Public MeOldWndProc As Long ''''旧的窗体消息处理程序地址

Public ShowMsg As Boolean

Public OldIn As Boolean
Public OldTime As Long
Public ChkTime As Boolean

Public Function ClassName(ByVal hWnd As Long) As String
Dim StrData(0 To &H100) As Byte
Dim Rc As Long

Rc = GetClassNameA(hWnd, StrData(0), &H100)
If Rc > 0 Then
ClassName = StrConv(LeftB(StrData, Rc), vbUnicode)
Else
ClassName = vbNullString
End If

End Function

Public Sub Hook(ByVal hWnd As Long)
MeOldWndProc = SetWindowLong(hWnd, GWL_WNDPROC, AddressOf WindowProc)

End Sub

Public Sub UnHook(ByVal hWnd As Long)
Call SetWindowLong(hWnd, GWL_WNDPROC, MeOldWndProc)

End Sub

''''消息处理
Public Function WindowProc(ByVal hWnd As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Select Case uMsg
Case WM_ENTERIDLE
''''Debug.Print "WM_ENTERIDLE"

ChkExit

Case Else
''''If ShowMsg Then Debug.Print uMsg

''''下级传递消息
WindowProc = CallWindowProc(MeOldWndProc, hWnd, uMsg, wParam, lParam)

End Select

End Function

Public Sub ChkExit()
Dim TempPoint As POINTAPI
Dim TemphWnd As Long
Dim TempBool As Boolean

GetCursorPos TempPoint
TemphWnd = WindowFromPoint(TempPoint.X, TempPoint.Y)
If TemphWnd Then
TempBool = (ClassName(TemphWnd) = "#32768")
Else
TempBool = False
End If
''''Debug.Print TempBool

If TempBool <> OldIn Then
If TempBool Then
OldTime = 0
ChkTime = False
Else
OldTime = GetTickCount
ChkTime = True
End If
OldIn = TempBool

End If

If ChkTime Then
If GetTickCount - OldTime > 1000 Then ''''大于1秒就退出
''''Debug.Print "Exit"
keybd_event VK_ESCAPE, 0, 0, 0
keybd_event VK_ESCAPE, 0, KEYEVENTF_KEYUP, 0

ChkTime = False

End If

End If

End Sub

文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!