問題タブ [childwindow]
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.
winapi - win32 SDK 子ウィンドウ ペイント (C/C++)
win32 プラットフォーム SDK (XP Pro 上) を使用して、複数の子ウィンドウを持つ単一のメイン ウィンドウで構成されるアプリを作成しています。
CreateWindow に渡されるスタイルはWS_OVERLAPPEDWINDOW | WS_VISIBLE
、(メイン ウィンドウ用) とWS_CHILDWINDOW | WS_VISIBLE
子用です。
私が見ているエラーは、別のアプリケーションをアプリの上にドラッグすると、下にあるウィンドウが再描画されないことです。更新を強制する簡単な (しかし厄介な) 方法は、タイトルバーを「揺らす」ことです。
Windows メッセージが欠落しているか、win32 関数を正しく呼び出していないと推測しています。私のコードのほとんどは、Petzold の 95 の本から直接引用しています。
それが重要な場合、メイン ウィンドウは何も描画する必要はありません。子ウィンドウがすべての表示義務を処理します。
windows - アプリケーションのアクティブな ChildWindow を取得するには?
この問題があります。特定のアプリケーションの mainWindow へのハンドラーがあり、そのアプリケーションでキープレスをシミュレートしたい...
これを行うために sendMessage/postMessage API 呼び出しを使用しています。.Net SendKeys 関数または win32 API の keybd_event を使用しない理由は、それらがグローバル レベルでキープレスをシミュレートするためです。私の場合、アプリケーションを最小化しても、キープレスをシミュレートしたい場合があります。
sendMessage と postMessage の問題は、キーを押したい正確な子ウィンドウのハンドラーを渡す必要があることです。たとえば、メモ帳では、キーを mainWindow に送信しても何も起こらず、基本的に書き込み可能な白いキャンバスで構成される子ウィンドウにキーを送信する必要があります。
たとえば、msPaint では、ユーザーが新しいドキュメントを作成し、その図面でテキスト ボックスを開き、そこでキー押下をシミュレートしたい場合、メインウィンドウの子ウィンドウの子ウィンドウを取得して動作させる必要があります。
そこで、あらゆる状況でうまくいくと思われる方法を見つけました。基本的には、パラメータ GW_CHILD を指定して getWindow を使用し、Z 値が最も高い子ウィンドウを取得しました。次に、子ウィンドウに対してもう一度実行し、特定の childWindow に childWindows がなくなるまで実行を続けます。
そしてそれはうまくいったようで、私はとても幸せでした!
しかし...これが機能しないケースを見つけました。Firefox はその 1 つです。Firefox には mainWindow があり、次に mainWindow とほぼ同じ childWindow があり、さらに別の childWindow があります。これはウェブサイト領域、つまりアドレスバーとメニューの下の領域です。たとえば、私が www.google.com にいて、フォーカスされた検索ボックスでキープレスをシミュレートしたい場合、それは機能します。子ウィンドウの子ウィンドウを取得すると、正しい childWindow が得られます。ただし、たとえばユーザーがアドレス バーをクリックしても、getWindow の動作は何も変わりません。アドレスバーのキープレスをシミュレートする代わりに、アドレスバーの下にある子ウィンドウを最終的に取得し、何もしません。
問題は、特定のアプリケーションのアクティブな子ウィンドウを取得する方法が見つからないことです。GetWindow メソッドを使用して特定のウィンドウの子ウィンドウを取得し、子ウィンドウのない子ウィンドウが見つかるまでそれを実行することしかできません。ただし、Firefox のケースで見たように、アクティブなウィンドウは実際には、最終的に得られる子ウィンドウの親です。
getTopWindow などの他の API 呼び出しを試しましたが、うまくいきませんでした..
誰でもこの問題に光を当てることができますか? ありがとう!
c# - フォーカスされていないアプリケーションのアクティブな ChildWindow を取得するには?
実行中の特定のアプリケーションの子ウィンドウに Handler を取得する必要があります。メイン ウィンドウ ハンドラはありますが、SendMessage/PostMessage を使用するには、アクティブな特定の子ウィンドウを知る必要があります。
私は最終的に、Firefoxを使用して、次のコードを使用してこれを行うことができました:
これはとてもうまくいきます!ただし、アプリケーションがアクティブでない場合 (たとえば、メモ帳が Firefox をカバーしている場合)、GUIThreadInfo にはすべてのメンバーが null になります。Firefox が Windows の最上位 (アクティブ) アプリケーションである場合にのみ、構造が満たされます。
Firefox をフォアグラウンドにすることでこれを修正できることはわかっていますが、これを避ける必要がありました。Windows の一番上のウィンドウではないアプリケーションのアクティブな子ウィンドウを取得する他のアイデアはありますか?
ありがとう
c# - アプリケーションのアクティブな ChildWindow を取得するにはどうすればよいですか?
この問題があります: 特定のアプリケーションの mainWindow へのハンドラーがあり、そのアプリケーションでキープレスをシミュレートしたい...
これを行うために sendMessage/postMessage API 呼び出しを使用しています。.Net SendKeys 関数または win32 API の keybd_event を使用しない理由は、それらがグローバル レベルでキープレスをシミュレートするためです。私の場合、ターゲット アプリケーションはトップ アクティブなアプリケーションではありません (他のアプリケーションがより高い z レベルで実行されている可能性があるため、ターゲット アプリをカバーしています)。
sendMessage と postMessage の問題は、キーを押したい正確な子ウィンドウのハンドラーを渡す必要があることです。たとえば、メモ帳では、mainWindow のハンドラーにキーを送信しても何も起こらず、基本的に書き込み可能な白いキャンバスで構成される子ウィンドウのハンドラーにキーを送信する必要があります。
アクティブな子ウィンドウへのハンドラーを取得することが問題です。最初は、最もアクティブな子ウィンドウを返す GetTopWindow または GetWindow(GW_CHILD) API 呼び出しを使用していました。私がやっていたことは、childWindows がなくなるまで、GetWindow(GW_CHILD) を呼び出し続けることでした。これは、メモ帳やペイントなどの一部のアプリケーションでは問題なく機能します。ただし、場合によっては (たとえば、firefox など)、動作しないことがあります。その理由は、親ウィンドウには Firefox 領域全体があり、その子ウィンドウには開かれた Web ページ (Google など) があるためです。そのため、mainWindow の最もアクティブな子ウィンドウを要求すると、Web ページ領域に対応する唯一の子ウィンドウが返されます。アクティブなウィンドウがそのウィンドウである場合にのみ機能します (ユーザーが特定のページのテキストボックスに何かを書いている場合など)。
次のコードを使用して、GetGUIThreadInfo API呼び出しを使用して、実際にこれを行う方法を見つけました。
アドレスバーがアクティブな場合、「W」文字をアドレスバーに送信します。Google の検索テキスト ボックスがアクティブな場合、"W" の文字が送信されます... パーフェクト! ただし、このメソッドは単純な理由で使用できません。ターゲット アプリケーションがオペレーティング システムのアクティブ ウィンドウでない場合、ThreadInfo 構造体は空になります。たとえば、firefox をターゲットにしている場合、firefox がアクティブな場合 (最上位のアプリケーション、フォーカスされた/アクティブなアプリケーション) は機能しますが、たとえば、メモ帳が firefox の上にある場合は機能しません。アクティブなウィンドウ ハンドラを取得できません。
setForegroundWindow API 呼び出しを使用してターゲット アプリケーションをアクティブにし、アクティブな子ウィンドウのハンドラーをキャプチャすることでこれを解決できることはわかっていますが、ターゲット アプリをフォアグラウンドに移動する必要はありませんでした。
また、AttachThreadInput() や GetFocus() API 呼び出しなどの他の手法も試しましたが、これも機能しますが、同じ問題があります。ターゲット アプリケーションがアクティブな Windows アプリケーションでない場合、機能しません。
したがって、基本的には、アプリケーションが最上位のアクティブなアプリケーションでなくても、アプリケーションのアクティブな子ウィンドウにハンドラーを取得する方法を見つける必要があります。
何か案は?ありがとう
c# - アプリケーションのアクティブな ChildWindow を取得するにはどうすればよいですか?
Windows でアクティブなアプリケーションではない特定のアプリケーションに pressKey イベントを送信したいので、sendMessage/postMessage API 呼び出しを使用する必要があります。
ただし、アプリケーションでアクティブになっている正確な子ウィンドウを知り、それに pressKey メッセージを送信する必要があります...
GetTopWindow および GetWindow(GW_CHILD) API 呼び出しを使用して、メイン ウィンドウの一番上の子ウィンドウを取得し、取得した子ウィンドウで再度実行して一番上の grandchildWindow を取得し、子ウィンドウがなくなるまでそれを続けました。 . これは一部のアプリケーションではうまく機能しますが、場合によっては機能しません。親ウィンドウが子ウィンドウではなくアクティブなウィンドウである場合があるため、親の最上位の子ウィンドウを取得しても、メッセージが間違ったウィンドウに送信されてしまいます。
これを行う唯一の方法 (実際のアクティブなウィンドウのハンドラーを取得する) は、GuiThreadInfo API 呼び出しを使用することでしたが、ターゲット アプリケーションが Windows でアクティブなアプリケーションである場合にのみ機能します。冒頭で述べたように、ハンドラが null になるわけではありません。
setForegroundWindow api 呼び出しを使用してアプリケーションを最上位に移動できますが、これはしたくありません。また、AttachThreadInput および GetFocus api 呼び出しも試しましたが、ターゲット アプリケーションが Windows のアクティブなアプリケーションである場合にのみ機能します。
何か案は?ありがとう
c# - MDI 子が最大化されたときに MDI コンテナー フォームの既定の MDI メニューを削除する
MDI コンテナーであるメイン フォームを持つ .NET C# アプリケーションに取り組んでいます。ユーザーが MDI 子を最大化すると、Windows は、子のアイコンと右側のシステム ボタンを持つコンテナ Form のタイトル バーのすぐ下にコントロール ストリップを描画します。基本的に、このストリップを非表示にし、カスタム コントロールを使用して同じ機能を提供する必要があります。
Windows がこの MDI ストリップを描画しないようにする方法はありますか?
c++ - Vista で ALT+TAB を押すと、以前アクティブだった子ウィンドウの代わりにメイン ウィンドウがアクティブになります
私のアプリ (C++ で作成) は Win32 (MFC ではない) を使用して、CreateWindowEx でいくつかのウィンドウを作成します。メイン ウィンドウはデスクトップを親として取得し、子ウィンドウはメイン ウィンドウを親として取得します。
私の問題:
- アプリにはアクティブな子ウィンドウがあります
- 別のアプリに切り替えます (クリックごと、ALT+TAB などは関係ありません)
- ALT+TAB でアプリに戻ります
これで、子ウィンドウではなく、アプリのメイン ウィンドウがアクティブになりました。タスクバー エントリをクリックして元に戻すと、子ウィンドウはアクティブなままになります。
これは Aero でのみ発生します (Glass の有無にかかわらず)。従来のウィンドウ スキームをアクティブにすると、すべてが Windows XP と同じように動作します (ALT + TAB で元に戻すと、子ウィンドウがアクティブのままになります)。
提案、リンク、その他のリソースはありますか?
(UI 要素が文字列などの独自のデータ型を持つクラスにラップされているため、サンプル コードを提供するのは少し難しいです。)
従来のスキームを使用する Vista は、WM_ACTIVATE をメイン ウィンドウに送信し、別の WM_ACTIVATE を 2 番目のウィンドウ (メイン ウィンドウが所有) に送信するようです。Vista Aero を有効にすると、メイン ウィンドウのみが WM_ACTIVATE を取得します。奇数。
silverlight-3.0 - Silverlight 2 ChildWindow-ポップアップの方法を変更する方法は?
私はSilverlight3のChildWindowが好きですが、画面に表示される方法が好きではありません。それは速すぎるように見え、目を刺激することさえあります。たぶん誰かがこの方法を変えて、それを柔らかくそして多分遅くする方法を知っていますか?ありがとう
c# - その中にロードされたUserControlボタンからChildWindowを閉じる方法は?
これは私のChildWindowxamlコードです:
これは私のUserControl1xamlコードです:
これは私のUserControlC#です:
この方法を試してみても機能しません。何か案が?
Tks Josi