• ベストアンサー

Process.Startで起動したアプリを最大化したいです。VB.NET

こんにちは、お世話になっております。 下記のようなコードでアプリケーションを起動して ウィンドウを最大化したいのですが、 どのようにしたら良いでしょうか。 3行目のように大きさを画面いっぱいに設定する方法は 出来たのですが、最大化の方法がわかりません。 申し訳ありませんが、教えて頂きたくお願いいたします。 Dim p As System.Diagnostics.Process p = System.Diagnostics.Process.Start("***") MoveWindow(p.MainWindowHandle, 0, 0, 1024, 768, 1)

質問者が選んだベストアンサー

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

>起動後のアプリが最大化されませんでした。 起動して、そのウインドウを最大化するサンプル ---------------------------------------------------------------- Imports System Imports System.Text Imports System.Diagnostics Imports System.Threading Imports System.Runtime.InteropServices Imports Microsoft.VisualBasic 'vbc Example.vb /r:System.dll Namespace Example Class ExampleClass 'Win32API <DllImport("USER32.DLL")> _ Public Shared Function ShowWindow( _ ByVal handle As IntPtr, _ ByVal style As Integer ) As Integer End Function Shared Sub Main() const SW_MAXMIZE as Integer = 3 Dim instance As Process instance=Process.Start("notepad.exe") 'アプリケーションを起動する Dim hWnd As IntPtr hWnd = instance.MainWindowHandle 'ウィンドウハンドルを得る Thread.Sleep(5000) '起動の完了を5秒待つ ShowWindow(hWnd, SW_MAXMIZE) '最大化する End Sub End Class End Namespace

popopompom
質問者

お礼

再びの回答ありがとうございます。 しかもとても詳しくご丁寧に書いて頂いて感激です。 しかしやはりメモ帳だと正常にできるのですが、 目的のソフトだと変化がありませんでした(;;) AAAA.exeを起動するとタスクバーにスタートアップと 本体の2つが出るので、そのあたりに原因がありそうです。 AAAA.exeは確かにプログラム本体なのですが、またいろいろと試行錯誤してみたいと思います。 いつもお返事くださってありがとうございます。

その他の回答 (1)

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

ProcessStartInfo クラスのオブジェクトを使って設定後Process.Start します ---------------------------------------------------------------- Imports System Imports System.Text Imports System.Diagnostics Imports Microsoft.VisualBasic 'vbc Example.vb /r:System.dll Namespace Example Class ExampleClass Shared Sub Main() Dim startInfo As New ProcessStartInfo("notepad.exe") startInfo.WindowStyle = ProcessWindowStyle.Maximized Process.Start(startInfo) End Sub End Class End Namespace

popopompom
質問者

補足

いつもお返事ありがとうございます。m(__)m 今回頂いたご回答も私の書いたとおりのことが できたのですが、申し訳ないのですが、 私の書き方が足りずに、当方の使用状況では うまく行きませんでした。 起動後に最大で表示したいアプリなのですが、 起動前にスプラッシュウィンドウが出るタイプの為、 起動命令に最大化を指示した場合はその スプラッシュウィンドウがその命令を受け取って しまうようで、起動後のアプリが最大化されませんでした。 (何かの情報を受け付けてはいるのか左上の座標は0,0に表示されるようです。 また、起動完了後に一度デスクトップを表示してからタスクバーをクリックしてアクティブにするとなぜか最大化しています。) 申し訳ございませんが、何か解決方法がありましたら、 ご教示いただけると助かります。

関連するQ&A

  • VB.NETからPerlを呼び出す

    メール自動送信機能をPerlで作成しました。 (仮にhello.plとします)hello.plを「C:\」においています。 コマンドプロンプトから次のようにperlコマンドを実行してた場合、 メールが自動送信されたことは確認できています。 perl hello.pl 同じようにVB.NETから実行したいのですが、上手くいきません。 ソース記述は以下の通りです。 Dim p As System.Diagnostics.Process = _ System.Diagnostics.Process.Start("C:\hello.pl") p.WaitForExit() どなたか分かる方がいらしたら、教えてください。

  • 起動したアプリケーションを最大化したいのですが。(VB.NET)

    先日からご回答を頂いて試行錯誤しているのですが、 どうしても実現できずに、再度質問させて頂きました。 http://oshiete1.goo.ne.jp/kotaeru.php3?q=2089161 の方法でMainWindowHandleを取得して、 そのウィンドウを最大化する動作なのですが、 スプラッシュウィンドウがあるせいか変化が見られません。 試しにHwndを取得する前にSTOPを入れて完全に起動する まで待ってから実行したりもしてみたのですが、 やはり変化がありませんでした。 別の方法として、その起動したアプリケーションのIDやタイトルバーに出ているウィンドウの名前を VBのサイトから引用させていただいた下記のコードで Dim localByName As Process() = Process.GetProcessesByName("notepad") Dim p As Process For Each p In localByName Console.WriteLine("{0} / {1} : {2}", p.Id, p.ProcessName, p.MainWindowTitle) Next 知ることが出来たのでそのIDやMainWindowTitleを手がかりに もう一度hWndを設定し直してShowWindow(hWnd, SW_MAXMIZE)を実行したいのですが、 hWndのところにはIDを入れてもだめなようなので、 IDの内容をhWndと同じ内容に変換する事が出来ればと考えています。 何度ももうしわけありませんが、どうかお助けください。m(__)m

  • VBで外部プログラムを位置のみ指定して実行したい

    Form1上のボタンを押すと、ある別のアプリケーションを実行し、そのウィンドウをForm1の横に大きさを保持したまま配置したいです。 現在は下記のコードを使っていますが、この場合 ・幅・高さが変わる ・一瞬別の位置にウィンドウが見える といった問題があります。 ・位置のみを指定する、もしくは外部のウィンドウのサイズを取得する方法 ・表示する前に位置を変える方法 あるいは ・位置のみを指定して実行する方法 について教えていただきたいです。 Dim p As Process = Process.Start(application) p.WaitForInputIdle() MoveWindow(p.MainWindowHandle, Me.Right, Me.Top, 100, 100, 1)

  • VS2008 VB.NETでのWindowsサービスアプリケーションに

    VS2008 VB.NETでのWindowsサービスアプリケーションについて VS2008 VB.NET でプログラムの勉強と思いWindowsサービス アプリケーションを作っています。 機能は、自分が起動したら指定された別のアプリケーションを 起動するという簡単なものです。 試しに別アプリケーションとしてメモ帳を指定してみました。 XPでは、メモ帳の画面が表示されたのですが、Vistaでは 「対話型サービスアプリケーションの検出」という画面が表示さ れメモ帳の画面が表示されませんでした。 起動の方法は以下のとおりです。 Dim psi As New System.Diagnostics.ProcessStartInfo() psi.FileName=<メモ帳のファイル名> psi.WindowStyle = System.Diagnostics.ProcessWindowStyle.Normal System.Diagnostics.Process.Start(psi) Vistaではこの方法ではいけないのでしょうか。 よろしくお願いいたします。

  • VB.NETからEXCELの起動が、うまくいかない

    3回目の同じ質問になってしまうのですがよろしくお願いいたします。 下記のようなソースでEXCELファイルを作成し、その後ファイルを開くという処理をしています。 Dim xlApp As New Excel.Application Dim xlBooks As Excel.Workbooks = xlApp.Workbooks Dim xlBook As Excel.Workbook = xlBooks.Add Dim xlSheets As Excel.Sheets = xlBook.Worksheets Dim xlSheet As Excel.Worksheet = xlSheets.Item(1) Dim xlRange As Excel.Range Dim xlCells As Excel.Range = xlSheet.Cells xlRange = xlCells(1, 10) xlRange.Value = "--" xlRange = xlCells(1, 5) xlCells.EntireColumn.AutoFit() xlBook.SaveAs(sPath & "\" & sFileName, Excel.XlFileFormat.xlWorkbookNormal) System.Runtime.InteropServices.Marshal.FinalReleaseComObject(xlCells) System.Runtime.InteropServices.Marshal.FinalReleaseComObject(xlRange) System.Runtime.InteropServices.Marshal.FinalReleaseComObject(xlSheet) System.Runtime.InteropServices.Marshal.FinalReleaseComObject(xlSheets) xlCells = Nothing xlRange = Nothing xlSheet = Nothing xlSheets = Nothing xlBook.Close() System.Runtime.InteropServices.Marshal.FinalReleaseComObject(xlBook) System.Runtime.InteropServices.Marshal.FinalReleaseComObject(xlBooks) xlBook = Nothing xlBooks = Nothing xlApp.Quit() System.Runtime.InteropServices.Marshal.FinalReleaseComObject(xlApp) xlApp = Nothing GC.Collect() System.Diagnostics.Process.Start(sPath & "\" & sFileName) ある特定のPCでのみEXCELのメニューバーとステータスバーのみしか表示されない状態です。 起動部分(Process.Start)をコメントアウトして確認したところ GC.COLLECTでEXCELが終了することなく、アプリの終了時にEXCELが終了する 状態にあります。 これはオブジェクトの開放がうまくいっていないのでしょうか? よろしくお願いいたします。

  • VB.NETでのDOSコマンドを実行について

    VB.NETでのDOSコマンドを実行について いつも大変お世話になっています。 VB.NET上でバイナリデータを DOSコマンド「copy」で結合させたいのですが うまくいきません。ご助言ください。 Dim results As String Dim psi As New System.Diagnostics.ProcessStartInfo() 'ComSpecのパスを取得する psi.FileName = System.Environment.GetEnvironmentVariable("ComSpec") '出力を読み取れるようにする psi.RedirectStandardInput = False psi.RedirectStandardOutput = True psi.UseShellExecute = False 'ウィンドウを表示しないようにする psi.CreateNoWindow = True 'コマンドラインを指定("/c"は実行後閉じるために必要) psi.Arguments = _ "/c copy /b /y "C:\Program Files\test\Data\out0001.bin"+"C:\Program Files\test\Data\out0002.bin" "C:\Program Files\test\Data\TEST.jpg"" '※コマンドの前後のダブルクォーテーションを省き、コマンドプロンプトで ' 直接実行した場合は成功しました。 '起動 Dim p As System.Diagnostics.Process=_ System.Diagnostics.Process.Start(psi) '出力を読み取る results = p.StandardOutput.ReadToEnd '出力された結果を表示 Console.WriteLine(results) 'WaitForExitはReadToEndの後である必要がある '(親プロセス、子プロセスでブロック防止のため) p.WaitForExit()

  • VisualBasic2005 外部アプリを最小化で起動する

    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が起動するのですが、 最小化で起動しません。 通常のウィンドウサイズで起動します。 どなたか、アドバイスをお願いします。

  • C#で別プロセスを起動

    C#で開発をしています。 デバックモードで別プロセスを起動したいのですが可能でしょうか? System.Diagnostics.Process.Startを使うと別のexeを起動することは できるようですが、デバックモードで呼び出すにはどうしたらいいのでしょうか? 教えてください。 よろしくお願いします。

  • VB.NETでDOSコマンドの複数実行

    VB.NETでバッチファイルを使わずにDOSコマンドの複数実行をしたいのですが、 試しに Dim results As String 'ComSpecのパスを取得する psi.FileName = System.Environment.GetEnvironmentVariable("ComSpec") '出力を読み取れるようにする psi.RedirectStandardInput = False psi.RedirectStandardOutput = True psi.UseShellExecute = False 'ウィンドウを表示しないようにする psi.CreateNoWindow = True 'コマンドラインを指定("/c"は実行後閉じるために必要) 'psi.Arguments = "/c " & asCmd & " /w" psi.Arguments = "/c " & "CD C:\" & " /w" '起動 p = System.Diagnostics.Process.Start(psi) '出力を読み取る results = p.StandardOutput.ReadToEnd '出力された結果を表示 Console.WriteLine(results) psi.Arguments = "/c " & "DIR" & " /w" '起動 p = System.Diagnostics.Process.Start(psi) '出力を読み取る results = p.StandardOutput.ReadToEnd '出力された結果を表示 Console.WriteLine(results) 'WaitForExitはReadToEndの後である必要がある '(親プロセス、子プロセスでブロック防止のため) p.WaitForExit() というプログラムを作成したのですが、DIRは実行されるのですが、 Cドライブに移動ができません。   何が悪いのでしょうか? 実現できる方法があればご教授ください。

  • プロセスの情報取得

    vb.netで開発しています。 あるexe(仮にwatch_p.exeとします)のプロセスの情報(CPU時間)を取得し、一定時間以上(30分以上)だった場合強制終了するプログラムを作成しようとしています。 以下のようにCPU時間の取得する方法までは見えていますが、取得した 時間を比較する方法が見えていません。 忙しいことと思いますが、回答をお願いします。 Dim ps As System.Diagnostics.Process() = _ System.Diagnostics.Process.GetProcesses() '配列から1つずつ取り出す Dim p As System.Diagnostics.Process For Each p In ps Try If p.ProcessName="watch_p" then '合計プロセッサ時間 Console.WriteLine(p.TotalProcessorTime) End if Catch End Try Next p

専門家に質問してみよう