90830


Rustにて、キーボードの入力をエミュレートするためにEnigoを使用しています。  
<https://docs.rs/enigo/latest/enigo/>

## やりたいこと

文字を入力できる`enigo.key_click(Key)`に渡すKeyの値として、aなど単純な文字のキーなら`enigo::Key::Layout(char)`という形で出せます。しかし最終的に
**英数キーやかなキーもエミュレートしたい** と考えており、`enigo::Key::Raw(u16)`の方を使ってキーを指定していこうとしています。

## 問題

`enigo::Key::Raw(u16)`は[ドキュメント](https://docs.rs/enigo/latest/enigo/enum.Key.html)にて

> raw keycode eg 0x38

と書かれており、u16にはキーコードを渡せばよいということになります。しかし、どうもここの数値と入力される文字との対応関係が、例えば、"65(0x41)"なら"a"が入力されるような
**一般的なキーコードのそれと一致しない** ようなのです。  
（「一般的な」とは、『質問者が記憶している』および『「キーコード」で検索するとおおかた出てくる』の意味です）

## 試したこと1

まず、`enigo::Key::Raw(u16)`に一般的なキーコードでの「かな」「英数」に相当する値を渡して実行してみました。

[code]

    use enigo::{Enigo, Key, KeyboardControllable};
    
    fn main() {
        let mut enigo = Enigo::new();
    
        enigo.key_click(Key::Raw(240));//英数
        //enigo.key_click(Key::Raw(242));//かな
    }
    
[/code]

どちらの場合も入力ソースの変化はなく、何も起こりませんでした。

## 試したこと2

"65"を指定しました。一般的なキーコードだと"a"が入力されるはずです。

[code]

    use enigo::{Enigo, Key, KeyboardControllable};
    
    fn main() {
        let mut enigo = Enigo::new();
    
        enigo.key_click(Key::Raw(65));
    }
    
[/code]

実行後、コンソールに入力されたのは以下でした。

[code]

    .
    
[/code]

## 試したこと3

[code]

    use enigo::{Enigo, Key, KeyboardControllable};
    
    fn main() {
        let mut enigo = Enigo::new();
    
        enigo.key_click(Key::Raw(0));
        enigo.key_click(Key::Raw(1));
        enigo.key_click(Key::Raw(2));
        enigo.key_click(Key::Raw(3));
        enigo.key_click(Key::Raw(4));
        enigo.key_click(Key::Raw(5));
        enigo.key_click(Key::Raw(6));
        enigo.key_click(Key::Raw(7));
        enigo.key_click(Key::Raw(8));
    }
    
[/code]

ひとまず手あたり次第に0~8番の文字を入力するコードを書きました。  
これを実行して、コンソールに入力された文字は以下の通りです。

[code]

    asdfhgzxc
    
[/code]

つまり、対応関係としては以下のようになります。

  * 0: a
  * 1: s
  * 2: d
  * 3: f
  * 4: h
  * 5: g
  * 6: z
  * 7: x
  * 8: c  
...

  * 65: .

**このような対応関係の「キーコード」をご存知の方はいらっしゃるでしょうか？** あるいは、それが見られるサイトなどはありますでしょうか。  
少なくとも自分には「なんとなくキーボードの配列が関係している」以上の関係は見出せません。キー番号を一通りループさせたとしても、かな・英数がどのキーかは判別できないでしょう。


CC BY-SA 4.0
2022-08-29T13:22:26.847
90829
2022-08-29T16:16:32.503
2022-08-29T16:16:32.503
3060
52932
question
rust key-mapping key-binding
Rust の Enigo で使用するキーコードがわからない


質問の実行環境はmac OSのようですね。詳しくないですが、この場合はCocoaの情報を調べるのがよいと思います。  
参考: [Where are all the Cocoa
keycodes?](https://stackoverflow.com/questions/36900825/where-are-all-the-
cocoa-keycodes)

なお、Enigo
というライブラリのソースを見ると、これは環境毎のAPIやライブラリの薄いラッパーのようですので、WindowsやLinuxではまた違ったコードになるでしょう。(Linux環境用の
`Key::Raw` は未実装のようです)


CC BY-SA 4.0
2022-08-29T14:20:02.943
90830
2022-08-29T14:20:02.943
3054
90829
answer