关于枚举任务栏托盘里的图标
我想判断某个图标是否在“任务栏托盘”里出现,有什么好办法吗?
谢谢了!
我想判断某个图标是否在“任务栏托盘”里出现,有什么好办法吗?
谢谢了!
解决方案 »
- VB调用FORTON生成的EXE文件,如何知道EXE文件合适运行结束
- MSFlexGrid控件操作难题
- 类模块中调用OCX出错
- 请教高手Mscomm接收单片机发上来的数据包
- 菜鸟求问高手:VB能实现对某网页信息监控,当符合某一条件时,模拟鼠标点击的功能么?
- 修改数据
- 急!在下等待:怎样把MaskEdBox控件的内容转换为数据库能识别的日期格式?
- *******************短信平台软件编写!!!
- HELP ME <图书管理 系统的条形码输入处理源代码 > 大有分加
- 编写一个程序查找某个目录下所有文件,后在树视图中查找某个节点?
- 高分求datareport中判断参数打印问题
- 请问VB中返回字符串中的数字是什么函数啊?忘记了,就等你来...谢谢..
何通过托盘图标得到该所属进程
http://community.csdn.net/Expert/FAQ/FAQ_Index.asp?id=207497
我去看看
lngTemp = FindWindow("Shell_TrayWnd", vbNullString)
lngTemp = FindWindowEx(lngTemp, 0, "TrayNotifyWnd", vbNullString)
lngTemp = FindWindowEx(lngTemp, 0, "SysPager", vbNullString)
lngTray = FindWindowEx(lngTemp, 0, "ToolbarWindow32", vbNullString)
Debug.Print "lngTray="; lngTray
ret = GetWindowThreadProcessId(lngTray, lngPid)
hProcess = OpenProcess(PROCESS_ALL_ACCESS Or PROCESS_VM_OPERATION Or PROCESS_VM_READ Or PROCESS_VM_WRITE, 0, lngPid)
lngAddress = VirtualAllocEx(hProcess, ByVal 0&, ByVal 4096&, MEM_COMMIT, PAGE_READWRITE)
lngButtons = SendMessage(lngTray, TB_BUTTONCOUNT, 0, 0) For i = 0 To lngButtons - 1
ret = SendMessage(lngTray, TB_GETBUTTON, ByVal i, ByVal lngAddress)
ret = ReadProcessMemory(hProcess, ByVal lngAddress + 16, ByVal VarPtr(lngTextAdr), ByVal 4, ByVal 0&)
If lngTextAdr <> -1 Then
ret = ReadProcessMemory(hProcess, ByVal lngTextAdr, ByVal VarPtr(strBuff(0)), ByVal 1024, ByVal 0&)
ret = ReadProcessMemory(hProcess, ByVal lngAddress + 12, ByVal VarPtr(lngHwndAdr), ByVal 4, ByVal 0&)
ret = ReadProcessMemory(hProcess, ByVal lngHwndAdr, ByVal VarPtr(lngHWnd), ByVal 4, ByVal 0&)
ret = ReadProcessMemory(hProcess, ByVal lngAddress + 4, ByVal VarPtr(lngButtonID), ByVal 4, ByVal 0&) strText = ConverNull(strBuff)
'lngHwnd 所属窗口handle
'strText 托盘图标文字
End If
Next i
VirtualFreeEx hProcess, ByVal lngAddress, ByVal 4096&, MEM_RELEASE
CloseHandle hProcess
我试试能否看懂,谢谢了
有些不明白:"OpenProcess" 等过程要怎么声明呢,谢谢了。
可以找到完整的代码或源程序吗。
Private Declare Function OpenProcess Lib "KERNEL32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Private Declare Function CloseHandle Lib "KERNEL32" (ByVal hObject As Long) As Long
Private Const READ_CONTROL As Long = &H20000
Private Const STANDARD_RIGHTS_REQUIRED As Long = &HF0000
Private Const STANDARD_RIGHTS_READ As Long = (READ_CONTROL)
Private Const STANDARD_RIGHTS_EXECUTE As Long = (READ_CONTROL)
Private Const STANDARD_RIGHTS_ALL As Long = &H1F0000
Private Const STANDARD_RIGHTS_WRITE As Long = (READ_CONTROL)
Private Const SYNCHRONIZE As Long = &H100000
Private Const PROCESS_ALL_ACCESS As Long = (STANDARD_RIGHTS_REQUIRED Or SYNCHRONIZE Or &HFFF)
Private Const PROCESS_TERMINATE As Long = (&H1)
Private Declare Function GetWindowThreadProcessId Lib "user32.dll" (ByVal hwnd As Long, lpdwProcessId As Long) As LongPrivate Declare Function FindWindow Lib "USER32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function FindWindowEx Lib "USER32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long
Private Const TB_BUTTONCOUNT As Long = (WM_USER + 24)
Private Const TB_HIDEBUTTON As Long = (WM_USER + 4)
Private Const TB_GETBUTTON As Long = (WM_USER + 23)
Private Const TB_GETBITMAP As Long = (WM_USER + 44)
Private Const TB_DELETEBUTTON As Long = (WM_USER + 22)
Private Const TB_ADDBUTTONS As Long = (WM_USER + 20)
Private Const TB_INSERTBUTTON As Long = (WM_USER + 21)
Private Const TB_ISBUTTONHIDDEN As Long = (WM_USER + 12)
Private Const ILD_NORMAL As Long = &H0
Private Declare Function SendMessage Lib "user32.dll" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Declare Function WriteProcessMemory Lib "kernel32.dll" (ByVal hProcess As Long, lpBaseAddress As Any, lpBuffer As Any, ByVal nSize As Long, lpNumberOfBytesWritten As Long) As Long
Private Declare Function ReadProcessMemory Lib "kernel32.dll" (ByVal hProcess As Long, lpBaseAddress As Any, lpBuffer As Any, ByVal nSize As Long, lpNumberOfBytesWritten As Long) As Long
Private Declare Function VirtualAllocEx Lib "kernel32.dll" (ByVal hProcess As Long, lpAddress As Any, ByRef dwSize As Long, ByVal flAllocationType As Long, ByVal flProtect As Long) As Long
Private Declare Function VirtualFreeEx Lib "kernel32.dll" (ByVal hProcess As Long, lpAddress As Any, ByRef dwSize As Long, ByVal dwFreeType As Long) As Long
Private Const PROCESS_VM_OPERATION As Long = (&H8)
Private Const PROCESS_VM_READ As Long = (&H10)
Private Const PROCESS_VM_WRITE As Long = (&H20)
Private Const MEM_RESERVE As Long = &H2000
Private Const MEM_COMMIT As Long = &H1000
Private Const MEM_RELEASE As Long = &H8000
Private Const PAGE_READWRITE As Long = &H4
我试试看,不懂又请教你。
我的基础实在是差了,原来只会用VBS写一些脚本,现在看这些VB代码,好多地方看不懂,研究了几天,还是没有搞明白,例如“strBuff”这些又该怎么来声明或定义呢?
要是能有完整的源代码就好了。
非常感谢 kmlxk 提供的源代码,真的非常感谢。