求购塑料包装桶:求助:如何唯一确定一已最小化到系统托盘的外部程序。

来源:百度文库 编辑:杭州交通信息网 时间:2024/04/29 13:12:49
有一个程序运行后最小化到系统托盘,不存在任何可视窗口。只能通鼠标过点托盘图标,使用其菜单来对其进行操作。
请问如何用API函数对这个程序进行确定并进行操作!
要进行操作的程序是外部程序,也就是说要自己写一段代码对它进行操作。

我还在没有什么程序,只能给这么多了,以后补上!!谢谢各位!!

我给个VB样例
Form1:
Private Sub Command1_Click()
If (Icon_Add(Form1.hwnd, Picture1.Picture)) Then
Command1.Enabled = False
Form1.Hide
'将DialogProc函数设置为Form1的窗口处理函数并且保存原来窗口处理函数句柄
lproc = SetWindowLong(Form1.hwnd, GWL_WNDPROC, AddressOf DialogProc)
End If
End Sub

Private Sub Command2_Click()
End
End Sub

Module:

Public Declare Function Shell_NotifyIcon Lib "shell32.dll" Alias "Shell_NotifyIconA" (ByVal dwMessage As Long, lpData As NOTIFYICONDATA) As Long
Public Declare Function DrawIcon Lib "user32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal hicon 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 Type POINTAPI
x As Long
y 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 Const NIM_ADD = 0 '添加图标
Public Const NIM_MODIFY = 1 '修改图标
Public Const NIM_DELETE = 2 '删除图标

Public Const NIF_MESSAGE = 1 '当有鼠标事件发生时产生消息
Public Const NIF_ICON = 2 '
Public Const NIF_TIP = 4 '图标有提示字符串

Public Const WM_LBUTTONDOWN = &H201
Public Const WM_RBUTTONDOWN = &H204
Public Const WM_USER = &H400
Public Const WM_NOTIFYICON = WM_USER + &H100
Public Const WM_COMMAND = &H111
Public Const WM_DESTROY = &H2
Public Const WM_DRAWITEM = &H2B
Public Const WM_INITDIALOG = &H110
Public Const WM_PAINT = &HF
Public Const WM_MENUSELECT = &H11F

Public Const GWL_WNDPROC = (-4) '替换窗口处理函数

Global lproc As Long
Function Icon_Del(ihwnd As Long) As Long
Dim ano As NOTIFYICONDATA
ano.hwnd = ihwnd
ano.uID = 0
ano.cbSize = Len(ano)
'删除图标
Icon_Del = Shell_NotifyIcon(NIM_DELETE, ano)
End Function
'这个函数接收图标句柄和窗口句柄并且新建图标
Function Icon_Add(ihwnd As Long, hicon As Long) As Long
Dim ano As NOTIFYICONDATA
Dim astr As String

'为图标添加提示行
astr = "VB程序" 'LTrim$(InputBox$("Input the tips you wanted to add."))
ano.szTip = astr + Chr$(0)
'设置消息接收窗口
ano.hwnd = ihwnd
ano.uID = 0
'图标有提示并且可以发送消息
ano.uFlags = NIF_ICON Or NIF_TIP Or NIF_MESSAGE
ano.hicon = hicon
ano.cbSize = Len(ano)
'将图标的回调消息设置为WM_NOTIFYICON,当在图标区域有鼠标消息,系统就会向
'消息接收窗口发送WM_NOTIFYICON消息。
ano.uCallbackMessage = WM_NOTIFYICON
Icon_Add = Shell_NotifyIcon(NIM_ADD, ano)
End Function

Function DialogProc(ByVal hwnd As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
'该函数为Form1的窗口处理函数。
Dim l As Long
Dim po As POINTAPI
Select Case uMsg
Case WM_INITDIALOG
Case WM_DESTROY
Case WM_COMMAND
Case WM_DRAWITEM
Case WM_NOTIFYICON '有鼠标事件产生
Select Case lParam
Case WM_LBUTTONDOWN '按下鼠标左键
'提示是否删除图标
l = MsgBox("Delete icon?", vbYesNo)
If l = vbYes Then
'删除图标同时恢复窗口处理函数
l = Icon_Del(hwnd)
l = SetWindowLong(Form1.hwnd, GWL_WNDPROC, lproc)
Form1.Show
End If
End Select
Case Else
DialogProc = False
End Select
DialogProc = True
End Function