1

Windows 7 で実行されている VB.net で記述されたアプリケーションを使用して、Word 文書を開き、いくつかの値を挿入します。これは正常に動作しますが、クライアントのマシン (開発は正常に動作します) では、アプリケーションの背後で Word が開いています。コードでドキュメントを最大化しようとしましたが、クライアント マシンのアプリケーションの背後でまだ開いています。これを修正する方法を知っている人はいますか?

私がすでに試したこと:

  • アプリケーションで単語を最大化する
  • アプリケーションで単語にフォーカスを与える
  • パッチが最新であることを確認しました。
  • Office の修復を実行しました
4

2 に答える 2

1

ドキュメントを最大化するのではなく、アプリケーションを最小化しようとしましたか?

Me.WindowState = FormWindowState.Minimizedそれを呼び出すフォームを最小化します (これは、フォーム アプリケーションを使用していることを前提としています)。

于 2013-07-09T15:03:43.597 に答える
0

Word を前面に出す必要があるかもしれません。これは、アプリのフォームを一番上に表示することとは少し異なります。

FindWindowSetWindowPosの2 つの API への参照が必要です。1 つ目は実行中の別のアプリケーションのウィンドウ ハンドルを見つけることができ、2 つ目はオペレーティング システムにメッセージを送信してアプリケーションにフォーカスを与えます ( 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 のコピーがインスタンス化され、2 番目のボタンでそれが最上位になり、通常の状態に戻ります...したがって、最上位のフォームのままですが、ユーザーは他のウィンドウをアクティブにすることもできます。

于 2013-07-09T15:47:08.527 に答える