MASM32编程获取任务栏高度

简介: MASM32编程获取任务栏高度

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

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

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
相关文章
|
18小时前
MASM32编程实现窗口渐入渐出效果
MASM32编程实现窗口渐入渐出效果
|
IDE 开发工具 C语言
使用Visual Studio IDE编写程序时不显示窗口或窗口一闪而逝的解决方法
使用Visual Studio IDE编写程序时不显示窗口或窗口一闪而逝的解决方法
|
计算机视觉
Qt实用技巧:在Qt中获取屏幕的绝对坐标
Qt实用技巧:在Qt中获取屏幕的绝对坐标
Qt-Qml-隐藏标题栏-程序依附任务栏
最近换工作,直接欢动qml这边来了,以后可能会有更多关于qml的文章
340 0
Qt-Qml-隐藏标题栏-程序依附任务栏
|
Windows
MacType 提升Windows字体渲染至新境界
Mac平台上有很多精美的字体,但是换到Windows下之后,这些字体真是惨不忍睹……
425 0
MacType 提升Windows字体渲染至新境界
QT软件开发: 窗口顶置(一直显示在最前面)
QT软件开发: 窗口顶置(一直显示在最前面)
806 0
|
Windows Python
消除windows下的PyCharm中满屏的波浪线
1、PyCharm使用了较为 严格的PEP8 的检查规则,如果代码命名不规范,甚至多出的空格都会被 波浪线 标识出来,导致整个编辑器里 铺满了波浪线,右边的滚动条也全是 黄色或灰色的标记线,很是影响编辑。
1268 0