問題タブ [focus-stealing]
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.
windows - Windowsでフォーカスが盗まれるのを防ぐにはどうすればよいですか?
Windowsでフォーカススティーリングのソリューションをグーグルですばやく検索すると、2つの主要な結果カテゴリが明らかになります。
- ForegroundLockTimeoutレジストリエントリ(または前述のレジストリエントリを変更するだけだと私が信じているTweakUI)を含む不完全な解決策を提案する人々は、あまり効果的ではありません。
- それについて不平を言うWindowsユーザーの絶え間ない大群。
これは、2つの一般的なシナリオで特に厄介です。
フルスクリーンアプリがフォーカスされているときに、何かがプログラムをトリガーしてバックグラウンドでダイアログウィンドウをポップアップし、フルスクリーンアプリを最小化します。
入力中にウィンドウがフォーカスを奪い、すべてのキーストロークを盗みます。スペースキーを押したり、Enterキーを押したり、キーボードショートカット([はい]の場合はYなど)をトリガーしたりすると、まったく望ましくない結果が生じる可能性があります。
これらのシナリオのいずれかまたは両方でこの問題を解決するために適用できるクリエイティブなソリューションは何ですか?
c# - 別のプログラムの特定のウィンドウがフォーカスを奪われないようにする方法 (C# ?)
多数のウィンドウを持つ特定のプログラムを使用していますが、それらのウィンドウのそれぞれが特定の時間 (ほとんどの場合、開いているとき) にフォーカスを奪う可能性があります。特定のウィンドウが開いたときにフォーカスを盗むのを防ぎたいです(また、他の場合もありますが、それはそれほど重要ではなく、主な問題の解決策が与えられれば、おそらく自分で理解できます)。私はC#でそれをやりたいと思っていますが、他のプログラミング言語もおそらく良いでしょう。
focus-stealing - システム全体の検索ボックスを実装するためにフォーカスを盗む
私のアプリケーション ( http://tabbles.net ) では、Google デスクトップに表示されるような「グローバル検索」ショートカット キーを提供する必要があります: いつでも CTRL+CTRL を押した場合 (どのアプリケーションがアクティブで、キーボード フォーカスがあるかに関係なく) )、検索テキストを入力してEnterキーを押すことができるダイアログボックスがポップアップする必要があります。
これには、アクティブなアプリケーションからフォーカスを盗む必要があります。
これまでのところ、グローバル キー フックをインストールし、それを使用してキーの組み合わせを検出し、ダイアログ ボックスを表示することができました。ダイアログを一番上にしたので、常にアクティブなアプリケーションの上に表示されます。ただし、ダイアログ内のテキストボックスにフォーカスを当てることができないため、ユーザーは最初にマウスでクリックしないとダイアログに何も入力できません。そのため、ユーザーは入力する前にマウスでクリックする必要があり、これは負担です。
とにかくWindowsのフォーカス盗用防止を回避する方法はありますか? ありがとうございました。
wpf - WindowsFormsHost は、アプリケーションの他の wpf フォームによってアクティブ化されていても、アプリケーションのアクティブ化にフォーカスを奪います
私のケースを再現するには(.net 4.0)
- WPF アプリケーション (MainWindow.xaml) を作成する
- テキスト ボックス (UserConrol1.cs - Winform) を含む Winform ユーザー コントロールを追加します。
- Windowsformshost を使用して UserControl1 を MainWindow.xaml に配置します。
- テキストボックス (wpf) を含む別の WPF ウィンドウをプロジェクト (Window1.xaml) に追加します。
- MainWindow InitializeComponent の後に Window1 を作成して表示する
プロジェクトの準備が整いました。
- Project を実行し、MainWindow.xaml (WindowsFormsHost にあるもの) にフォーカスされたテキスト ボックスを設定します。
- ウィンドウを開いてアプリケーションを非アクティブ化します (Windows ファイル エクスプローラー、メモ帳、winamp など)。
- マウスでテキストボックスをクリックして、Window1ウィンドウのテキストボックスに書き込んでみてください
また、Window1 のテキストボックスにフォーカスを設定できないことがわかります。これは、MainWindow Texbox (winformshost では、アプリケーションがアクティブになったときにフォーカスが奪われるためです)
何か案が?
MainWindow.xaml
MainWindow.xaml.cs
Window1.xaml
Window1.xaml.cs
c# - 開いているウィンドウ フォルダーをプログラムで最小化する方法
開いているフォルダーのリストを取得し、それを列挙して、各フォルダーをプログラムで最小化するにはどうすればよいですか?
アプリケーション内のあるフォームから別のフォームにジャンプするときに、開かれている一部のフォルダーがツールからフォーカスを盗むことがあります。これを防ぐことは、クライアントにとって最優先事項です。顧客は視覚障害者であるため、スクリーン リーダーを介してのみマシンにアクセスします。他のウィンドウ (フォルダー) を最小化することはまったく問題ではなく、実際には要件です。
私はこれを試しました:
さすがにダメでした。
更新:
ここの回答から、私はこれを試しました:
これにより、目に見えないエクスプローラーウィンドウが大量に作成され、どこからともなくタスクバーに突然リストされます。私は Windows API を扱うのが少し苦手なので、コード自体が実際に役に立ちます。
java - ウィンドウを更新するときにJavaグラフィカルプログラムがフォーカスを盗むのを防ぐ方法は?
(組み込み) Ubuntu 12.04 システムでは、ウィンドウにいくつかのグラフィックス パターンを表示し、約 1 秒ごとに更新する単純な Java プログラムがあります。これを使用して、システムで実行されているいくつかのプロセスを監視します。問題は、アクティブで最小化されていない間、ウィンドウが更新されるたびにフォーカスを盗むことです。これにより、開いているターミナル ウィンドウでの作業が不可能になります。
アプリ フォームのコマンド ラインまたは Eclipse IDE から実行する場合の動作は同じです。
NetBeans IDE で実行している場合、Windows 7 で同じ問題は発生しません。
Java アプリが Ubuntu マシンのフォーカスを盗むのを防ぐにはどうすればよいでしょうか?
更新 1:同じ問題に苦しんでいるように見えるこの質問を見つけました: How do I stop/workaround Java apps stealing focus in Linux window manager . それを読んで、問題はJFrameをコンテナとして使用することにあることがわかりました。これは私たちが使用しているものです。彼らの解決策は、JFrame コンテナーの代わりに JWindow コンテナーを使用することでした。ただし、違いを探すと、JWindow は「裸」であり、装飾がないため「本物の」ウィンドウのようには動作しません。JFrame内でJWindow を使用して、フォーカス盗用をなくす方法はありますか?
更新 2: PC 上の Ubuntu 仮想マシンでこのプログラムを実行しようとすると、同じ誤動作が発生します。これは、Windows 7 と Linux の Java ランタイムに違いがあり、問題が Embedded Linux に固有のものではないことを示唆しています。
更新 3: SSCCE は次のとおりです。
更新 4: SSCCE の準備中に、JFrame オブジェクトの多数のウィンドウ更新メソッドについて読んで調べました。問題はループsetVisible()
内の呼び出しでした。解決策は、それをメソッドwhile
に置き換えることでした。repaint()
c# - フォーカスを取得せずに非表示の Internet Explorer ウィンドウを開きますか?
フォーカスを奪うことなく、非表示の Internet Explorer ウィンドウを開きたいです。Internet Explorer を 5 分ごとに開いて Web サイトの更新をチェックする Timer オブジェクトがあります。問題は、更新をチェックするたびに、フォアグラウンドで現在のアプリケーションからフォーカスを盗むことです。以下は、プロセスを開始する方法です。
非表示の場合でも、常にフォーカスを盗みます。何事もなかったかのように開始して、ユーザーが作業を続けられるようにしたい。ありがとう。
java - サードパーティのJavaアプリが常にフォーカスを盗むのをブロックする方法は?
更新のたびにフォーカスが奪われるサードパーティの Java アプリを使用しています。私がやりたいのは、この単一のプログラムに対してこの単一のイベントを分離し、何らかの形で無視/ブロックすることです。これを行うために短い exe ファイルを作成したいと思っていますが、これを行うにはどの API 呼び出しまたはその他のツールを使用する必要がありますか。何かフックが必要ですか?私を助けてください、私のインターネット検索はまだ生まれていません。Windows 7を使用しています。