程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 匯編語言 >> MASM32編程獲取任務欄高度

MASM32編程獲取任務欄高度

編輯:匯編語言

現在偶想讓偶的強制休息程序的剩余時間提示窗口在屏幕右下角提示,但是不能擋住任務欄,而要在傷務欄的上方

這可能需要獲取任務欄的高度

還是自己查了一下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
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved