开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 1252|回复: 1
收起左侧

[其它] MASM32编程获取任务栏高度

[复制链接]

结帖率:61% (35/57)
发表于 2013-2-5 14:27:50 | 显示全部楼层 |阅读模式   海南省海口市
;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; 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
发表于 2022-2-18 21:02:25 高大上手机用户 | 显示全部楼层   广西壮族自治区玉林市
API获取高度
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 诚聘英才| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 800073686,邮箱:800073686@b.qq.com
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表