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