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