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