www.pudn.com > 维文输入法源代码.rar > public.bas
Attribute VB_Name = "modPublic"
Option Explicit
Public balga As Boolean
Public bFlashState As Boolean, bDoFlash As Boolean
Public Declare Function GetWindowRect Lib "user32" (ByVal hWnd As Long, _
lpRect As RECT) As Long
Public lpPrevWndProc As Long
Public ghWnd As Long
Public Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type
Public Type NOTIFYICONDATA
cbSize As Long
hWnd As Long
uID As Long
uFlags As Long
uCallbackMessage As Long
hIcon As Long
szTip As String * 64
End Type
Public Type SHFILEINFO
hIcon As Long
iIcon As Long
dwAttributes As Long
szDisplayName As String * 255
szTypeName As String * 80
End Type
Public Const GWL_WNDPROC = -4
Public Const WM_LBUTTONDOWN = &H201
Public Const WM_RBUTTONDOWN = &H204
Public Const WM_LBUTTONDBLCLK = &H203
Public Const TRAY_MSG_MOUSEMOVE = 7680
Public Const TRAY_MSG_LEFTBTN_DOWN = 7695
Public Const TRAY_MSG_LEFTBTN_UP = 7710
Public Const TRAY_MSG_LEFTBTN_DBLCLICK = 7725
Public Const TRAY_MSG_RIGHTBTN_DOWN = 7740
Public Const TRAY_MSG_RIGHTBTN_UP = 7755
Public Const TRAY_MSG_RIGHTBTN_DBLCLICK = 7770
Public Const NIM_ADD = &H0
Public Const NIM_MODIFY = &H1
Public Const NIM_DELETE = &H2
Public Const NIF_MESSAGE = &H1
Public Const NIF_ICON = &H2
Public Const NIF_TIP = &H4
Public Const SHGFI_ICON = &H100
Public Const SHGFI_DISPLAYNAME = &H200
Public Const SHGFI_TYPENAME = &H400
Public Const SHGFI_ATTRIBUTES = &H800
Public Const SHGFI_ICONLOCATION = &H1000
Public Const SHGFI_EXETYPE = &H2000
Public Const SHGFI_SYSICONINDEX = &H4000
Public Const SHGFI_LINKOVERLAY = &H8000
Public Const SHGFI_SELECTED = &H10000
Public Const SHGFI_LARGEICON = &H0
Public Const SHGFI_SMALLICON = &H1
Public Const SHGFI_OPENICON = &H2
Public Const SHGFI_SHELLICONSIZE = &H4
Public Const SHGFI_PIDL = &H8
Public Const SHGFI_USEFILEATTRIBUTES = &H10
Public Const SHGNLI_PIDL = &H1
Public Const SHGNLI_PREFIXNAME = &H2
Public Const TPM_LEFTBUTTON = &H0&
Public Const TPM_RIGHTBUTTON = &H2&
Public Const TPM_LEFTALIGN = &H0&
Public Const TPM_CENTERALIGN = &H4&
Public Const TPM_RIGHTALIGN = &H8&
' Shell Tray Functions
Public Declare Function Shell_NotifyIcon Lib "shell32.dll" Alias "Shell_NotifyIconA" _
(ByVal dwMessage As Long, lpData As NOTIFYICONDATA) As Long
Public Declare Function SHGetFileInfo Lib "shell32.dll" Alias " SHGetFileInfoA" (ByVal pszPath As String, _
ByVal dwFileAttributes As Long, psfi As SHFILEINFO, ByVal cbFileInfo As Long, _
ByVal uFlags As Long) As Long
Public Declare Function SHGetNewLinkInfo Lib "shell32.dll" Alias "SHGetNewLinkInfoA" _
(ByVal pszLinkto As String, ByVal pszDir As String, ByVal pszName As String, pfMustCopy As Long, _
ByVal uFlags As Long) As Long
' Menu Functions
Public Declare Function GetMenu Lib "user32" (ByVal hWnd As Long) As Long
Public Declare Function GetSubMenu Lib "user32" (ByVal hMenu As Long, ByVal nPos As Long) As Long
Public Declare Function TrackPopupMenu Lib "user32" (ByVal hMenu As Long, ByVal wFlags As Long, _
ByVal X As Long, ByVal Y As Long, ByVal nReserved As Long, ByVal hWnd As Long, _
lpRect As Any) As Long
Public Declare Function SetMenuDefaultItem Lib "user32" (ByVal hMenu As Long, ByVal uItem As Long, _
ByVal fByPos As Long) As Long
' Window Functions
Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As Any, _
ByVal lpWindowName As Any) As Long
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 SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal _
nIndex As Long, ByVal dwNewLong As Long) As Long
Public Declare Sub MoveMemory Lib "kernel32" Alias "RtlMoveMemory" (dest As Any, src As Any, ByVal length As Long)
'
Public Sub HookWindow() ' Begin Subclassing the hWnd at: ghWnd
lpPrevWndProc = SetWindowLong(ghWnd, GWL_WNDPROC, AddressOf WindowProc)
End Sub
Public Sub UnhookWindow() ' Stop Subclassing...
Dim temp As Long
temp = SetWindowLong(ghWnd, GWL_WNDPROC, lpPrevWndProc)
End Sub
Function WindowProc(ByVal hw As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
If hw = frm_Main.hWnd Then
If lParam = WM_LBUTTONDBLCLK Then
frm_Main.Show vbModeless
ElseIf lParam = WM_RBUTTONDOWN Then
TrayPopupMenu
Else
WindowProc = CallWindowProc(lpPrevWndProc, hw, uMsg, wParam, lParam)
End If
Else
WindowProc = CallWindowProc(lpPrevWndProc, hw, uMsg, wParam, lParam)
End If
End Function
Public Sub TrayPopupMenu()
Dim hMenu As Long, hSubMenu As Long, hTray As Long
Dim rVal As Long
hMenu = GetMenu(frm_Menu.hWnd)
hSubMenu = GetSubMenu(hMenu, 0)
hTray = FindWindow("Shell_TrayWnd", 0&)
If hTray > 0 Then
Dim TrayRect As RECT
rVal = GetWindowRect(hTray, TrayRect)
SetMenuDefaultItem hSubMenu, 0, True
rVal = TrackPopupMenu(hSubMenu, TPM_RIGHTALIGN, TrayRect.Right, TrayRect.Bottom, 0&, frm_Menu.hWnd, ByVal 0&)
End If
End Sub