MASM32编程获取任务栏高度

本文介绍了一个使用MASM32在Windows环境下计算系统任务栏高度的方法。通过调用API获取桌面工作区尺寸,并根据任务栏位置判断其高度。适用于需要精确布局的应用程序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

现在偶想让偶的强制休息程序的剩余时间提示窗口在屏幕右下角提示,但是不能挡住任务栏,而要在任务栏的上方

这可能需要获取任务栏的高度

Google了一下,这方面的资料不多,在百毒网站Baidu的个人空间找到了一段VB的代码(Google的结果可以有BaiDu的东东,这才是干大事的气量和风度),加减乘除都用上了,不过没看明白~

还是自己查了一下API,找到了下面的方法(源代码和可执行程序下载地址 http://download.youkuaiyun.com/source/640883):

;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
;Function:计算并显示系统任务栏高度
;Author:PurpleEndurer
;DevEnv:WinXPSP2+MASM32v7
;log
;----------------------------------------------------
;2008-09-21Created!
;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
.386
.model flat, stdcall
option casemap: none
include/masm32/ include/windows.inc

include/masm32/ include/kernel32.inc
includelib/masm32/ lib/kernel32.lib

include/masm32/ include/user32.inc
includelib/masm32/ lib/user32.lib

GetTaskBarHeight proto

.data
g_hHInstanceHINSTANCE?
g_szAppName db "系统任务栏高度",0
g_szFmtPerD db "系统任务栏高度为:%d",0
g_szBuf200 db200dup(0)
g_szFailtGetHeight db "未能取得!",0


.code
start:
invokeGetModuleHandle,NULL
movg_hHInstance, eax

invokeGetTaskBarHeight
inc eax
.ifZERO?
pushMB_ICONERROR
push offsetg_szAppName ;pushforMessageBox()
push offsetg_szFailtGetHeight ;pushforMessageBox()
.else
dec eax
invokewsprintf, addrg_szBuf200, addrg_szFmtPerD, eax

pushMB_ICONINFORMATION ;pushforMessageBox()
push offsetg_szAppName ;pushforMessageBox()
push offsetg_szBuf200 ;pushforMessageBox()
.endif
pushNULL ;pushforMessageBox()
callMessageBox

invokeExitProcess, eax

;///////////////////////////////
;Fun:计算系统任务栏高度
;In:(none)
;Out:若失败eax=-1,否则eax=高度值
;//////////////////////////////
GetTaskBarHeight proc
localstDeskRect:RECT

;---取桌面工作区大小
invokeSystemParametersInfo,SPI_GETWORKAREA,NULL, addrstDeskRect,NULL
test eax, eax
.if!ZERO? ;取得了吗?
;---如果桌面工作区左上角y坐标值不为零,
;说明任务栏在屏幕上方
.IFstDeskRect.top!=0
mov eax,stDeskRect.top ;工作区左上角y坐标值即任务栏高度
.ELSE
;---取屏幕高度
invokeGetSystemMetrics,SM_CYSCREEN
test eax, eax
jz@GetTaskBarHeightFailRet ;未能取得
.if eax!=stDeskRect.bottom
;---如果屏幕高度与桌面工作区右下角y坐标值相同,
;那么任务栏在屏幕两侧,屏幕高度即任务栏高度
;否则任务栏在屏幕下方,屏幕高度与桌面工作区右下角y坐标值之差即即任务栏高度
sub eax,stDeskRect.bottom
.endif
.ENDIF
.else
@GetTaskBarHeightFailRet:
mov eax,-1
.endif
ret
GetTaskBarHeight endp

endstart
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值