コントロール送信

コントロール送信

私は主に Chrome を使用していますが、それが可能なブラウザであればどれでも使用するつもりです。

Windows 10 では、現在アクティブでないウィンドウであっても、マウスをウィンドウの上に置いてスクロール ホイールを使用することで、任意のウィンドウをスクロールできます。

非アクティブなウィンドウのブラウザタブを何らかの方法で切り替えることは可能ですか?

正直に言うと、左/右スクロール(少なくとも私のマウス(ロジクール製)のいわゆる機能)が以前は機能していたように記憶しているのですが、今はそうではないようです。

編集: 同じ質問をしようとしていたのですが、SU からすでに質問したと言われました。それで、もう一度...

答え1

これを行う方法の1つは、AHKスクリプトを使用してControlSend関数を使用すると、シミュレートされたキーストロークを目的のウィンドウに直接渡すことができます (これは、非アクティブ、最小化、または非表示のウィンドウに対して実行できます)。次に、便利なように、機能するシーケンスをホットキーに直接バインドできます。ページがダウンした場合に備えて、AHK ドキュメント ページ (上記リンク) からの直接コピーを以下に示します。

コントロール送信[Raw]

シミュレートされたキーストロークをウィンドウまたはコントロールに送信します。ControlSend
[、Control、Keys、WinTitle、WinText、ExcludeTitle、ExcludeText]
ControlSendRaw: 上記と同じパラメータ。

パラメーター

コントロール

ClassNN (コントロールのクラス名とインスタンス番号) またはコントロールのテキストのいずれかになります。どちらも Window Spy で判別できます。テキストを使用する場合、一致する動作は SetTitleMatchMode によって判別されます。このパラメータが空白または省略されている場合は、ターゲット ウィンドウの最上位のコントロールが使用されます。このパラメータが ahk_parent の場合、キーストロークはコントロールの 1 つではなく、ターゲット ウィンドウに直接送信されます (例については、Automating Winamp を参照してください)。
コントロールの HWND (ウィンドウ ハンドル) を操作するには、Control パラメータを空白のままにして、WinTitle パラメータに ahk_id %ControlHwnd% を指定します (これは、DetectHiddenWindows が Off の場合でも非表示のコントロールで機能します)。コントロールの HWND は通常、ControlGet Hwnd、MouseGetPos、または DllCall() で取得されます。

キー

送信するキーのシーケンス (詳細については Send コマンドを参照してください)。リテラルのコンマを送信するには、エスケープします (`,)。文字が送信される速度は SetKeyDelay によって決まります。Send コマンドとは異なり、マウス クリックは ControlSend では送信できません。そのためには ControlClick を使用します。

ウィンタイトル

ターゲット ウィンドウを識別するウィンドウ タイトルまたはその他の基準。WinTitle を参照してください。

ウィンテキスト

存在する場合、このパラメータは、ターゲット ウィンドウの単一のテキスト要素 (付属の Window Spy ユーティリティによって表示される) のサブ文字列である必要があります。DetectHiddenText が ON の場合、非表示のテキスト要素が検出されます。

除外タイトル

タイトルにこの値が含まれるウィンドウは考慮されません。

除外テキスト

テキストにこの値が含まれるウィンドウは考慮されません。

エラー処理

[v1.1.04+]: このコマンドは、失敗した場合に例外をスローできます。詳細については、「ランタイム エラー」を参照してください。

問題があった場合は ErrorLevel は 1 に設定され、それ以外の場合は 0 に設定されます。

備考

ControlSendRaw は、{Enter} を Enter に、^c を Control+C などに翻訳せずに、Keys パラメータのキーストロークを送信します。詳細については、Raw モードを参照してください。ControlSend で {Raw} または {Text} を使用することもできます。[v1.1.27+]: テキストを送信するには、テキスト モードの方が信頼性が高い場合があります。Control
パラメータを省略すると、このコマンドは、最上位のコントロール (多くの場合、正しいコントロール) に送信するか、コントロールがない場合はウィンドウ自体に送信することで、ターゲット ウィンドウに直接送信しようとします。これは、ウィンドウにコントロールがまったくない場合や、送信先のコントロールを気にしなくて済むという利便性が必要な場合に役立ちます。
デフォルトでは、修飾キーストローク (Control、Alt、Shift、および Win) は、Send コマンドによって通常どおり送信されます。これにより、コマンド プロンプトやその他のコンソール ウィンドウは、大文字、制御文字などを適切に検出できます。また、他の方法で信頼性が向上することもあります。
ただし、場合によっては、これらの修飾子イベントがアクティブ ウィンドウに干渉することがあります。特に、ユーザーが ControlSend 中にアクティブに入力している場合や、Alt キーが送信されている場合 (Alt はアクティブ ウィンドウのメニュー バーをアクティブにするため) に干渉する可能性があります。次の例のように、修飾子の上下イベントを明示的に送信することで、これを回避できます。

ControlSend, Edit1, {Alt down}f{Alt up}, Untitled - Notepad
上記の方法では、ワークステーションがロックされている (ログオン プロンプトで保護されている) ときにも、修飾キー ストローク (Control/Alt/Shift/Win) を送信できます。
コマンド プロンプトなどのコンソール ウィンドウに対して ControlSend を使用する場合は、BlockInput の使用は避けてください。これは、Control などの大文字化キーや修飾キーが正しく機能しなくなる可能性があるためです。SetKeyDelay
の値によって、キーが送信される速度が決まります。ターゲット ウィンドウがキー ストロークを確実に受信しない場合は、次の例のように、SetKeyDelay の 2 番目のパラメータを使用して、押下時間を長くしてみてください。 SetKeyDelay, 10, 10 SetKeyDelay, 0, 10 SetKeyDelay, -1, 0 ターゲット コントロールが Edit コントロール (または類似のもの) である場合、通常は次の方法の方が ControlSend よりも信頼性が高く、高速です。ControlSend Control, EditPaste, This text will be inserted at the caret position., ControlName, WinTitle
ControlSetText, ControlName, This text will entirely replace any current text., WinTitle
では、通常、ウィンドウのメニュー バーを操作できません。この問題を回避するには、WinMenuSelectItem を使用します。メニュー バーの性質上それが不可能な場合は、SendMessage チュートリアルに従って、目的のメニュー項目に対応するメッセージを見つけてみてください。
ウィンドウのタイトルとテキストは大文字と小文字が区別されます。DetectHiddenWindows がオンになっていない限り、非表示のウィンドウは検出されません。

関連している

SetKeyDelay、エスケープ シーケンス (例: `%)、Control、ControlGet、ControlGetText、ControlMove、ControlGetPos、ControlClick、ControlSetText、ControlFocus、Send、Winamp の自動化...

関連情報