- ベストアンサー
VisualBasic2005で外部アプリを最小化で起動する方法
- VisualBasic2005にてプログラムをしている際、外部アプリを最小化で起動させたいが、うまくいかない場合がある。
- 使用する外部アプリは、WEBブラウザのSafariであり、最小化せずに通常のウィンドウサイズで起動してしまう。
- 処理部分のコードを修正し、最小化で起動できるようにする方法を教えてほしい。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
Win32 API を使って強制的に最小化。 (但し、一瞬通常表示になる 表示しないとハンドルが取得できないので) <System.Runtime.InteropServices.DllImport("user32.dll", _ CharSet:=System.Runtime.InteropServices.CharSet.Auto)> _ Private Shared Function FindWindowEx( _ ByVal hWnd1 As IntPtr, _ ByVal hWnd2 As IntPtr, _ ByVal lpsz1 As String, _ ByVal lpsz2 As String) As IntPtr End Function <System.Runtime.InteropServices.DllImport("user32.dll", _ CharSet:=System.Runtime.InteropServices.CharSet.Auto)> _ Private Shared Function CloseWindow( _ ByVal hwnd As IntPtr) As Integer End Function Private Sub Button1_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button1.Click Dim p As System.Diagnostics.Process = New System.Diagnostics.Process p.StartInfo.FileName = "C:\Program Files\Internet Explorer\iexplore.exe" p.StartInfo.Arguments = "http://hanatyan.sakura.ne.jp/index.html" p.StartInfo.UseShellExecute = False p.StartInfo.RedirectStandardOutput = True p.StartInfo.WindowStyle = ProcessWindowStyle.Minimized p.StartInfo.CreateNoWindow = True p.Start() p.WaitForExit(1000) Dim localByName As Process() = Process.GetProcessesByName("iexplore") Dim p1 As Process For Each p1 In localByName Dim hwnd As IntPtr = FindWindowEx(IntPtr.Zero, _ IntPtr.Zero, vbNullString, p1.MainWindowTitle) If hwnd <> IntPtr.Zero Then Dim Ret As Integer = CloseWindow(hwnd) End If Next End Sub
その他の回答 (5)
- vbhanatyan
- ベストアンサー率79% (70/88)
WindowsXP VB2005 IE8 で動作確認 (但し、複数起動不可) Private Sub Button1_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button1.Click Dim localByName As Process() = Process.GetProcessesByName("iexplore") Dim p As Process For Each p In localByName p.CloseMainWindow() Next System.Threading.Thread.Sleep(500) Dim Mypro As Process Dim startInfo As New ProcessStartInfo("IExplore.exe") startInfo.WindowStyle = ProcessWindowStyle.Minimized startInfo.CreateNoWindow = False startInfo.Arguments = "http://hanatyan.sakura.ne.jp/index.html" Mypro = Process.Start(startInfo) End Sub
- vbhanatyan
- ベストアンサー率79% (70/88)
IE8 ですか。 一度、IE が1個も起動していない状態でコードを試して見て下さい。 複数のIE が起動していると、このコードでも通常サイズで起動する ようです。 Win32 API 等を使って、起動したウィンドウのハンドルを取得して 最小化するしかないかも。 IE に限定するなら、他にも方法はありますが、Safari には使えないかも。
- vbhanatyan
- ベストアンサー率79% (70/88)
因みに、メモ帳でも、私のコードと貴方のコードで試しましたが 私にコードは、最小化で表示されます。 Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click Dim p As Process Dim si As New ProcessStartInfo("Notepad") si.WindowStyle = ProcessWindowStyle.Minimized si.CreateNoWindow = True si.Arguments = "c:\test.txt" p = Process.Start(si) End Sub Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click Dim p As System.Diagnostics.Process = New System.Diagnostics.Process p.StartInfo.FileName = "Notepad" p.StartInfo.Arguments = "c:\test.txt" p.StartInfo.UseShellExecute = False p.StartInfo.RedirectStandardOutput = True p.StartInfo.WindowStyle = ProcessWindowStyle.Minimized p.StartInfo.CreateNoWindow = True p.Start() End Sub
お礼
メモ帳での確認ありがとうございます。 私の環境だと、Button3(上)のコードだとメモ帳は最小化で起動しました。 Button4のコードだと、通常サイズで起動しました。 Button3のコードをSafariとIE8で起動してみると、やはり通常サイズで起動しました。
- vbhanatyan
- ベストアンサー率79% (70/88)
>記載していただいた内容をそのまま転載して実行してみたのですが、 >「通常のサイズ」で起動しました。 IExplore.exe を起動されたのでしょうか? それなら、OS と IE のバージョンを教えて下さい。 Windows Vista IE 7.0 で動作確認 Windows XP IE6.0 で動作確認 VB2005(EE)
補足
環境は以下のとおりです。 OS:WindowsXP Pro SP3 ブラウザ:IE8 開発環境:Visual Studio 2005 Standard ブラウザの影響なのでしょうか?
- vbhanatyan
- ベストアンサー率79% (70/88)
Safari は使った事がないので、未確認ですが、多分 IE でも同じかと思います。 IE なら下記で最小化で起動しますので、"IExplore.exe" の部分を Safari のフルパスに置き換えれば起動するのではないでしょうか? Private Sub Button1_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button1.Click Dim Mypro As Process Dim startInfo As New ProcessStartInfo("IExplore.exe") startInfo.WindowStyle = ProcessWindowStyle.Minimized startInfo.CreateNoWindow = True startInfo.Arguments = "http://www.hanatyan.sakura.ne.jp/" Mypro = Process.Start(startInfo) End Sub
お礼
アドバイスありがとうございます。 記載していただいた内容をそのまま転載して実行してみたのですが、 「通常のサイズ」で起動しました。 同じ記述で、vbhanatyanさんは最小化で起動したということでしたらこれは、私の環境の設定の問題なんでしょうか?
お礼
ありがとうございます。 IEだと理想の動作をするようになりました。 しかし、Safariだとやはり通常ウィンドウでの起動となってしまいます。 ここまでアドバイスをいただきまして、ありがとうございます。 Safariでの最小化を指定しての起動は難しそうなので、IEでの起動を視野に入れて検討してみます。 何度も、ありがとうございました。