• ベストアンサー

他のアプリを起動してウィンドウの変更のイベントを発生させたい

VB.NETで他のアプリケーションを起動して、 そのアプリのウインドウがサイズや位置を変更されたり、 表示スタイルが変更されたら、イベントを発生させたいのですが、 どのようにしたら出来るでしょうか。 Public WithEvents P As Process このように書いてみたのですが、 イベントにはDisposedとExitedしか出ませんでした。 よい方法をご存知でしたらご教示願えないでしょうか。 宜しくお願いします。

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

  • ベストアンサー
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

Processクラスを使ってとなると無理がありそうですよ アンマネージドなEXEなどなら .NETの範疇では無くなると思います たとえば メモ帳やペイントなど … やりたいことを実現しようとするとWindowsのHookを使うことになりそうです Hookにはいろいろな種類があります 今回の場合ならWH_CBTのフックでよさそうです WH_CBTのHCBT_SYSCOMMANDあたりでウィンドウの移動やサイズの変更を取れると思います CallBackによるプロシージャを使いますので SetWindowsHookExやCBTProc、WM_SYSCOMMANDなどについて調べてみましょう

関連するQ&A

  • VBAから変更した時だけイベントを発生させない方法

    Excel VBA で、コンボボックスの選択をユーザーが変更した時はイベントハンドラが呼び出されて処理をしていますが、VBAのコードからコンボボックスの選択を変更した時には、このイベントハンドラが呼び出されないようにしたいのですが、どのように記述すればよいでしょうか。 例えば、下記のコードの (A) の部分で、VBAのコードからコンボボックスの選択を変更していますが、ここでイベントが発生しないようにしたいのですが、Application.EnableEvents = False を記述してもイベントが発生していますがなぜでしょうか。どのように記述すれば (A) の部分でイベントが発生しなくなりますでしょうか。 よろしくお願いします。(Windows7 , Excel2010 ) ---Module1---------- Option Explicit Sub main()  UserForm1.Show End Sub ---UserForm1-------- Option Explicit Private Sub UserForm_Initialize()  Dim i As Integer  ComboBox1.Style = fmStyleDropDownList  For i = 1 To 30   ComboBox1.AddItem Format(i, "00")  Next i End Sub Private Sub CommandButton1_Click()  Dim num As Integer  Dim index As Integer  num = ComboBox1.ListCount  index = ComboBox1.ListIndex  If index = num - 1 Then   Application.EnableEvents = False   ComboBox1.ListIndex = -1 '<----------(A)   Application.EnableEvents = True  Else   ComboBox1.ListIndex = index + 1  End If End Sub Private Sub ComboBox1_Change()  MsgBox ("ComboBox1_Changeイベント発生") End Sub ------------------------------------

  • 各アプリのウィンドウの位置・サイズを変更したい

    各アプリケーションのウィンドウの位置・サイズを変更したいです。 ※家でゲームをする際、アニメやドラマを見ながら、  単純なレベル上げとかをやっているのですが、  その時に右下にドラクエでゲーム、右上にfirefoxでアニメ、左にゲームの情報サイト  のような配置に一発で行うbatファイルなどを作りたいです。 ちなみにプロセスはこんな感じです。 firefox.exe chrome.exe DQXGame.exe 宜しくお願い致します。 .

  • コントロールにイベントを発生させるには?

    VB.NET2005のWEBユーザーコントロールで下記のようにプロパティやメソッドをつくることはできたのですが、コンボボックスの選択がへんこうされたとか、テキストボックスの内容が変更されたとかのイベントをとることができません。いったいどうすればできるのでしょうか? Public Property TEST() As String Get Return "" End Get Set(ByVal value As String) _Test=value End Set End Property

  • コマンドライン引数について

    フォームの中にボタン(button1)があり、ボタンを押すと別のアプリケーションを起動するようなプログラムを作っています。 別アプリケーションを起動するのに次のようにShell関数を使ってコマンドライン引数"A"を渡していますが、     Shell("Test.exe A", AppWinStyle.NormalFocus) アプリケーションの終了を確認する必要があり、ProcessコンポーネントのExitedイベントを利用したいので、Shell関数を止めて以下のようなコードにしたいと思っています。 Private Sub Button1_Click(ByVal sender As System.Object, _             ByVal e As System.EventArgs) Handles Button1.Click     Process1.StartInfo.FileName = "Test.exe"     Process1.Start() End Sub Private Sub Process1_Exited(ByVal sender As System.Object, _             ByVal e As System.EventArgs) Handles Process1.Exited     '(ここにアプリケーション終了時の処理コードを記述) End Sub このとき、コマンドライン引数を渡すにはどのようにすればよいでしょうか? どなかたご教授いただけると助かります。どうぞよろしくお願い致します。

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

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

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

  • Java→VB2003アプリ→Batch でbatchファイルが起動できない

    どこで質問すべきか迷ったのですが。。。 質問タイトルどおりなのですが、 JavaアプリからRuntime#exec(); で起動して、Process#waitFor(); で終了待ちをしているアプリ(VB2003アプリ)から、 Shellでbatchファイルを起動しようとすると、起動できないという現象が起こっています。(exeは動きます) JAVAからではなく、単純にVB2003アプリだけを起動するとBatchファイルは正しく起動できます。 このbatchファイルの中から、さらにexeを起動しようとしているのがまずいのでしょうか? プロセスのネストの制限か何かにひっかかっているせいでしょうか? 調べてみたのですが、特に制限らしきものが見当たらなかったのですが、 ご存知でしたら、ご教示ください。

    • ベストアンサー
    • Java
  • VBのEVENT発生とCONTROLの有効範囲

    visual basicのeventとcontrolについての質問です。  初心者で苦労しています。以下のようなcodeingをしましたが上手く行きません。宜しくお願いします。 1.下記のcall updatefileによりupdatefile内でcombobox内のdataを設定します。これは次のdialogで   設定どおりに出ています。しかし元のsub startdialog1に帰ってdialogを表示してみるとcombobox   内は空となっています。  subroutineが変わるとformの controlは消えるのでしょうか。   もしそうならどの様にすれば良いのでしょうか。   (pushdata変数等をpublicとして再度comboに入れることもやりましたがNG) 2.STARTDIALOG1の初めに RADIO BUTTONの変更のCODEが有りますが、此処でEVENTが    発生しUPDATEFILEに行きます。    DIALOGを出すまでは初期値を設定しDIALOG上でCLICK等して変更をするCODEなので    不具合です。 (ほかにもいろいろ同じCODEが入っていますので)    CODE上の設定変更はEVENTが発生しないように、DIALOGからの変更はEVENT発生としたい    のですがどの様にしたら良いでしょうか。(普通そうなので何か勘違いしてるかも)   INTERNETで見るとAddHandler,AddressOf,REmoveHandlerなどが記載されていますが、    書き方と何処に書くのか判りません。(本当に必要かも?)    よろしくお願いします。    (以下のcodeは読みやすいように簡略化しています、code errorは大目に見て下さい。 ---------------------Form1.vbに記載---------------------------------------    Sub STARTDIALOG1()    '此処から処理が始まる with cform2 as Fform2 .Radio_btn1.Checked = True  ’ここへくるとbuttonのeventが発生,routineにいき,updatefileへいく Call UpdatePfile(1) 'ここはcomboboxの初期値を設定する(UPDATEPFILEを使う) .ShowDialog()     ’UpdatateFileでは入っていたがCOMOBOXの中は空になっている               この後comboboxのdataの選択などをdialogue上で設定値を変更する。 end with end sub -----------------------form1.vbに記載---------------------------------- sub UpdatePfile(ByVal cntlNO) 'PushDataはこの前にREADして設定している、keがそのDATAの個数 For k = 1 To ke cForm2.Combo_P.Items.Add(pushdata(k)) ’COMBOBOX Comb_Pに一覧として入れる Next k cForm2.ShowDialog()   'ここではCOMBOBOXにPUSHDATAが入ったLISTがでる end sub --------------------------------------------------------------------------- DisalogはForm2に作成    radioボタン Radio_btn1とRadio_btn2,combobox combo_P等をsetしている '---------------------------Form2.vbに記載------------------------------------ Private Sub push_button(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Radio_BTN1.CheckedChanged,Radio_BTN2.CheckChanged Dim cls As Form1 RDBTN = 1 If RDBTN > 0 Then Call cls.UpdatePfile(RDBTN) end Sub

  • VB.NETで他のアプリが完全に起動するまで待機する方法を教えて

    VB.NET+WinXP環境なのですが、VB.NETで他のアプリを開いて MainWindowTitleでウィンドウタイトルを取得して、 それを元にFindWindowExでハンドル(Hwnd)を取得したいのですが Process.Start(ApplicationA) でアプリが完全に起動し終わる前に次の処理へ移ってしまい、 MainWindowTitleを取得する時に中身が""になってしまったり、 本来なら例えば 「Yahoo! JAPAN - Microsoft Internet Explorer」となるべきところを 「 - Microsoft Internet Explorer」の状態で取得して 次に進んでしまったりします。 起動を実行した後に、Sleep(2000)などを入れると大丈夫なのですが、 必要なSleep時間はマシンや開くアプリによって違うので不都合があります。 APIのWaitForInputIdleもHwndが取得できてからでないと使用できないようです。 恐れ入りますが、良い方法がありましたら、 ご教示頂きたく、お願い致します。

  • ウィンドウスタイル

    ウィンドウスタイルを教えてください。 ウィンドウスタイルで、VBのフォーム作成画面みたいな Buttonのサイズ変更や、 位置の変更などが出来るものはないでしょうか?

専門家に質問してみよう