现在偶想让偶的强制休息程序的剩余时间提示窗口在屏幕右下角提示,但是不能挡住任务栏,而要在任务栏的上方
这可能需要获取任务栏的高度
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