MASM32编程获取任务栏高度
2009-10-12 09:37:55 来源:WEB开发网现在偶想让偶的强制休息程序的剩余时间提示窗口在屏幕右下角提示,但是不能挡住任务栏,而要在伤务栏的上方
这可能需要获取任务栏的高度
还是自己查了一下API,找到了下面的方法:
;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
;Function:计算并显示系统任务栏高度
; Author:PurpleEndurer
; DevEnv:WinXPSP2+MASM32v7
; log
;----------------------------------------------------
;2008-09-21Created!
;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
.386
.modelflat,stdcall
optioncasemap:none
includemasm32includewindows.inc
includemasm32includekernel32.inc
includelibmasm32libkernel32.lib
includemasm32includeuser32.inc
includelibmasm32libuser32.lib
GetTaskBarHeightproto
.data
g_hHInstance HINSTANCE?
g_szAppName db"系统任务栏高度",0
g_szFmtPerD db"系统任务栏高度为:%d",0
g_szBuf200 db200dup(0)
g_szFailtGetHeightdb"未能取得!",0
.code
start:
invokeGetModuleHandle, NULL
mov g_hHInstance,eax
invokeGetTaskBarHeight
inceax
.ifZERO?
pushMB_ICONERROR
pushoffsetg_szAppName ;pushforMessageBox()
pushoffsetg_szFailtGetHeight;pushforMessageBox()
.else
deceax
invokewsprintf,addrg_szBuf200,addrg_szFmtPerD,eax
pushMB_ICONINFORMATION;pushforMessageBox()
pushoffsetg_szAppName;pushforMessageBox()
pushoffsetg_szBuf200 ;pushforMessageBox()
.endif
pushNULL;pushforMessageBox()
callMessageBox
invokeExitProcess,eax
;///////////////////////////////
;Fun:计算系统任务栏高度
;In:(none)
;Out:若失败eax=-1,否则eax=高度值
;//////////////////////////////
GetTaskBarHeightproc
localstDeskRect:RECT
;---取桌面工作区大小
invokeSystemParametersInfo,SPI_GETWORKAREA,NULL,addrstDeskRect,NULL
testeax,eax
.if!ZERO?;取得了吗?
;---如果桌面工作区左上角y坐标值不为零,
;说明任务栏在屏幕上方
.IFstDeskRect.top!=0
moveax,stDeskRect.top;工作区左上角y坐标值即任务栏高度
.ELSE
;---取屏幕高度
invokeGetSystemMetrics,SM_CYSCREEN
testeax,eax
jz@GetTaskBarHeightFailRet;未能取得
.ifeax!=stDeskRect.bottom
;---如果屏幕高度与桌面工作区右下角y坐标值相同,
;那么任务栏在屏幕两侧,屏幕高度即任务栏高度
;否则任务栏在屏幕下方,屏幕高度与桌面工作区右下角y坐标值之差即即任务栏高度
subeax,stDeskRect.bottom
.endif
.ENDIF
.else
@GetTaskBarHeightFailRet:
moveax,-1
.endif
ret
GetTaskBarHeightendp
endstart
更多精彩
赞助商链接