.net

【.net】手書き入力コントロールの使用方法まとめ

 
タブレットやタッチパネルが普及して、ちょいちょい手書き入力の要望が増えてきました。
今日は.Netで手書きコントロールを使用する方法のまとめです。


タッチキーボードを使用する(Windows 10以降)

Windows 10には、タッチキーボードという手書き入力のコントロールが標準で用意されています。
プログラムからはそれを呼び出すだけなので、比較的楽に実装できます。
こんなの↓
タッチキーボード画面

見た目も良いので、対象OSがWindows 10以降であればタッチキーボードが良いでしょう。

サンプルソース

それでは実際のソースを載せます。例の如く自己責任で!
タッチキーボードのEXE(TabTip.exe)のパスは環境によって異ります。
Form1.cs

using System;
using System.Diagnostics;
using System.Runtime.InteropServices;
using System.Windows.Forms;

namespace HandwritingExample
{
    public partial class Form1 : Form
    {
        private const string TABTIP = @"C:\Program Files\Common Files\microsoft shared\ink\TabTip.exe";
        private const int WM_SYSCOMMAND = 0x0112;
        private const int SC_CLOSE = 0xF060;
        
        [DllImport("user32.dll", CharSet = CharSet.Auto)]
        private static extern int SendMessage(int hWnd, int wMsg, int wParam, int lParam);

        [DllImport("user32.dll")]
        private static extern int FindWindow(string lpClassName, string lpWindowName);


        public Form1()
        {
            InitializeComponent();
        }

        private void textBox1_Enter(object sender, EventArgs e)
        {
            Process.Start(TABTIP);
        }

        private void textBox1_Leave(object sender, EventArgs e)
        {
            int handle = FindWindow("IPTIP_Main_Window", "");
            if (handle > 0)
            {
                SendMessage(handle, WM_SYSCOMMAND, SC_CLOSE, 0);
            }
        }
    }
}

簡単に補足すると、
TextBoxのEnterでタッチキーボードを表示、Leaveで非表示にしています。

表示する際は、Process.Startで立ち上げれば、複数立ち上がることなく良しなにやってくれます。
非表示にする際は、ProcessのKillやCloseではだめで、TabTip.exeのメインウィンドウに対してSendMessageする必要があります。
画面はこんな感じ↓

タッチキーボード入力

タッチキーボード認識

注意点と対処法

「Windows 10 Anniversary Update」後にタッチキーボードのEXE(TabTip.exe)が起動しない不具合が起きているようです。EXEを直接実行して何も表示されないようであれば要対策です。
実際にぼくの環境でもプロセスは立ち上がるが、タッチキーボードが表示されませんでした。
以下、対処法。

①レジストリディターで下記の階層を開きます。
HKEY_CURRENT_USER\Software\Microsoft\TabletTip\1.7
レジストリ - ノード

 
②右ペインで右クリック

新規

DWORD(32bit)値
を選択します。
新規 - DWORD(32bit)値

 
③追加した項目の名前を、
「EnableDesktopModeAutoInvoke」に変更して、値を「1」に設定します。
名前と値の変更

 
④レジストリエディターを閉じ、直接EXEをダブルクリックして、下記のWindowが表示されれば成功です。
タッチキーボード画面


InkEditを使用する

Visual Studio上でInkEditは標準の状態では使用できません。
しかしDLL自体はProgram Filesに格納されているので、それを使える状態にします。

使用準備

①Visual Studioのツールボックスで右クリック

アイテムの選択
アイテム選択

 
②「.Net Framework コンポーネント」タブが表示されます。
リストにはないので、「参照」ボタンをクリック。
参照クリック

 
③「Microsoft.Ink.dll」を選択します。
ぼくの環境では↓の階層にありました。

C:\Program Files (x86)\Common Files\microsoft shared\Ink

Microsoft.Ink.dll選択

 
④追加すると、↓の2つのコントロールが選択状態になるので、そのままOKを選択

  • InkEdit
  • InkPicture

関連するコントロールが選択される

これで使える状態になります。

InkEditの配置

ツールボックス上で「InkEdit」が追加されているので、選択してForm上に配置します。

InkEdit選択

InkEdit選択2

デフォルトではマウスによる入力を受け付けていないので、
追加したInkEditコントロールのプロパティ「UseMouseForInput」の値を「True」に変更します。

InkEditプロパティ

実行

実際に入力してみます。

InkEdit入力

InkEdit認識

汚い字でも認識してくれました。

InkEditも準備さえすれば、簡単に使えますね。
ただInkEditはTextBoxルックなコントロールなので、タブレット等で表示するには装飾が必要かもしれません。

 
以上、.Netで使用する手書き入力まとめでした。


 

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です