一些背景:
快速的背景是我正处于构建PowerPoint加载项的研究阶段。我的最终目标是开发CAD尺寸标注插件,以帮助加快工程演示文稿的创建。我们必须做很多" PowerPoint工程"其中组件的一般尺寸显示在使用PPT形状或CAD几何图形本身的屏幕截图创建的所述组件的简化版本上。但是反复创建维度是单调乏味的。每个通常由箭头,2行和具有维度值的文本框组成。
这是我需要帮助的地方。
(如果您知道如何在Excel中执行以下操作,那也可以使用,我将在稍后确定PPT等效值。)
在PowerPoint幻灯片中,在设计模式下(即不是幻灯片放映模式),我想执行以下工作流程:
我相信我可以使用例外步骤2来处理所有编码,这就是我在这里的原因。我找到一个起点很困难。具体来说,我需要有关如何收听LMC 的帮助。用语言来说,设想如下:
While Listening:
If LMC = TRUE
Do Stuff
End If
End While
但我不具备编码While Listening
部分的知识。我需要在正确的方向上轻推。
我的搜索已经让我登陆MSDN的MouseDown
事件处理程序页面,但在我的测试中,我认为这不是我需要的。好像MouseDown
似乎是为了在用户自己的用户窗口中将鼠标停在CommandButton上时启动例程。
我也找到了这个SO帖子,其中唯一的答案似乎暗示这是不可能的,如果不长篇大论并且代码可能对文件本身有害:How to record mouse clicks in Excel VBA?。 (我没有任何问题需要付出很大的努力并且投入工作,但是如果结果代码很可能造成损害,就像帖子似乎暗示的那样。)(另外,OP没有任何解释,也没有人可以告诉我为什么所以我不会犯同样的错误。)
答案 0 :(得分:1)
您可以通过执行以下操作来完成您要执行的操作(底部可能对您最有帮助): 首先,声明以下内容:
Public Declare Function SetCursorPos Lib "user32" (ByVal x As Long, ByVal y As Long) As Long
Public Declare Sub mouse_event Lib "user32" (ByVal dwFlags As Long, ByVal dx As Long, ByVal dy As Long, ByVal cButtons As Long, ByVal dwExtraInfo As Long)
Public Const MOUSEEVENTF_LEFTDOWN = &H2
Public Const MOUSEEVENTF_LEFTUP = &H4
Public Const MOUSEEVENTF_RIGHTDOWN As Long = &H8
Public Const MOUSEEVENTF_RIGHTUP As Long = &H10
以下代码段将允许您单击,双击或右键单击:
Private Sub SingleClick()
SetCursorPos 100, 100 'x and y position
mouse_event MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0
mouse_event MOUSEEVENTF_LEFTUP, 0, 0, 0, 0
End Sub
Private Sub DoubleClick()
'Double click as a quick series of two clicks
SetCursorPos 100, 100 'x and y position
mouse_event MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0
mouse_event MOUSEEVENTF_LEFTUP, 0, 0, 0, 0
mouse_event MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0
mouse_event MOUSEEVENTF_LEFTUP, 0, 0, 0, 0
End Sub
Private Sub RightClick()
Right Click
SetCursorPos 200, 200 'x and y position
mouse_event MOUSEEVENTF_RIGHTDOWN, 0, 0, 0, 0
mouse_event MOUSEEVENTF_RIGHTUP, 0, 0, 0, 0
End Sub
您需要做的就是将光标位置更改为屏幕上的坐标。 为此,我使用以下代码创建了一个新宏,并将其分配给" Ctrl + Y"按钮。这将告诉您当前鼠标位置的坐标。
Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
Type POINTAPI
x As Long
y As Long
End Type
Sub CurosrXY_Pixels()
Dim lngStatus As Long
Dim typWhere As POINTAPI
lngStatus = GetCursorPos(typWhere)
MsgBox "x: " & typWhere.x & Chr(13) & "y: " & typWhere.y, vbInformation, "Pixels"
End Sub