dポイントプレゼントキャンペーン実施中!

VisualBasic2005にてプログラムをしているのですが、
指定されたアクションをトリガにして、外部アプリを最小化で起動したいのですが、最小化されずに起動してしまいます。
外部アプリは、WEBブラウザ(safari)です。

以下に、処理部分を記載します。

Dim p As System.Diagnostics.Process = New System.Diagnostics.Process
p.StartInfo.FileName = 'safariのパス'
p.StartInfo.Arguments = '指定したURL'
p.StartInfo.UseShellExecute = False
p.StartInfo.RedirectStandardOutput = True
p.StartInfo.WindowStyle = ProcessWindowStyle.Minimized
p.StartInfo.CreateNoWindow = True
p.Start()

上記で実行すると、指定したURLでSafariが起動するのですが、
最小化で起動しません。
通常のウィンドウサイズで起動します。

どなたか、アドバイスをお願いします。

A 回答 (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
    • good
    • 1
この回答へのお礼

ありがとうございます。
IEだと理想の動作をするようになりました。

しかし、Safariだとやはり通常ウィンドウでの起動となってしまいます。

ここまでアドバイスをいただきまして、ありがとうございます。
Safariでの最小化を指定しての起動は難しそうなので、IEでの起動を視野に入れて検討してみます。

何度も、ありがとうございました。

お礼日時:2010/03/21 21:49

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
    • good
    • 0

IE8 ですか。


一度、IE が1個も起動していない状態でコードを試して見て下さい。
複数のIE が起動していると、このコードでも通常サイズで起動する
ようです。
Win32 API 等を使って、起動したウィンドウのハンドルを取得して
最小化するしかないかも。
IE に限定するなら、他にも方法はありますが、Safari には使えないかも。
    • good
    • 0

因みに、メモ帳でも、私のコードと貴方のコードで試しましたが


私にコードは、最小化で表示されます。

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
    • good
    • 0
この回答へのお礼

メモ帳での確認ありがとうございます。

私の環境だと、Button3(上)のコードだとメモ帳は最小化で起動しました。

Button4のコードだと、通常サイズで起動しました。

Button3のコードをSafariとIE8で起動してみると、やはり通常サイズで起動しました。

お礼日時:2010/03/16 20:36

>記載していただいた内容をそのまま転載して実行してみたのですが、


>「通常のサイズ」で起動しました。

IExplore.exe を起動されたのでしょうか?
それなら、OS と IE のバージョンを教えて下さい。

Windows Vista IE 7.0 で動作確認
Windows XP IE6.0 で動作確認
VB2005(EE)

この回答への補足

環境は以下のとおりです。

OS:WindowsXP Pro SP3
ブラウザ:IE8
開発環境:Visual Studio 2005 Standard

ブラウザの影響なのでしょうか?

補足日時:2010/03/16 20:26
    • good
    • 0

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
    • good
    • 0
この回答へのお礼

アドバイスありがとうございます。
記載していただいた内容をそのまま転載して実行してみたのですが、
「通常のサイズ」で起動しました。

同じ記述で、vbhanatyanさんは最小化で起動したということでしたらこれは、私の環境の設定の問題なんでしょうか?

お礼日時:2010/03/16 12:35

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!