現在偶想讓偶的強制休息程序的剩余時間提示窗口在屏幕右下角提示,但是不能擋住任務欄,而要在傷務欄的上方
這可能需要獲取任務欄的高度
還是自己查了一下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 start