MASM32编程获取任务栏高度
生活随笔
收集整理的這篇文章主要介紹了
MASM32编程获取任务栏高度
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
現(xiàn)在偶想讓偶的強(qiáng)制休息程序的剩余時(shí)間提示窗口在屏幕右下角提示,但是不能擋住任務(wù)欄,而要在任務(wù)欄的上方
這可能需要獲取任務(wù)欄的高度
Google了一下,這方面的資料不多,在百毒網(wǎng)站Baidu的個(gè)人空間找到了一段VB的代碼(Google的結(jié)果可以有BaiDu的東東,這才是干大事的氣量和風(fēng)度),加減乘除都用上了,不過沒看明白~
還是自己查了一下API,找到了下面的方法(源代碼和可執(zhí)行程序下載地址 http://download.csdn.net/source/640883):
?
;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;?Function:?計(jì)算并顯示系統(tǒng)任務(wù)欄高度
;????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? "系統(tǒng)任務(wù)欄高度",?0
g_szFmtPerD????? db? "系統(tǒng)任務(wù)欄高度為:%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:?計(jì)算系統(tǒng)任務(wù)欄高度
;?In:?(none)
;Out:?若失敗eax=-1,否則eax=高度值
;?//
GetTaskBarHeight? proc
???? local?stDeskRect:?RECT
???? ;---?取桌面工作區(qū)大小
???? invoke?SystemParametersInfo,?SPI_GETWORKAREA,?NULL,? addr?stDeskRect,?NULL
???? test? eax,? eax
???? .if?!ZERO?? ;?取得了嗎?
???????? ;---?如果桌面工作區(qū)左上角y坐標(biāo)值不為零,
???????? ;?說明任務(wù)欄在屏幕上方
???????? .IF?stDeskRect.top?!=?0
???????????? mov? eax,?stDeskRect.top? ;工作區(qū)左上角y坐標(biāo)值即任務(wù)欄高度
???????? .ELSE
???????????? ;---?取屏幕高度
???????????? invoke?GetSystemMetrics,?SM_CYSCREEN
???????????? test? eax,? eax
???????????? jz?@GetTaskBarHeightFailRet? ;未能取得
???????????? .if? eax?!=?stDeskRect.bottom
???????????????? ;---如果屏幕高度與桌面工作區(qū)右下角y坐標(biāo)值相同,
???????????????? ;?那么任務(wù)欄在屏幕兩側(cè),屏幕高度即任務(wù)欄高度
???????????????? ;?否則任務(wù)欄在屏幕下方,屏幕高度與桌面工作區(qū)右下角y坐標(biāo)值之差即即任務(wù)欄高度
???????????????? sub? eax,?stDeskRect.bottom
???????????? .endif
???????? .ENDIF
???? .else
@GetTaskBarHeightFailRet:
???????? mov? eax,?-1
???? .endif
???? ret
GetTaskBarHeight? endp
end?start
總結(jié)
以上是生活随笔為你收集整理的MASM32编程获取任务栏高度的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JAVA点餐系统计算机毕业设计Mybat
- 下一篇: 隐藏系统任务栏