「Xamarin.Mac/キーボードの入力をシミュレートする」の版間の差分
| (2人の利用者による、間の6版が非表示) | |||
| 10行目: | 10行目: | ||
なお、ここで使われる[[キーコード]]は[[Mac]]独自のものであり、[[Windows]]で一般的な[[キーコード]]とはまったく別物である点に注意すること。[[キーコード]]の一覧などの詳細は「[[キーコード/Mac OS X]]」を参照。 | なお、ここで使われる[[キーコード]]は[[Mac]]独自のものであり、[[Windows]]で一般的な[[キーコード]]とはまったく別物である点に注意すること。[[キーコード]]の一覧などの詳細は「[[キーコード/Mac OS X]]」を参照。 | ||
また、仮想的にキーコードを送信する際は本物の[[キーボード]]の[[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; | |||
// 送信 | |||
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); // 「←矢印キー」を送信; | ||
</source> | </source> | ||
==関連項目== | ==関連項目== | ||
*[[Xamarin.Mac/ディスプレイのスリープを解除する]] | *[[Xamarin.Mac/ディスプレイのスリープを解除する]] | ||
*[[Xamarin.Mac/スクリーンセーバーを終了させる]] | |||
*[[Xamarin.Mac/ウインドウの一覧を取得する]] | |||
==参考文献== | ==参考文献== | ||
{{reflist}} | {{reflist}} | ||