微软在后台开放的单词

时间:2013-07-09 14:53:34

标签: vb.net ms-word operating-system

我有一个用VB.net编写的应用程序在Windows 7上运行,它打开一个word文档并在其中插入一些值。这工作正常,但在我的客户端的机器上(开发工作正常)Word在我的应用程序后面开放。我已经尝试在代码中最大化文档,但它仍然在客户端计算机上打开我的应用程序。有谁知道如何解决这个问题?

我已经尝试过的事情:

  • 在我的应用程序中最大化单词
  • 专注于我的应用程序中的单词
  • 我确保补丁是最新的。
  • 我在Office上进行了修复

2 个答案:

答案 0 :(得分:1)

您是否尝试过最小化应用程序,而不是最大化文档?

Me.WindowState = FormWindowState.Minimized将最小化调用它的表单(假设您正在使用表单应用程序)。

答案 1 :(得分:0)

您可能需要将Word带到最前沿。这与将应用中的表单放到顶部有点不同。

您需要引用两个API, FindWindow SetWindowPos - 第一个可以找到正在运行的另一个应用程序的Windows句柄,以及秒向操作系统发送一条消息,给予应用程序焦点(它使用FindWindow的Windows句柄)

以下是一些示例代码。

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副本,第二个按钮将使其最顶层,然后将其设置回正常...所以它仍然是最顶层的形式,但用户也可以激活其他窗口。