Vba 如何将ActiveDocument的句柄保存到变量?
如何在Microsoft Word中获取ActiveDocument的Windows句柄Vba 如何将ActiveDocument的句柄保存到变量?,vba,ms-word,Vba,Ms Word,如何在Microsoft Word中获取ActiveDocument的Windows句柄 我希望将句柄值保存到变量。您可以使用FindWindow函数在当前活动的word应用程序中获取窗口句柄: Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" _ (ByVal lpClassName As String, ByVal lpWindowName As String) As Long MS Word的类名为“
我希望将句柄值保存到变量。您可以使用FindWindow函数在当前活动的word应用程序中获取窗口句柄:
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
(ByVal lpClassName As String, ByVal lpWindowName As String) As Long
MS Word的类名为“OpusApp”。如果只打开了一个Word应用程序,则以下操作将返回该窗口的句柄:
Public Function Test1()
Dim lhWnd As Long
lhWnd = FindWindow("OpusApp", vbNullString)
End Function
注意:当您有多个活动Word应用程序时,可以添加窗口标题的名称。例如,如果将其另存为“Stanigator.doc”,则标题应为“Stanigator-Microsoft Word”。因此:
另一个可能派上用场的API是:
Private Declare Function GetActiveWindow Lib "user32" () As Long
编辑:
我本打算推荐VSTO方法,但基于此链接,这似乎并不明智:
正如Tim Williams指出的那样,设置myDoc=ActiveDocument是一种方法,因此对于Word VBA来说,没有类似的方法可以设置ws=ActiveSheet?不幸的是,您必须使用Win32 API。我希望它像ActiveSheet.hWnd一样简单。另一个技巧是使用VisualStudio附带的Spy++验证结果。如果你没有,你可以试着放弃我的项目。那么,我也许可以让我的朋友用C#编写这个应用程序。真恶心。谢谢你的建议。我认为OP使用“手柄”这个词可能会引起一些混乱。我想他们只是想在VBA中获取对活动文档的引用,这非常简单。。。。
Private Declare Function GetActiveWindow Lib "user32" () As Long