問題タブ [window-handles]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - C# で子ウィンドウ ハンドルを取得する
C# でプロセスを開始し、SendMessage を使用してそのプロセスに Windows メッセージを送信しています。通常はメッセージを Process.MainWindowHandle に送信しますが、子ウィンドウ ハンドルを見つけて、代わりにそこにメッセージを送信する必要がある場合もあります。C#でそれを行うにはどうすればよいですか?また、子ウィンドウを見つけるためのオプションは何ですか(つまり、ウィンドウの名前を知る必要があるか、他のオプションがありますか?)
.net - 窓のハンドルに引っ掛かっている人を検出する
誰かが.NETでアプリケーション(またはその一部)のウィンドウハンドルにフックしようとしているかどうかを検出できますか?
.net - OutOfMemoryException、大きなプライベート データ
以前のシリーズでは:
OutOfMemoryException、スタック サイズが大きい、スレッド数が多い
多くのメモリを消費する .net Windows サービスがあります。GC ヒープは大きくありません。また、スタックサイズは大きくありません。大きいのはプライベートデータと呼ばれるものです。また、タスク マネージャーで、自分のアプリケーションがタスク マネージャーがハンドルを呼び出すものを大量に消費していることがわかります。私のアプリケーションは 2326 個のハンドルを消費します。これらのハンドルは、プライベート データを占有するいくつかのウィンドウ ハンドルであると思います。このプライベート データは、Thread Environment Blockとしてマークされたブロックによって占有されていることがわかります。それは何ですか?
VMMap によるアプリケーションのメモリ使用量のスクリーンショット
タスク マネージャーによるアプリケーションのメモリ使用量のスクリーンショット
アップデート
ProcessExplorer を実行します。現在、サービスの 2 つのインスタンスを実行しています。Gen2 GC の仮想メモリを大量に消費していることがわかります。この見た目は疑い深い。また、GC ヒープ サイズに予約されている合計は、2 つのプロセスで同じです。
c# - ウィンドウ クラス名からウィンドウ ハンドルを取得する
プロセス内の子ウィンドウでウィンドウ ハンドルを取得しようとしていますが、ウィンドウ クラス名しか情報がありません。そのために使用できるwin32関数はありますか? 私はC#からこれをやっています。
もう少し詳しく: これは C# で記述された Visual Studio プラグインです。だから私のプロセスは、たくさんのウィンドウがあるビジュアルスタジオです。そのうちの 1 つに、ウィンドウ クラス「VsTipWindow」があります。そのウィンドウの直接の親ウィンドウはわかりません。私が持っているのはクラス名だけです。それだけでウィンドウハンドルを取得する方法はありますか?
c# - プロセスのすべてのウィンドウ ハンドルを取得する
Microsoft Spy++ を使用して、プロセスに属する次のウィンドウを確認できます。
Spy++ と同じように、ツリー形式で表示される XYZ ウィンドウ ハンドルを処理します。
プロセスを取得でき、MainWindowHandle プロパティはウィンドウ F のハンドルを指しています。 Process オブジェクトの MainWindowHandle で指定されたハンドルの子ではないウィンドウを列挙するにはどうすればよいですか?
列挙するには、win32 呼び出しを使用しています。
c# - 無効なウィンドウハンドルの処理
アプリケーションは、Enum*ルーチンを使用してウィンドウハンドルを取得します。
アプリケーションが列挙/作成されたウィンドウのハンドル(クラス名の取得、ウィンドウ統計など)を管理している間、ハンドルが無効になることがあります。ウィンドウハンドルを管理するコードは、try / catchブロックを使用して保護されますが、ウィンドウハンドルは保存され、表示されたウィンドウを管理するために連続して使用されます。
ウィンドウハンドルの有効期間を処理する方法は?ハンドルの無効を検出することは可能ですか?
アプリケーションがウィンドウハンドルを使用するたびに、try/catchブロックを回避したいと思います。
windows - JScriptを使用してプロセスのメインウィンドウハンドルを取得するには?
プロセス名を指定してプロセスのメイン ウィンドウのハンドルを取得する JScript のメソッドはありますか? このProcess.MainWindowHandle
プロパティは、JScript .NET でのみ機能します。従来の JScript で同様のものを利用できますか?
windows - Windows プロセスのハンドルとそれらに関する追加情報をダンプします。
今日、私のアプリケーションは、イメージの割り当て中に Windows で「ハンドルがありません」というエラーをスローします。これをデバッグするには、アプリケーションが取得したすべてのハンドルのリストを取得したいと考えています。可能であれば、フォント、画像などのタイプでも、エラーレポートに情報を含めて、アプリケーションがどこでリークしているかを確認してください。
私は Java と SWT を使用していますが、この場合、ネイティブ関数またはサードパーティ アプリケーションを呼び出して情報を取得することに問題はありません。
c# - C#現在開いているファイルとプログラムの一覧
開いているすべてのアプリケーションのリストと開いているすべてのファイルのリストを取得する方法はありますか?ファイルについては、OSの開いているシステムファイルではなく、開いたファイル(ドキュメントなど)のみが必要です。アプリケーション(ブラウザ、ドキュメントプロセッサなどのみ)についても同じです。
EnumWindowsのようなWindowsAPIのさまざまな関数をすでに試しましたが、必要なものを取得できませんでした。
私の最終的な目標の例は、次のようなリストを作成することです。
アプリケーション
Microsoft Word、メモ帳、Mozilla Firefox
ファイル
foo.txt、foo.mp3、foo.doc
必要なのは名前だけで、ハンドルなどは必要ありません(必要なものを取得するには、ハンドルを使用する必要があると確信していますが)
c# - プログラムで2番目のメッセージループを終了するにはどうすればよいですか?
C#で非同期的に低レベルのメッセージを処理/フィルタリングするための2番目のメッセージループを作成しようとしています。これは、非表示のフォームを作成し、そのHandleプロパティを公開してフックし、別のスレッドで2番目のメッセージループを実行することで機能します。現時点では結果には非常に満足していますが、2番目のループを適切に終了することができません。唯一の回避策は、IsBackgroundプロパティをtrueに設定することでした。そのため、2番目のスレッドは、メインアプリケーションの終了時に(保留中のメッセージをすべて処理せずに)単純に終了します。
問題は、2番目のApplication.Run()が戻るように、そのメッセージループを適切に終了する方法です。別のApplicationContextを作成し、さまざまなイベント(Application.ApplicationExit、Application.ThreadExit、ApplicationContext.ThreadExit)を制御するさまざまなアプローチを試しましたが、デバッグできない競合状態ですべて失敗しました。
ヒントはありますか?ありがとう
これはコードです:
メインのFormコンストラクターで次のように使用します。
編集:私の答えの完全な解決策。