我有一个在 Windows 7 上运行的用 VB.net 编写的应用程序,它打开一个 word 文档并在其中插入一些值。这工作正常,但在我客户的机器上(开发工作正常) Word 在我的应用程序后面打开。我已经尝试在代码中最大化文档,但它仍然在客户端机器上我的应用程序后面打开。有谁知道我该如何解决这个问题?
我已经尝试过的事情:
- 在我的应用程序中最大化单词
- 在我的应用程序中关注单词
- 我已经确保补丁是最新的。
- 我已对 Office 进行了修复
我有一个在 Windows 7 上运行的用 VB.net 编写的应用程序,它打开一个 word 文档并在其中插入一些值。这工作正常,但在我客户的机器上(开发工作正常) Word 在我的应用程序后面打开。我已经尝试在代码中最大化文档,但它仍然在客户端机器上我的应用程序后面打开。有谁知道我该如何解决这个问题?
我已经尝试过的事情:
您是否尝试过最小化应用程序,而不是最大化文档?
Me.WindowState = FormWindowState.Minimized
将最小化调用它的表单(假设您正在使用表单应用程序)。
您可能需要将 Word 放在首位。这与将应用程序中的表单置于顶部有点不同。
您需要引用两个 API,FindWindow和SetWindowPos - 第一个可以找到另一个正在运行的应用程序的窗口句柄,第二个向操作系统发送消息以提供应用程序焦点(它使用来自 FindWindow 的窗口句柄)
这是一些示例代码。
Public Class Form1
<Runtime.InteropServices.DllImport("user32.dll", SetLastError:=True, CharSet:=Runtime.InteropServices.CharSet.Auto)> _
Private Shared Function FindWindow(ByVal lpClassName As String, _
ByVal lpWindowName As String) As IntPtr
End Function
<Runtime.InteropServices.DllImport("user32.dll", SetLastError:=True)> _
Private Shared Function SetWindowPos(ByVal hWnd As IntPtr, ByVal hWndInsertAfter As IntPtr, ByVal X As Integer, ByVal Y As Integer, ByVal cx As Integer, ByVal cy As Integer, ByVal uFlags As Integer) As Boolean
End Function
Private Shared ReadOnly HWND_TOPMOST As New IntPtr(-1)
Private Shared ReadOnly HWND_NOTOPMOST As New IntPtr(-2)
Private Const SWP_NOSIZE As Integer = &H1
Private Const SWP_NOMOVE As Integer = &H2
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Shell("calc.exe")
End Sub
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
Dim myHandle As IntPtr = FindWindow(Nothing, "Calculator")
SetWindowPos(myHandle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE)
SetWindowPos(myHandle, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE)
End Sub
End Class
单击第一个按钮将实例化 Calculator 的副本,第二个按钮将使其位于最顶层,然后将其设置回正常...所以它仍然是顶层窗体,但用户也可以激活其他窗口。