WEB开发网
开发学院软件开发汇编语言 MASM32编程获取任务栏高度 阅读

MASM32编程获取任务栏高度

 2009-10-12 09:37:55 来源:WEB开发网   
核心提示:现在偶想让偶的强制休息程序的剩余时间提示窗口在屏幕右下角提示,但是不能挡住任务栏,MASM32编程获取任务栏高度,而要在伤务栏的上方这可能需要获取任务栏的高度还是自己查了一下API,找到了下面的方法:;<<<<<<<<<<<<<<<

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

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

还是自己查了一下API,找到了下面的方法:

;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
;Function:计算并显示系统任务栏高度
;  Author:PurpleEndurer
; DevEnv:WinXPSP2+MASM32v7
; log
;----------------------------------------------------
;2008-09-21Created!
;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
.386
.modelflat,stdcall
optioncasemap:none
includemasm32includewindows.inc
includemasm32includekernel32.inc
includelibmasm32libkernel32.lib
includemasm32includeuser32.inc
includelibmasm32libuser32.lib
GetTaskBarHeightproto
.data
g_hHInstance  HINSTANCE?
g_szAppName  db"系统任务栏高度",0
g_szFmtPerD  db"系统任务栏高度为:%d",0
g_szBuf200   db200dup(0)
g_szFailtGetHeightdb"未能取得!",0
.code
start:
  invokeGetModuleHandle, NULL
  mov  g_hHInstance,eax
  invokeGetTaskBarHeight
  inceax
  .ifZERO?
    pushMB_ICONERROR
    pushoffsetg_szAppName    ;pushforMessageBox()
    pushoffsetg_szFailtGetHeight;pushforMessageBox()
  .else
    deceax
    invokewsprintf,addrg_szBuf200,addrg_szFmtPerD,eax
    pushMB_ICONINFORMATION;pushforMessageBox()
    pushoffsetg_szAppName;pushforMessageBox()
    pushoffsetg_szBuf200 ;pushforMessageBox()
  .endif
  pushNULL;pushforMessageBox()
  callMessageBox
  invokeExitProcess,eax
;///////////////////////////////
;Fun:计算系统任务栏高度
;In:(none)
;Out:若失败eax=-1,否则eax=高度值
;//////////////////////////////
GetTaskBarHeightproc
  localstDeskRect:RECT
  ;---取桌面工作区大小
  invokeSystemParametersInfo,SPI_GETWORKAREA,NULL,addrstDeskRect,NULL
  testeax,eax
  .if!ZERO?;取得了吗?
    ;---如果桌面工作区左上角y坐标值不为零,
    ;说明任务栏在屏幕上方
    .IFstDeskRect.top!=0
      moveax,stDeskRect.top;工作区左上角y坐标值即任务栏高度
    .ELSE
      ;---取屏幕高度
      invokeGetSystemMetrics,SM_CYSCREEN
      testeax,eax
      jz@GetTaskBarHeightFailRet;未能取得
      .ifeax!=stDeskRect.bottom
        ;---如果屏幕高度与桌面工作区右下角y坐标值相同,
        ;那么任务栏在屏幕两侧,屏幕高度即任务栏高度
        ;否则任务栏在屏幕下方,屏幕高度与桌面工作区右下角y坐标值之差即即任务栏高度
        subeax,stDeskRect.bottom
      .endif
    .ENDIF
  .else
@GetTaskBarHeightFailRet:
    moveax,-1
  .endif
  ret
GetTaskBarHeightendp
endstart

Tags:MASM 编程 获取

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接