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

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

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