现在偶想让偶的强制休息程序的剩余时间提示窗口在屏幕右下角提示,但是不能挡住任务栏,而要在任务栏的上方
这可能需要获取任务栏的高度
Google了一下,这方面的资料不多,在百毒网站Baidu的个人空间找到了一段VB的代码(Google的结果可以有BaiDu的东东,这才是干大事的气量和风度),加减乘除都用上了,不过没看明白~
还是自己查了一下API,找到了下面的方法(源代码和可执行程序下载地址 ):
;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; Function: 计算并显示系统任务栏高度
; Author: PurpleEndurer
; DevEnv: Win XP SP2 + MASM32 v7
; log
; ----------------------------------------------------
; 2008-09-21 Created!
;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
.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_hHInstance HINSTANCE ?
g_szAppName
db
"系统任务栏高度", 0
g_szFmtPerD
db
"系统任务栏高度为:%d", 0
g_szBuf200
db 200 dup(0)
g_szFailtGetHeight
db
"未能取得!", 0
.code
start:
invoke GetModuleHandle, NULL
mov g_hHInstance,
eax
invoke GetTaskBarHeight
inc
eax
.if ZERO?
push MB_ICONERROR
push
offset g_szAppName
;push for MessageBox()
push
offset g_szFailtGetHeight
;push for MessageBox()
.else
dec
eax
invoke wsprintf,
addr g_szBuf200,
addr g_szFmtPerD,
eax
push MB_ICONINFORMATION
;push for MessageBox()
push
offset g_szAppName
;push for MessageBox()
push
offset g_szBuf200
;push for MessageBox()
.endif
push NULL
;push for MessageBox()
call MessageBox
invoke ExitProcess,
eax
;///
;Fun: 计算系统任务栏高度
; In: (none)
;Out: 若失败eax=-1,否则eax=高度值
; //
GetTaskBarHeight
proc
local stDeskRect: RECT
;--- 取桌面工作区大小
invoke SystemParametersInfo, SPI_GETWORKAREA, NULL,
addr stDeskRect, NULL
test
eax,
eax
.if !ZERO?
; 取得了吗?
;--- 如果桌面工作区左上角y坐标值不为零,
; 说明任务栏在屏幕上方
.IF stDeskRect.top != 0
mov
eax, stDeskRect.top
;工作区左上角y坐标值即任务栏高度
.ELSE
;--- 取屏幕高度
invoke GetSystemMetrics, 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
end