none
Deleted RRS feed

すべての返信

  • SendKeys.Send は「キー入力を模した処理」であり、「文字列を設定(入力、送信)する処理」ではありません。
    よって、文字コードは関係ありませんので、質問の前提が間違っています。

    対象に文字列を設定する処理は、SendKeys.Send では実現できません。
    (アルファベットのみなど、限られた条件では文字列設定と等価なことができる)


    なお、対象に文字列を設定する処理は、対象に依存するので Windows の中でも相手次第でコードが変わりますし、まして、他の OS だとガラッと変わるでしょうから、どこでも同じ方法はないと思います。
    2018年1月20日 13:04
    モデレータ
  • というか {CAPSLOCK} の文字コードは何だと考えていたのでしょうか。
    2018年1月20日 22:44
  • Deleted
    2018年1月20日 23:40
  • Deleted
    2018年1月20日 23:40
  • 「入力する文字列の文字コードに関係なく」と書かれていますが、キーボードからの入力は文字列ではないと先ほども書きました。
    その「文字列を入力する」という思い込みを捨てられませんか?
    その前提を続ける限り、意味のない疑問が続くだけです。

    キーボードからの入力はキーに対応するキーコードであり、その結果、どのような文字が入力されるかは使用している入力ロケールや IME に依存します。
    その文字が扱えるかどうかや、実際のプロセス内のメモリ上のバイナリ表現がどうなるかは、対象のアプリケーションによります。

    また、Windows のコモンコントロールはマルチバイト文字セットと、Unicode 文字セットが存在します。
    入力先にコモンコントロールを用いているのであればそのどちらかになることが多いでしょうね。
    極端な話をすれば、キーコードに対する処理を自力で実装し、ユーザービリティを無視すれば、入力したキーと異なる文字と扱うアプリケーションも作成できますが、ふつうはやりません。
    (キーに対応する文字の一貫性は保証されませんが、多くのアプリケーションではユーザーの期待を裏切らないように実装されているでしょうね)

    なお、SendKeys.Send であろうと、Keyboard.SendKeys であろうと同等の結果です。
    VB のためのリダイレクト(転送)メソッドと考えてよいでしょう。

    2018年1月21日 0:05
    モデレータ
  • sendkeys.sendではなくMy.Computer.Keyboard.SendKeysを使おうと思ってる。

    まず口語は不愉快です。

    またKeybord.SendKeysでも同じことです。Reference SourceでソースコードはダウンロードできますがKeyboard.SendKeysはこのような実装になっています。見ての通りSystem.Windows.Forms.SendKeys.Sendを呼び出すスタブでしかありません。

    Namespace Microsoft.VisualBasic.Devices
     
        '*****************************************************************************
        ';Keyboard
        '
        'Remarks: A class representing a computer keyboard. Enables discovery of key 
        '         state information for the most common scenarios and enables SendKeys
        '***************************************************************************** 
        <HostProtection(Resources:=HostProtectionResource.ExternalProcessMgmt)> _ 
        Public Class Keyboard
     
            '''*****************************************************************************
            ''' ;SendKeys
            ''' <summary>
            ''' Sends keys to the active window as if typed as keyboard with wait = false. 
            ''' </summary>
            ''' <param name="keys">A string containing the keys to be sent (typed).</param> 
            ''' <remarks></remarks> 
            Public Sub SendKeys(ByVal keys As String)
                SendKeys(keys, False) 
            End Sub
    
            '*****************************************************************************
            ';SendKeys 
            '
            'Summary: Sends keys to the active window as if typed at keyboard. This overloaded 
            '         version uses the same conventions as the VB6 SendKeys. 
            '  Param: Keys - A string containing the keys to be sent (typed).
            '  Param: Wait - Wait for messages to be processed before returning. 
            '*****************************************************************************
            Public Sub SendKeys(ByVal keys As String, ByVal wait As Boolean)
                If wait Then
                    System.Windows.Forms.SendKeys.SendWait(keys) 
                Else
                    System.Windows.Forms.SendKeys.Send(keys) 
                End If 
            End Sub
    

    2018年1月21日 0:40