外部アプリケーションを呼び出す処理の方法

このQ&Aのポイント
  • アプリケーションAから外部アプリケーションBを呼び出す処理について、Aのタイマーを止めずにBのフォームを最前面に表示させる方法を教えてください。
  • C#を使用してアプリケーションAから外部アプリケーションBを起動する際、Bのフォームを常に最前面に表示させる方法と、同時にAのタイマーを止めない方法を教えてください。
  • アプリケーションAから外部アプリケーションBを呼び出す際、Bのフォームを最前面に表示し、同時にAのタイマーを停止しない方法について教えてください。
回答を見る
  • ベストアンサー

アプリケーションAから外部アプリケーションBを

アプリケーションAから外部アプリケーションBを 呼び出す処理。 Bのフォームを常に最前面にして、Aのフォームを操作できないようにしたいです。 ただしAにあるタイマーを止めないようにもしたいです。 そこで [C#] //ファイルを開いて終了まで待機する System.Diagnostics.Process p = System.Diagnostics.Process.Start("C:\\test.exe"); p.WaitForExit(); ※「test.exe」を外部アプリケーションBとする。 を使ったのですが、Aのタイマーが止まってしまいます。 何か良い方法はないでしょうか? 言語はC#です。

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

  • ベストアンサー
  • YUI_AI
  • ベストアンサー率45% (303/661)
回答No.1

Bのフォームが閉じるまでは、Aのフォームを操作してもイベントが実行されない様にする。 フォーム上のコントロールのEnableをfalsに設定する等。 もしくは、Aフォームのタイマ部分の処理をスレッドにして、マルチスレッド化すればすれば良いかと。

judgementskill
質問者

お礼

マルチスレッドでうまくいきますかねぇ、、、 まだやってないので、明日試してみます。

judgementskill
質問者

補足

うまくいきました。 ありがとです。

関連するQ&A

  • C#でMediaPlayerを立ち上げた後

    お世話になります。 C#(.Net 4.0)で、MediaPlayerをコントロールでフォーム等に 張り付けるのではなく、System.Diagnostics内の Process.Start("wmplayer.exe","再生ファイル")で 外部プログラムとしてmp3や動画を開いたときに、 再生が終了(最後まで再生し終わったら)したら、 自動でMediaPlayerを終了させたいのですが、 その方法はありますでしょうか。 現在のコードはこうなっています(usingは省略)。 private void button1_Click(object sender, EventArgs e) { Process p = Process.Start("wmplayer.exe", @"C:\Users\hoge\Documents\abcde.mp4"); p.WaitForExit(); } 特に何の変哲もない、外部プログラムの起動ですが、 自動で閉じてもらわないと、下のWaitForExitに処理が回りません。 対策をお願いいたします。

  • PDFの印刷で。。。

    C#よりAcrobatReaderにPDFをエクスポートして印刷を行う処理 を作成中です。 そこで質問ですが,エクスポートされたPDFを印刷する際に、 PDFを開かずに印刷することは可能でしょうか? 現在、ネットよりいろいろ調べて組み込んだロジックでは印刷をする ことはできましたが、どうしてもPDFが開かれてしまいます。 ソースを以下に載せましたのでご教授願います。 System.Diagnostics.ProcessStartInfo psi = new System.Diagnostics.ProcessStartInfo(); //パスを取得する psi.FileName = @"C:\Program Files\Adobe\Acrobat 7.0\Reader\AcroRd32.exe"; //出力を読み取れるようにする psi.RedirectStandardInput = false; psi.RedirectStandardOutput = true; psi.UseShellExecute = false; //ウィンドウを表示しないようにする psi.CreateNoWindow = true; //コマンドラインを指定 psi.Arguments = @"/t " + Application.StartupPath + "\\PDFExpt.PDF"; System.Diagnostics.Process p = System.Diagnostics.Process.Start(psi); //出力を読み取る string results = p.StandardOutput.ReadToEnd(); p.WaitForExit(); p.Close(); p.Dispose(); 申し訳ありませんがよろしくお願い致します。

  • 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()

  • 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() どなたか分かる方がいらしたら、教えてください。

  • 指定したアプリケーションをモニターの画面の最前面に出したい。

    お世話になります。 C++6.0 MFCで開発しております。 今、 (1)A.exeのボタンを押すとB.exeを起動 (2)B.exeが終了するとA.exeに終了通知をして、A.exeに処理を戻す。 処理をしているのですが、 (2)のA.exeに処理を戻した後、A.exeが最前面に表示されないのです。 A.exe以外にも、Wordやその他のアプリケーションを開いていた場合、 (2)の時点で、モニター上には、A.exeが最前面に表示したいのですが、 Wordやその他のアプリケーションが最前面に表示されます。 お手数ですが、どのようにすれば、他のアプリと同時起動している際に、 A.exeをモニターの最前面に表示できるか教えていただきたく思います。 以上よろしくお願いします。

  • 外部アプリケーションの呼び出し方

    現在VC++で環境ウィンドウズ2000でプログラミングを行っています。 メニュー画面上のボタンをクリックすると外部のアプリケーションを呼び出し作業したいと思っています。関数CreateProcessを使うとできるということまではわかったのですが、どうもうまくいきません。 下記のプログラムはメモ帳を呼び出すものでこれはうまくできました。 STARTUPINFO sin; PROCESS_INFORMATION pin; ZeroMemory( &sin, sizeof( STARTUPINFO ) ); ZeroMemory( &pin, sizeof( PROCESS_INFORMATION ) ); sin.cb = sizeof( STARTUPINFO ); sin.dwFlags = STARTF_USESHOWWINDOW; sin.wShowWindow = SW_SHOWNORMAL; if ( !CreateProcess( NULL, _T("notepad.exe C:\\foo.txt), NULL, NULL, FALSE, 0, NULL, NULL, &sin, &pin ) ) { // 起動失敗 } } 実際はデスクトップに置いてあるアプリケーションを呼び出したいと思っています。自分ではアプリケーション名の書き方等が間違っているのではないかと思っていろいろ試したのですが、どうもうまくいきません。 初心者で説明も不十分な点もあると思いますがどうかよろしくお願い致します。

  • 外部アプリケーションをタスクバーから元のサイズに

    VB2005の初心者です。 色々調べたつもりなのですが解らなくて・・・。 外部アプリケーションをshell関数やProcess.Start("○○.EXE")などで起動は出来るのですが、起動後、一旦VB2005アプリケーションで作業を行う為、最小化しています。VB2005アプリケーションのある作業を終了したとき自動的に最小化した外部アプリケーションを元のサイズに戻しアクティブにしたいのですがよく解りません、制御する方法を教えて頂けないでしょうか。

  • アプリケーション開始パス

    VB.NETを勉強中なのですが、 アプリケーション開始パスを調べるときに例えば、 System.Diagnostics.Process.Start(Application.StartupPath & "\abc.txt") と記述すると実行ファイルと同階層にあるabc.txtが開きます。 また、 System.Diagnostics.Process.Start("abc.txt") と記述しても同様に動作しました。 今まで1番目のようにApplication.StartupPathを入れて記述してきたのですが、2番目のような記述でも実行ファイルと同階層のファイルを表し、結局はどちらも同じということなのでしょうか?

  • 指定したアプリケーションを処理が通るときだけモニターの画面の最前面に出したい

    お世話になります。 C++6.0 MFCで開発しております。 今、 (1)A.exeのボタンを押すとB.exeを起動(A.exeの上にB.exeが表示) (2)B.exeが終了するとA.exeに終了通知をして、A.exeに処理を戻す。  (A.exeを最前面に表示する) (3)再度A.exeのボタンを押す。  →(1)のときは、A.exeの上にB.exeが表示されていたのに、A.exeの下にB.exeが表示される (2)のA.exeに処理を戻した後、A.exeが最前面に出るように SetWindowPos(hWnd,HWND_TOPMOST,0,0,0,0,SWP_NOSIZE|SWP_NOMOVE) を実行しています。 (1)、(3)のA.exeのボタンを押すと、A.exeの上にB.exeが表示され、 (2)の時に、A.exeが他のアプリケーションを含めて、最前面、モニターの最前面に表示されるようにしたいのです。 お手数ですがなにとぞよろしくお願いします。 以上よろしくお願いします。

  • C#でcabファイルをつくる2

    質問者は追記ができないようなので、新しく質問させていただきます。 あるHPを参考に、makecab.exeにパラメータを渡して 動かす方法を行ったのですが、 エラーが出てしまい行き詰っています。 どこがおかしいのでしょうか? ●エラー内容(下記コードのretの値) ------------------------------------------------------------ Microsoft (R) Cabinet Maker - Version 5.1.2600.5512 Copyright (c) Microsoft Corporation. All rights reserved.. 0.00% - list.txt (1 of 1) 100.00% - list.txt (1 of 1) 0.00% [flushing current folder] 80.56% [flushing current folder] ERROR: (FCIFlushCabinet)Failure creating or writing cabinet file: permission denied ------------------------------------------------------------ ●コード  list.txt というファイルを a.cab に圧縮する ------------------------------------------------------------ string cmd = @"c:\WINDOWS\system32\makecab.exe"; string trCmd = @"C:\cabTest\work\list.txt a.cab"; System.Diagnostics.ProcessStartInfo psi = new System.Diagnostics.ProcessStartInfo(); psi.FileName = cmd; psi.RedirectStandardInput = false; psi.RedirectStandardOutput = true; psi.UseShellExecute = false; psi.CreateNoWindow = true; psi.Arguments = trCmd; System.Diagnostics.Process p = System.Diagnostics.Process.Start(psi); string ret = p.StandardOutput.ReadToEnd(); p.WaitForExit(); ------------------------------------------------------------ 以下、最初の質問 ------------------------------------------------------------- あるファイルをcabファイルに圧縮(まとめる?)する方法を考えています。 (例えば、a.txt,b.txtをまとめてab.cabにする) Zipの圧縮であれば、 ZipOutputStreamを使ってているサンプル等があるのですが、 それに相当するものがあるのでしょうか? それとも「makecab」コマンドを投げる方法がよいでしょうか? -------------------------------------------------------------

専門家に質問してみよう