请教:给出下列原码:1.应用程序自动随windows起动而起动,并自动缩小到右小角成为一个图标,
2.点右小角小图标,应用程序窗体出现
3.最小化窗体,又缩小为右下角图标
2.点右小角小图标,应用程序窗体出现
3.最小化窗体,又缩小为右下角图标
解决方案 »
- 用VB作个动画
- 一个VB 和SQL 连接的查询窗口不知道错在哪里 麻烦解决下 谢谢
- 图形保存问题
- 在VB中如何定义Dll中的双指针
- 急!! 使用 Set m_odebugform = CreateObject("vbForm") 创建窗体出错, 请指点
- 关于一个VB程序的运行问题,100分求救!!!
- 有谁知道无穷多解矩阵的算法?急需,在线等!!!
- 请问VB中如何打印文件?不要弹出打印对话框。
- 菜鸟问题,我始终不明白随机数的种子是怎么回事??
- 一个关于KeyPress的问题,请帮我一下,谢谢.要填字游戏源代码,或者拿到了源代码的人,请谈谈有什么地方需要改进的!谢谢!
- 为什么啊???????????????????
- *****简单的TEXTBOX问题,不要笑*****
你搜索托盘会找到很多
随着windows启动也就是写注册表regopenkey,regquerykeyex,regsetvalueex也就这几个API,你可以写个函数来用就是了
'定义常量
Public Const GWL_WNDPROC = (-4)
Public Const WM_LBUTTONDOWN = &H201
Public Const NIM_ADD = 0
Public Const NIM_DELETE = 2
Public Const NIF_MESSAGE = 1
Public Const NIF_ICON = 2
Public Const NIF_TIP = 4
'定义全局变量
Public IconMsg As Long '消息编号
Public OldWinProc As Long '原消息处理程序的地址
'定义自定义数据类型
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
'Windows API函数声明
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
Declare Function GetWindowLong Lib "user32"
Alias "GetWindowLongA" (ByVal hWnd As Long,
ByVal nIndex As Long) As Long
Declare Function SetWindowLong Lib "user32" Alias
"SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex
As Long, ByVal dwNewLong As Long) As Long
Declare Function Shell_NotifyIconA Lib "SHELL32" (ByVal
dwMessage As Long, lpData As NOTIFYICONDATA) As Integer
'自定义消息处理程序
Sub MyProc(ByVal hWnd As Long, ByVal Msg As Long,
ByVal wParam As Long, ByVal lParam As Long)
'根据Msg判断,消息是否是图标发出的,
如果是,再进行处理
If Msg = IconMsg Then
If lParam = WM_LBUTTONDOWN Then
frmIconTest.Show '如果在图标上按
下了左键则显示窗体
End If
End If
'执行全程变量OldWinProc记录的原
消息处理程序的地址中的消息处理程序
CallWindowProc OldWinProc, hWnd, Msg, wParam, lParam
End Sub
在frmIconTest的窗体模块中编写如下代码:
Option Explicit
Dim HadAdd As Boolean
Dim nid As NOTIFYICONDATA
Private Sub cmdEnd_Click()
If HadAdd Then
'如果曾向右下角添加过小图标
'则根据事先记录的OldWinProc
恢复原来的消息处理程序,并删除图标
SetWindowLong frmIconTest.hWnd,
GWL_WNDPROC, OldWinProc
Call Shell_NotifyIconA(NIM_DELETE, nid)
'删除图标
End If
Unload Me '卸载窗体
End Sub
Private Sub cmdCreateIcon_Click()
If Not HadAdd Then
'如果没有产生过图标,则添加图标到右下角
With nid
'以下填写nid变量的所有成员
.cbSize = Len(nid) '填写自定义数据类型的长度
.hWnd = frmIconTest.hWnd '填写窗体的句柄
.uID = 9999 '图标的Id,可随意
'允许显示图标、提示并产生消息
.uFlags = NIF_ICON + NIF_TIP + NIF_MESSAGE
.hIcon = frmIconTest.Icon.Handle '图标句柄
.szTip = "单击鼠标左键恢复窗体!" '提示信息
.uCallbackMessage = 2 '图标的消息号
End With
Shell_NotifyIconA NIM_ADD, nid '添加图标
IconMsg = nid.uCallbackMessage
'用全局变量记录消息号,
'读取frmIconTest正常的消息处理程序
的地址保存在全程变量OldWinProc中
OldWinProc = GetWindowLong(frmIconTest.hWnd,
GWL_WNDPROC)
'用自定义过程MyProc的地址
代替正常消息处理程序的地址
SetWindowLong frmIconTest.hWnd,
GWL_WNDPROC, AddressOf MyProc
frmIconTest.Hide '隐藏窗体
HadAdd = True '置“已经添加图标”标志
Else
frmIconTest.Hide '如果已经有小图标了,
则直接隐藏窗体
End If
End Sub
Private Sub cmdNormalMin_Click()
frmIconTest.WindowState = 1 '普通最小化窗体
End Sub
Private Sub Form_Load()
HadAdd = False '将“是否添加了图标的标志”置为False
'下面为窗体装载图标,读者应当根据自己的VB目录而定
frmIconTest.Icon= oadPicture("c:\MyIcon\files10.ico")
End Sub将本例稍做改动即可
'注:要自己建一个隐藏的mnuTray 菜单
Private Sub Form_Load()
'调用添加托盘图标子程序
Me.Hide
AddToTray Me, mnuTray
'调用在托盘图标上显示提示的子程序
SetTrayTip "你的程序托提示"
End SubPrivate Sub Form_Resize()
If Form1.WindowState = 1 Then
Me.Hide
End If
End Sub'在窗体退出后,删除托盘中的图标
Private Sub Form_Unload(Cancel As Integer)
On Error Resume Next
'移除系统托盘
RemoveFromTray
End Sub模块里:
'模块
Public OldWindowProc As Long
Public TheForm As Form
Public TheMenu As Menu
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
Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Declare Function Shell_NotifyIcon Lib "shell32.dll" Alias "Shell_NotifyIconA" (ByVal dwMessage As Long, lpData As NOTIFYICONDATA) As Long
Public Const WM_USER = &H400
Public Const WM_LBUTTONUP = &H202
Public Const WM_MBUTTONUP = &H208
Public Const WM_RBUTTONUP = &H205
Public Const TRAY_CALLBACK = (WM_USER + 1001&)
Public Const GWL_WNDPROC = (-4)
Public Const GWL_USERDATA = (-21)
Public Const NIF_ICON = &H2
Public Const NIF_TIP = &H4
Public Const NIM_ADD = &H0
Public Const NIF_MESSAGE = &H1
Public Const NIM_MODIFY = &H1
Public Const NIM_DELETE = &H2
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
Private TheData As NOTIFYICONDATA
'新的窗口程序,它将取代原来的窗口程序
Public Function NewWindowProc(ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
'如果用户单击了托盘图标
If Msg = TRAY_CALLBACK Then
' 单击的是左键,恢复窗体
If lParam = WM_LBUTTONUP Then
Form1.WindowState = 0
Form1.Show
'TheForm.WindowState = 0
End If
'单击的是右键,弹出快捷菜单
'If lParam = WM_RBUTTONUP Then
' TheForm.PopupMenu TheMenu
' Exit Function
'End If
End If
'将其他消息传递给原来的窗口程序
NewWindowProc = CallWindowProc(OldWindowProc, hwnd, Msg, wParam, lParam)
End Function
'将程序图标添加到系统托盘区
Public Sub AddToTray(frm As Form, mnu As Menu)
'保存变量以供其他处引用
Set TheForm = frm
Set TheMenu = mnu
'装载新的窗口程序
OldWindowProc = SetWindowLong(frm.hwnd, GWL_WNDPROC, AddressOf NewWindowProc)
' 将程序图标添加到系统托盘区
With TheData
.uID = 0
.hwnd = frm.hwnd
.cbSize = Len(TheData)
.hIcon = frm.Icon.Handle
.uFlags = NIF_ICON + NIF_TIP + NIF_MESSAGE
.uCallbackMessage = TRAY_CALLBACK
.uFlags = .uFlags Or NIF_MESSAGE
.cbSize = Len(TheData)
End With
Shell_NotifyIcon NIM_ADD, TheData
End Sub
'将图标从系统托盘区中删除
Public Sub RemoveFromTray()
With TheData
.uFlags = 0
End With
Shell_NotifyIcon NIM_DELETE, TheData
' 恢复原来的窗口程序 .
SetWindowLong TheForm.hwnd, GWL_WNDPROC, OldWindowProc
End Sub
'设置图标的提示信息
Public Sub SetTrayTip(tip As String)
With TheData
.szTip = tip & vbNullChar
.uFlags = NIF_TIP
End With
Shell_NotifyIcon NIM_MODIFY, TheData
End Sub