如何获取系统托盘内的文本内容

贝隆 2010-05-05 10:45:25
我的电脑中安装了鲁大师,用于监测CPU的温度,通常情况下,鲁大师软件后台运行,显示最小化到了右下角的系统托盘,其系统托盘上显示了CPU的实时温度,现在我想将这个实时的温度读取出来,自己写了一点代码,但读不出来。
代码如下:

Option Explicit
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long
Private Sub Command1_Click()
Dim lngP As Long
Dim strTemprature As String * 10
lngP = FindWindow(vbNullString, "鲁大师")
Call GetWindowText(lngP, strTemprature, Len(strTemprature))
Debug.Print strTemprature
Text1.Text = lngP
Text2.Text = strTemprature
End Sub

这段代码读出的内容是:鲁大师

请问怎么才能读取温度值?大家讨论讨论,赐教一二!

鲁大师的下载地址:http://www.ludashi.com/download.html
...全文
368 49 打赏 收藏 转发到动态 举报
写回复
用AI写文章
49 条回复
切换为时间正序
请发表友善的回复…
发表回复
myy168 2010-05-22
  • 打赏
  • 举报
回复
貌似很麻烦,不简单...LZ加油...继续关注...
贝隆 2010-05-16
  • 打赏
  • 举报
回复
[Quote=引用 45 楼 yangwen0953 的回复:]
有一方法不知可不可行

每个数字假是一个小方块,小方块是由白点和黑点组成。这里白点是透明。设黑点为1,白点为0,
在一个矩阵里面有N个0和1组成一个数字,比如数字1
00011000
00111000
00011000
00011000
00011000
00111100

这里的托盘图标有背景,设背景为非1,也就是非全黑,
在数字1的矩阵里面所有的“1”就是组成数字的像素……
[/Quote]
找得到地址就不是问题了。呵呵,多谢指导!
yangwen0953 2010-05-16
  • 打赏
  • 举报
回复
有一方法不知可不可行

每个数字假是一个小方块,小方块是由白点和黑点组成。这里白点是透明。设黑点为1,白点为0,
在一个矩阵里面有N个0和1组成一个数字,比如数字1
00011000
00111000
00011000
00011000
00011000
00111100

这里的托盘图标有背景,设背景为非1,也就是非全黑,
在数字1的矩阵里面所有的“1”就是组成数字的像素点,
事先用放大程序算出数字的宽度
getpixel 获取指定坐标的颜色
getwindowpos 获取窗体坐标
事先可以定义1~10每个数字的特征码
getpixel获取所有的颜色与事先定义的对比,
以上的点阵全是1和非1(这里非字体颜色以外的颜色),可能会有偏差,所以不一定要完全相同,
找到相应的数字就是知道多少温度了。



还有另一方法就是内存读鲁大师数据,这种方法简单快捷,条件是事先找到温度值的内存地址!
贝隆 2010-05-14
  • 打赏
  • 举报
回复
好的
多谢!
momormb 2010-05-14
  • 打赏
  • 举报
回复
学习下~~~~~~
贝隆 2010-05-14
  • 打赏
  • 举报
回复
下载了,你的方法很值得借鉴,不过效果还是有点点不好,非常感谢!!!
舉杯邀明月 2010-05-14
  • 打赏
  • 举报
回复
下载了吧,我去删除了。

不知道你最终采用的什么方法?
舉杯邀明月 2010-05-13
  • 打赏
  • 举报
回复
写了个示例,已经上传了。下载地址已经给你发了消息,我不想公开这个代码。

感觉这个方法也不好,只是用起来很简单。

主要是金山词霸的鼠标取词设置了比较长的延时,这个方法取文本,也得占用鼠标。
如果要用的话,可以在程序中加个‘暂停读取’的功能。
当需要用鼠标操作计算机时,通过键盘暂停对鲁大师的托盘窗口内容的读取,用完后,再继续监视。



其实鲁大师的托盘内容是很规范的文本,你可以写个简单的 OCR模块 ,识别一下那里的数字。
这个对你来说,应该也不算太难吧?
贝隆 2010-05-10
  • 打赏
  • 举报
回复
赐教!
舉杯邀明月 2010-05-10
  • 打赏
  • 举报
回复
如果不怕版权问题,我有个方法可以试一下。
贝隆 2010-05-07
  • 打赏
  • 举报
回复
顶上去
贝隆 2010-05-07
  • 打赏
  • 举报
回复
谢谢!
我正在研究中。。。。暂时无果:)
现在还是人类 2010-05-07
  • 打赏
  • 举报
回复
不过GiveIO应该和WinIO差不多,你也可以看看这方面的资料
wyx_hzyb 2010-05-07
  • 打赏
  • 举报
回复
挺好,有借签性,大家都来看
现在还是人类 2010-05-07
  • 打赏
  • 举报
回复
看了一下,这个程序应该不能直接由VB实现,在Windows 2k以上系统里涉及到驱动开发。
因为需要访问IO芯片地址,我见过有个范例是使用giveio.sys来访问的,并且作出了CPU
温度监视的程序,名称是MBProbe,你可以根据这几个关键字搜索一下看看。
观察MBProbe的文档得知,需要了解这些硬件信息,需要了解的东西很多,如
o ADM1025
All boards
Vccp2: Label 'Vcc', nominal +3.3V.

o AS99127F
All boards should use default settings except:
Asus CUSL2 family
MB Temp: AS99127F:1 CPU Temp: Asus CUSL2

o GL518SM
Aopen boards
MB Temp: None CPU Temp: GL518SM:1
Motherboard temperature offset: -4 C

o GL520SM
All boards
MB Temp: GL520SM:2 CPU Temp: GL520SM:1

o LM75, DS75
Pentium MMX Mobile Module (includes mobile 430TX chipset)
MB Temp: None CPU Temp: LM75|0

o LM78/79
All boards should use default settings except:
Tekram P6B40-A4X
MB Temp: LM78:1 CPU Temp: Tekram
CPU temperature reading is accurate only in the 23-78C range
Some boards may require the 'Winbond' voltage divider setting:
Asus TX97

o LM80
Voltages are divided according to the LM80 datasheet.
If you get incorrect voltages, please report it.
QDI BrillianX 1(S)
Voltage divider: QDI BX1

o LM83
The R setting corresponds to remote diode 2 in the data sheet; the R1 and
R3 settings correspond to remote diodes 1 and 3 respectively.

o MAX1617(A), ADM1020, ADM1021(A), ADM1023, GL523SM, LM84, THMC10
The :0 refers to the temperature of the sensor chip itself while :1 refers
to temperature from an external diode, e.g. the Pentium III thermal diode.
Mobile Pentium II
MB Temp: None CPU Temp: MAX1617|8:1
Pentium II Mobile Module (includes mobile 440BX chipset)
MB Temp: MAX1617|9:0 CPU Temp: MAX1617|9:1
Pentium II/III Xeon
MB Temp: (see mobo) CPU Temp: MAX1617|?:1

o PC87366
Voltage readings are adjusted for the Chaintech 6wim. If you get incorrect
voltages, please report it.

o SiS5595
PC-Chips M590
Voltage divider: PC-Chips M590

o SiS5595B
The temperature reading from this chip is likely to be wrong. The correct
formula for conversion is unknown (there is none in the datasheet and SiS
does not respond to e-mails).
Elite P5SS-ME
MB Temp: SiS5595B:1 CPU Temp: None
PC-Chips M598LMR
MB Temp: None CPU Temp: SiS5595B:1
PC-Chips M599
MB Temp: None CPU Temp: SiS5595B:1
Voltage divider: PC-Chips M599

o SiS950, IT8712F
Voltages are most likely wrong.
If you get incorrect voltages, please report it.

Gigabyte 6OMM7E, 6OXM7E
MB Temp: IT8712F:1 CPU Temp: IT8712F:3 (CPU thermal diode)
Enable CPU thermal diode on Sensor:3
Aux Temp: IT8712F:2

o VT82C686A/B
All temperature readings are accurate only in the 0-80C range
Abit KA7, KT7:
MB Temp: VT82686A:3 CPU Temp: VT82686A:2 System Temp: VT82686A:1
Abit VA6, Gigabyte GA-7ZX-1, MSI-6340(M), Epox 8KTA3(+):
MB Temp: VT82686A:2 CPU Temp: VT82686A:1 System Temp: VT82686A:3
Microstar MS-6330, K7T family, Chaintech CT-7AJA2E:
MB Temp: VT82686A:3 CPU Temp: VT82686A:1 System Temp: VT82686A:2
All other boards:
MB Temp: VT82686A:3 CPU Temp: VT82686A:2


o VT8231
All boards:
MB Temp: VT8231:2 CPU Temp: VT8231:1

o W83781D
All boards should use default settings except:
Elite, Epox boards
MB Temp: W83781D:3 CPU Temp: W83781D:2

o W83782D
Abit BX6 rev 2
MB Temp: W83782D:1 CPU Temp: W83782D:2 (CPU thermal diode)
Enable CPU thermal diode on Sensor:2
CPU Temp: W83782D:3 (thermistor)
Abit BP6
MB Temp: W83782D:3 CPU1 Temp: W83782D:2 CPU2 Temp: W83782D:1
Vccp2 is Vtt (1.5V) and the real Vccp2 is the Vbat reading
Abit BM6, ZM6
MB Temp: W83782D:3 CPU Temp: W83782D:2
Gigabyte 6BXE
MB Temp: W83782D:1 CPU Temp: W83782D:3 (CPU thermal diode)
Enable CPU thermal diode on Sensor:3
CPU Temp: W83782D:2 (thermistor)
Tyan Tiger MP2460
Ensure that "hardware monitoring" is enabled in BIOS then see W83697HF

o W83697HF
Tyan Tiger MP2460
MB Temp: None CPU1 Temp: W83697HF:1 CPU2 Temp: Tyan MP2460
CPU2
Use "Tyan MP2460" voltage divider

o W83783S
Abit BE6
MB Temp: W83783S:2 CPU Temp: W83783S:1

所以,要这么弄感觉比较麻烦
贝隆 2010-05-07
  • 打赏
  • 举报
回复
[Quote=引用 31 楼 supermanking 的回复:]
有空的话帮你研究一下,这东西我也没弄过,呵呵
[/Quote]
非常谢谢!
赵4老师 2010-05-07
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 veron_04 的回复:]
还有,用什么方法可以读取鲁大师进程的内存起始地址?
[/Quote]
参考MSDN中的例子程序pwalk
现在还是人类 2010-05-07
  • 打赏
  • 举报
回复
有空的话帮你研究一下,这东西我也没弄过,呵呵
贝隆 2010-05-07
  • 打赏
  • 举报
回复
不行唉
现在还是人类 2010-05-07
  • 打赏
  • 举报
回复
那用WMI不行吗?
加载更多回复(27)

1,486

社区成员

发帖
与我相关
我的任务
社区描述
VB API
社区管理员
  • API
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧