0

バックグラウンドで実行されているプログラムがあります。特定のWindowsイベントが発生したときに、このプログラムに通知する必要があります。

イベントの名前とIDを知っており、タスクスケジューラでイベントのアクションをスケジュールする方法を知っていますが、ここでは新しいプログラムしか開始できません。すでに実行中のアプリケーションで関数を呼び出したい。

編集:このように解決しました。

メインプログラムはTCP接続をリッスンしており、タスクスケジューラから、コマンドライン引数を使用してプログラムの別のインスタンスを起動します。プログラムがこの引数を受け取ると、接続を受け取ったときに何らかのアクションを実行するメインプログラムに接続します。

4

3 に答える 3

1

スケジューラーに新しいプロセス(同じアプリケーションexeの場合もあります)を開始させ、このプロセスに最初のプロセスが待機しているイベントを設定させます。特にスケジューラーに同じアプリケーションを起動させる場合(おそらく特別なコマンドラインを使用する場合)、私にはかなりきれいに思えます。

于 2009-03-14T19:59:51.563 に答える
0

「Windowsイベント」の意味がよくわかりません。非常に多くのイベントがあります。見出しでタスクスケジューラについて話しているのですが、質問に書いていることは、スケジューラの助けを借りて探している外部の変更があることを示しているようです。GUIフレームワークの目的であるため、キーボード、マウス、またはWindowsのイベントではないと想定します。

「接着剤」アプリケーションのアプローチが洗練されていないか、十分に迅速でない場合は、 WindowsManagementInstrumentationを掘り下げてみてください。スターターについてはMSDNのこの記事を確認してください。おそらく、VS内での作業方法についての記事です。それが失敗した場合は、リスナーを登録するためにCOM相互運用機能レベルに下がる必要があります。

「バックグラウンドアプリケーション」がどのように実装されているかについては、ウィンドウ/ GUIの有無にかかわらず通常のプロセスとして、またはWindowsサービスとして、あるいはより新しいものとして、述べていません。WMIリスナーはこれらすべてを処理すると思いますが、思考はテストの代わりにはなりません(逆もまた同様です)。

私は少しためらってこのアドバイスを提供します。WMIはDCOMに基づいています。これは、ネットワーク全体で、場合によっては1台のマシン(異なるユーザーアカウントで実行)内で作業を開始すると、後から苦痛になる可能性があります。すべての不思議なパラメータと構成の下のどこかに、よく考えられたセキュリティモデルがあると確信しています!

于 2009-03-15T10:24:28.240 に答える
0

私はマレーのコメントに二番目の(そして賛成票を投じた)。イベントの発生を既存のプロセスに「通知」して終了する新しいプロセスを開始するだけです。グローバルイベント(.netではなくWindowsの意味)を待っていることが起こったことを知る必要があるだけなら、十分に簡単に思えます。

于 2009-03-14T20:07:23.620 に答える