使用变量的VBA SetCursorPos不起作用

时间:2014-12-08 22:53:24

标签: vba

我的笔记本电脑屏幕尺寸为1280x800。我想将光标位置(x和y值)设置为我的屏幕resoultion的某个%。当我使用以下代码时,它将光标移动到我的屏幕的右下角。当我不使用变量并专门给它坐标时,它工作正常。见下面的代码。

Public Declare Function GetSystemMetrics Lib "user32.dll" (ByVal index As Long) As Long
Private Declare Function SetCursorPos Lib "user32" (ByVal x As Integer, ByVal y As Integer) As Long

Public Const SM_CXSCREEN = 0
Public Const SM_CYSCREEN = 1

Sub SetCoordinates() 
Dim xaxis, yaxis as long

    xaxis = GetSystemMetrics(SM_CXSCREEN)
    yaxis = GetSystemMetrics(SM_CYSCREEN)
    xaxis = xaxis * 0.7421875 '74.21875% across the x axis of the screen
    yaxis = yaxis * 0.875 '87.5% down the Y axis of the screen

    SetCursorPos xaxis, yaxis
' The above line always moves the cursor to the bottom right corner of my screen. The math 
'evaluates to the same numbers below. x = 950 and y = 700. When I don't use variables and 
'specifically give it coordinates, it works fine. like below.
    SetCursorPos 950, 700
End Sub

如何让SetCursorPos函数接受变量输入?我试着用相同的结果将ByVal改为ByRef。

2 个答案:

答案 0 :(得分:1)

您不能将SetCursorPos与预定义变量一起使用,而是关闭选项'Option Explicit',并使用未定义的变量,如下所示:

Public Declare Function GetSystemMetrics Lib "user32.dll" (ByVal index As Long) As Long
Private Declare Function SetCursorPos Lib "user32" (ByVal x As Integer, ByVal y As Integer) As Long

Public Const SM_CXSCREEN = 0
Public Const SM_CYSCREEN = 1

Sub SetCoordinates() 
Dim xaxis, yaxis as long

    xaxis = GetSystemMetrics(SM_CXSCREEN)
    yaxis = GetSystemMetrics(SM_CYSCREEN)
    newx = xaxis * 0.7421875 '74.21875% across the x axis of the screen
    newy = yaxis * 0.875 '87.5% down the Y axis of the screen

SetCursorPos newx, newy 'instead of xaxis, yaxis
'With the nondefined newx and newy variables, 
'the above line will always move the cursor to the right position of the screen.
End Sub

答案 1 :(得分:-1)

文档解释所有

来自帮助。

  

<强> SM_CXSCREEN

     

0主显示屏的屏幕宽度,(以像素为单位)。这是通过调用GetDeviceCaps获得的相同值,如下所示:GetDeviceCaps(hdcPrimaryMonitor,HORZRES)。

     

SetCursorPos功能

     

参数

     

X [in]指定光标的新x坐标,屏幕坐标中的

     

Y [in]指定光标的新y坐标,屏幕坐标中的

     

Windows Vista允许用户更改每英寸点数(dpi)设置,以便屏幕上的大多数用户界面(UI)元素显得更大。尽管此功能在Microsoft Windows中很早就可用,但在以前的版本中,扩展必须由应用程序实现。在Windows Vista中,桌面窗口管理器为所有不处理自身缩放的应用程序执行默认缩放。 Active Accessibility客户端应用程序必须考虑此功能。

     

在Windows Vista中扩展

     

默认dpi设置为96,这意味着96像素占据一个名义英寸的宽度或高度。一个&#34;英寸&#34;的精确尺寸。取决于显示器的大小和物理分辨率。例如,在12英寸宽的监视器上,在1280像素的水平分辨率下,96像素的水平线延伸大约9/10英寸。

     

更改dpi设置与更改屏幕分辨率不同。使用dpi缩放时,屏幕上的物理像素数保持不变。但是,缩放应用于UI元素的大小和位置。桌面窗口管理器(DWM)可以自动执行此缩放,适用于桌面以及未明确要求不缩放的应用程序。

     

实际上,当用户将比例因子设置为120 dpi时,屏幕上的垂直或水平英寸会变大25%。所有尺寸都相应缩放。窗口从屏幕顶部和左侧边缘的偏移量增加了25%。窗口的大小以相同的比例增加,以及它包含的所有UI元素的偏移量和大小。