2,749
社区成员
发帖
与我相关
我的任务
分享*-- 方法一:先取得工作区尺寸,然后比较屏幕和工作区尺寸及坐标算出任务栏尺寸和位置。
*-- 工作区:是指屏幕上不被系统任务栏或应用程序桌面工具遮盖的部分。
Declare Integer SystemParametersInfo In user32 Integer uiAction,Integer uiParam,String @pvParam,Integer fWinIni
#Define SPI_GETWORKAREA 48
lcpvParam=Replicate(Chr(0),16)
If SystemParametersInfo(SPI_GETWORKAREA,0,@lcpvParam,0)#0 && 获取工作区尺寸
lnLeftUpX=CToBin(Substr(lcpvParam,1,4),'4rs') && 工作区左上角 X 坐标
lnLeftUpY=CToBin(Substr(lcpvParam,5,4),'4rs') && 工作区左上角 Y 坐标
lnRightDownX=CToBin(Substr(lcpvParam,9,4),'4rs') && 工作区右下角 X 坐标
lnRightDownY=CToBin(Substr(lcpvParam,13,4),'4rs') && 工作区右下角 Y 坐标
If Sysmetric(1)=lnRightDownX-lnLeftUpX && 判断任务栏位置是 上 或 下(屏幕宽度=工作区宽度 说明任务栏位置是 上 或 下)
lnTrayWidth=Sysmetric(1) && 任务栏宽度=屏幕宽度
lnTrayHeight=Sysmetric(2)-(lnRightDownY-lnLeftUpY) && 任务栏高度=屏幕高度-工作区高度
If lnLeftUpY=0 && 如果工作区左上角 Y 坐标为0,说明任务栏位置为 下,否则为 上
lcTrayOrientation='下'
Else
lcTrayOrientation='上'
Endif
Else && 任务栏位置是 左 或 右
lnTrayWidth=Sysmetric(1)-(lnRightDownX-lnLeftUpX) && 任务栏宽度=屏幕宽度-工作区宽度
lnTrayHeight=Sysmetric(2) && 任务栏高度=屏幕高度
If lnLeftUpX=0 && 如果工作区左上角 X 坐标为0,说明任务栏位置为 右,否则为 左
lcTrayOrientation='右'
Else
lcTrayOrientation='左'
Endif
Endif
Messagebox('任务栏尺寸:'+Transform(lnTrayWidth)+'×'+Transform(lnTrayHeight)+Space(3)+Chr(10)+'任务栏位置:'+lcTrayOrientation,64,'信息提示')
Endif*-- 方法二:先取得任务栏尺寸,然后比较屏幕和任务栏尺寸及坐标算出任务栏位置。
Declare Integer GetWindowRect In user32 Integer hWindow,String @lpRect
Declare Integer FindWindow In user32 String lpClassName,String lpWindowName
lnHWnd=FindWindow('Shell_traywnd','')
If lnHWnd>0
lcRect=Replicate(Chr(0),16)
If GetWindowRect(lnHWnd,@lcRect)#0 && 获取任务栏尺寸
lnLeftUpX=CToBin(Substr(lcRect,1,4),'4rs') && 任务栏左上角 X 坐标
lnLeftUpY=CToBin(Substr(lcRect,5,4),'4rs') && 任务栏左上角 Y 坐标
lnRightDownX=CToBin(Substr(lcRect,9,4),'4rs') && 任务栏右下角 X 坐标
lnRightDownY=CToBin(Substr(lcRect,13,4),'4rs') && 任务栏右下角 Y 坐标
lnTrayWidth=lnRightDownX-lnLeftUpX && 任务栏宽度=右下角 X 坐标-左上角 X 坐标
lnTrayHeight=lnRightDownY-lnLeftUpY && 任务栏高度=右下角 Y 坐标-左上角 Y 坐标
If Sysmetric(1)=lnTrayWidth && 判断任务栏位置是 上 或 下(屏幕宽度=任务栏宽度 说明任务栏位置是 上 或 下)
If lnLeftUpY=0 && 如果任务栏左上角 Y 坐标为0,说明任务栏位置为 上,否则为 下
lcTrayOrientation='上'
Else
lcTrayOrientation='下'
Endif
Else && 任务栏位置是 左 或 右
If lnLeftUpX=0 && 如果任务栏左上角 X 坐标为0,说明任务栏位置为 左,否则为 右
lcTrayOrientation='左'
Else
lcTrayOrientation='右'
Endif
Endif
Messagebox('任务栏尺寸:'+Transform(lnTrayWidth)+'×'+Transform(lnTrayHeight)+Space(3)+Chr(10)+'任务栏位置:'+lcTrayOrientation,64,'信息提示')
Endif
Endif
*-- 方法三
#define ABM_GETTASKBARPOS 0x00000005
Declare Long SHAppBarMessage in shell32 Long, String @
cc = Replicate(Chr(0), 32)
cc = BinToC(4+Len(cc), 'rs') + cc
SHAppBarMessage(ABM_GETTASKBARPOS, @ cc)
nPos = CToBin(Substr(cc,13+0,4), 'rs')
nLeft = CToBin(Substr(cc,13+4,4), 'rs')
nTop = CToBin(Substr(cc,13+8,4), 'rs')
nRight = CToBin(Substr(cc,13+12,4), 'rs')
nBottom = CToBin(Substr(cc,13+16,4), 'rs')
Text to cc Textmerge
位置: <<ICase(0=nPos,'左', 1=nPos,'顶', 2=nPos,'右', 3=nPos,'下', '浮动')>> (<<nLeft>>, <<nTop>>, <<nRight>>, <<nBottom>>)
尺寸: <<nRight - nLeft>>, <<nBottom - nTop>>
EndText
MessageBox(cc)