「Xamarin.Mac/キーボードの入力をシミュレートする」の版間の差分

編集の要約なし
 
(2人の利用者による、間の4版が非表示)
10行目: 10行目:
なお、ここで使われる[[キーコード]]は[[Mac]]独自のものであり、[[Windows]]で一般的な[[キーコード]]とはまったく別物である点に注意すること。[[キーコード]]の一覧などの詳細は「[[キーコード/Mac OS X]]」を参照。
なお、ここで使われる[[キーコード]]は[[Mac]]独自のものであり、[[Windows]]で一般的な[[キーコード]]とはまったく別物である点に注意すること。[[キーコード]]の一覧などの詳細は「[[キーコード/Mac OS X]]」を参照。


また、本物の[[キーボード]]の[[Caps Lock]]の状態は無視されるので、大文字を送信する場合は「CGEventFlags.Shift」を立てる。
また、仮想的にキーコードを送信する際は本物の[[キーボード]]の[[Caps Lock]]の状態は無視されるので、大文字を送信する場合は「CGEventFlags.Shift」を立てる。


<source lang="csharp">
<source lang="csharp">
39行目: 39行目:
         static void PostKeyWithModifiers(ushort keycode, CGEventFlags modifiers = 0)
         static void PostKeyWithModifiers(ushort keycode, CGEventFlags modifiers = 0)
         {
         {
             var source = new CGEventSource(CGEventSourceStateID.CombinedSession);
             using (var source = new CGEventSource(CGEventSourceStateID.CombinedSession))
            using (var keydown = new CGEvent(source, keycode, keyDown: true))
            using (var keyup = new CGEvent(source, keycode, keyDown: false))
            {
                keydown.Flags = modifiers;


            var keydown = new CGEvent(source, keycode, keyDown: true);
                // 送信
            keydown.Flags = modifiers;
                CGEvent.Post(keydown, CGEventTapLocation.AnnotatedSession);
 
                CGEvent.Post(keyup  , CGEventTapLocation.AnnotatedSession);
            var keyup = new CGEvent(source, keycode, keyDown: false);
            }
 
            CGEvent.Post(keydown, CGEventTapLocation.AnnotatedSession);
            CGEvent.Post(keyup  , CGEventTapLocation.AnnotatedSession);
         }
         }
     }
     }
53行目: 54行目:
</source>
</source>


個人的に[[スクリーンセーバー]]を解除するのには送信しても他のアプリに影響の少ないであろう左矢印キーを用いた。
個人的に[[Xamarin.Mac/スクリーンセーバーを終了させる|スクリーンセーバーを解除する]]のには送信しても他のアプリに影響の少ないであろう左矢印キーを用いた。
<source lang="csharp">
<source lang="csharp">
             PostKeyWithModifiers(123); // 「←矢印キー」を送信;
             PostKeyWithModifiers(123); // 「←矢印キー」を送信;
60行目: 61行目:
==関連項目==
==関連項目==
*[[Xamarin.Mac/ディスプレイのスリープを解除する]]
*[[Xamarin.Mac/ディスプレイのスリープを解除する]]
 
*[[Xamarin.Mac/スクリーンセーバーを終了させる]]
*[[Xamarin.Mac/ウインドウの一覧を取得する]]
==参考文献==
==参考文献==
{{reflist}}
{{reflist}}