2012-04-15 59 views

回答

3

可以使用FindWindow函数来获得窗口的句柄在当前激活的词应用:

Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" _ 
(ByVal lpClassName As String, ByVal lpWindowName As String) As Long 

MS Word的类名是“OpusApp”。如果你只有一个字应用开放那么下面将手柄返回到窗口:

Public Function Test1() 
Dim lhWnd As Long 
lhWnd = FindWindow("OpusApp", vbNullString) 
End Function 

注意,当你有多个活动的Word应用程序,你可以添加窗口标题的名称。例如,如果它保存为“Stanigator.doc”,那么标题将被解读为“Stanigator - Microsoft Word”。所以:

Public Function Test2() 
Dim lhWnd As Long 
lhWnd = FindWindow(vbNullString, "Stanigator - Microsoft Word") 
End Function 

可能派上用场的其他API是:

Private Declare Function GetActiveWindow Lib "user32"() As Long 

编辑:

我要推荐VSTO做法,但基于此链接,没有按”上t似乎是明智的: Connect Issue: VSTO API support for MS Word Main Window Handle

+0

所以没有类似的方式来为Word VBA设置ws = ActiveSheet? – stanigator 2012-04-15 05:20:57

+0

不幸的是你必须使用Win32 API。我希望它像ActiveSheet.hWnd一样简单。另一个诀窍是使用Visual Studio自带的Spy ++来验证结果。如果你没有它,你可以尝试http://www.catch22.net/software/winspy-17 – 2012-04-15 05:32:33

+0

然后放弃我的项目。然后,我可以让我的朋友用C#编写应用程序。毛。谢谢你的建议。 – stanigator 2012-04-15 05:53:01

0

正如Tim Williams指出的,它是Set myDoc = ActiveDocument

相关问题