絵を書くときに手のひらが反応してしまいます(2)タッチスクリーンON/OFFボタン作成

こんにちは。カオルです。

前回の記事で、デバイスマネージャーでタッチスクリーンを無効にできることがわかりました

今回は、絵を描きながら簡単にタッチスクリーンのON、OFFができるように、バッチファイルをつくることにしました

バッチファイルとは、テキストファイルにプログラムを書いて拡張子を「.bat」にすると、ダブルクリックでプログラムを動かせるようになるファイルです

いろいろ調べてみた結果、デバイスマネージャーをプログラムで動かすには、Windows Driver Kit(WDK)をダウンロードして、その中の「デバイスコントローラ―」(devcon.exe)をプログラムに組み込めばできるみたい

デバイスコントローラをダウンロードする

さて、devcon.exeを手に入れるためには、まず「Windows Visual Studio」をダウンロードする必要があります

これはプログラムを作成する開発用エディターのようです

Visual Studio Community 2017 (無料版)をタブレットにダウンロード、インストールします

https://visualstudio.microsoft.com/ja/downloads/

次に、Windows Driver Kitをダウンロード、インストールします(私のタブレットはWin10、64bitなのでWDK for windows10 version1803をダウンロードしました)

https://docs.microsoft.com/ja-jp/windows-hardware/drivers/download-the-wdk

インストールが終わると、Cドライブの

C:\Program Files (x86)\Windows Kits\10\Tools

の中に32ビット,64ビット用のdevcon.exeが入っていることが分かります

タッチスクリーンのハードウェアIDを確認する

次に、デバイスマネージャーから、タッチスクリーンのハードウェアIDを確認します

デバイスマネージャー→「HID準拠タッチスクリーン」を右クリック→「プロパティ」→「詳細」タブ→プロパティ「ハードウェアID」を選択→一番上の値をコピー(メモ)します

プログラムを書く

さてここまできてようやくプログラムを書きます

アクセサリからメモ帳を開き、以下のように記入します

rem デバイスコントロールのファイル場所を設定する
@set DEVCON=”C:\Program Files (x86)\Windows Kits\10\Tools\x64\devcon.exe”
rem デバイスのハードウェアIDを指定して無効にする
%DEVCON% disable “HID\VEN_FTSC&DEV_1000&Col01”

rem のあとに書いてある文字は覚書の役目を果たしますので、何を書いてもプログラムの動作には影響しません

@set DEVCON=”C:~ は、「DEVCON」という名前(別の名前でもいい)に、devcon.exeの場所の情報を入れてあげるプログラムの指示です。(プログラム用語でいう「変数」です)ここに自分のPC内のdevcon.exeの場所を記入します

%DEVCON% disable “HID\VEN_FTSC&DEV_1000&Col01″ は、先ほど場所の情報をいれた「DEVCON」の場所にあるファイルを起動し、disable (無効)にしなさい、無効にするハードウェアIDは”HID\VEN_FTSC&DEV_1000&Col01″(タッチスクリーンのハードウェアID)ですよ、という指示です

メモ帳を保存し、拡張子を.txtから、.batに変更します

ファイル名はなんでもいいですが、必ず半角英数字にしましょう(全角ファイル名はプログラムが動かなくなります)

ここでは、disable.batという名前にします

するとメモ帳のアイコンが歯車みたいなマークにかわります

これでバッチファイルのできあがり。

アイコンをダブルクリックすると…

ピコーンと、管理者権限で実行するかどうか聞いてきますので、「はい」を選択します

すると、プログラムが間違っていなければ、デバイスマネージャーのタッチスクリーンがOFFになっているはずです

OFFになっていない場合は、プログラムに間違いがないか、もう一度確認しましょう(半角スペースが全角になったりしていてもプログラムは正常に動きません)

タッチスクリーンOFFのバッチファイルができたら、同様にタッチスクリーンをONにするバッチファイルも作りましょう

先ほど作ったdisable.batファイルをコピーして、ファイル名を「enable.bat」に変更します(名前は何でもいいですが)

右クリックで「編集」を選択すると、プログラムの編集ができます。

rem デバイスコントロールのファイル場所を設定する
@set DEVCON=”C:\Program Files (x86)\Windows Kits\10\Tools\x64\devcon.exe”
rem デバイスのハードウェアIDを指定して有効にする
%DEVCON% enable “HID\VEN_FTSC&DEV_1000&Col01”

先ほどのdisable(無効にしなさい)の指示を、enable(有効にしなさい)に変更するだけです

これで同様にダブルクリックすると、タッチスクリーンがONになったことを確認しましょう

ファイル名はここでは「enable.bat」とします

これでタッチスクリーンのON、OFFがバッチファイルでできるようになりました。

なったんですけどね…

問題はこれですよ…

ピコーン

バッチを動かすためには管理者権限を都度聞かれるんです…

これでは絵をかきながらの切替はちょっと面倒です…

タスクスケジューラに登録する

そこで、タスクスケジューラの登場です

タスクスケジューラとは、例えば、毎日12:00にウイルスチェックのプログラムを動かしたい時に、「毎日12:00になったらウイルスチェックのプログラムを動かす」とタスクスケジューラに登録しておくと、自動でプログラムが動いてくれるようになる、いわばプログラムのスケジュール帳です

設定から「タスクのスケジュール」と入力すると候補に出てきます

タスクスケジューラが開きます

すでにたくさんのタスクがスケジューラに登録されているのが分かります

と、ここで少し前準備をします

先ほど作ったdisable.batとenable.batファイルを、任意のフォルダ内に保存しておきます

ここではデスクトップに「mydata_tablet」というフォルダを作り、その中の「002_タッチスクリーン無効化、有効化バッチファイル」というフォルダを作ってその中に保存します

タスクスケジューラに新たにタスクを登録します

右側の「タスクの作成」を選択します

タスクの名前、簡単な説明(覚書)、「最上位の特権で実行する」にチェックを入れます(ここがポイント!)

今回は名前を「disabletouchscreen」とします

ここでも必ず名前は半角英数字にします(後でプログラムに使います)

次に「操作」タブを選択

→「新規」を選択

操作は「プログラムの開始」を選択、「参照」から、先ほど保存したバッチファイル「disable.bat」を指定して「OK」を押します

これで、”タスク名「disabletouchscreen」“は、”プログラム開始時”に“指定のフォルダに保存した「disable.bat」ファイルを実行する” 操作をする1つのタスクとしてタスクスケジューラに登録されました

次に「条件」タブを選択して、「コンピューターをAC電源で使用している場合のみタスクを開始する」チェックを外しておきます

タブレットなので、充電時以外はAC電源を外して使いますから…

これでタスクの作成が完了しました

もう一つ、同じやり方で「enabletouchscreen」のタスクを作成して、「enable.bat」のファイルを指定したタスクも作っておきましょう(タッチスクリーンを有効に戻すタスクです)

これでタスクスケジューラにタッチスクリーン無効、有効の2つのタスクが登録されました

右下の「実行」「終了」でタッチスクリーンの無効、有効が動作することを確認します

これで、バッチファイルを操作するときの「ピコーン」がなくなるわけです

タスクスケジューラで「管理者権限で実行」にしたからです

ところで、このタスク、「トリガー」を指定していません

通常はいつ、どういうときにこのタスクを動かすのかを指定しないと、このタスクは永遠に動作しません

どうするのでしょうか…

そう、このタスクを実行するバッチファイルを作るんです

タスクスケジューラを動かすバッチファイルを作る

ふたたびメモ帳を開き、以下のプログラムを記入します

schtasks /run /tn disabletouchscreen

意味は

schtasks/run→タスクスケジューラを実行しなさい

/tn disabletouchscreen→タスク名はdisabletouchscreenです

これだけです

これをまた拡張子を.batに変えて保存します

今度のファイル名は「taskscheduler_disable.bat」にでもしておきましょう

場所は先ほどのバッチファイルを保存しているフォルダでいいでしょう

また、同様に

schtasks /run /tn enabletouchscreen

タッチスクリーンを有効に戻すバッチファイルも作っておいてくださいね

ファイル名は「taskscheduler_enable.bat」ですね

(別にこれは何でもいいんですが)

このバッチファイルを動かすと、管理者権限を問われずにタッチスクリーンの有効、無効ができるようになりました。

あとは、このバッチファイルを動かせるボタンを、絵を描きながら手元に押せる位置にもってくるだけです

あともう一歩!

タスクバーにON、OFFボタンを作る

さて、あるフォルダー内のアイコンを、タスクバーに表示させる機能があります(タスクバーとは、windowsの下にあるウィンドウズボタンや、その他開いているファイルを表示してあるバーのことです)

その前に、一つ準備をします

先ほどバッチファイルを保存しているフォルダ内に、もう一つ新しいフォルダを作成します(ほんとはどこでもいいですが)

フォルダ名はできるだけ短くするため「TP」とでもしましょう(タッチパネルだから)

そのフォルダ内に、先ほどの「taskscheduler_disable.bat」「taskscheduler_enable.bat」のショートカットを入れます

ショートカットを入れたらショートカットの名前を変更します

ここでもできるだけ短い名前が望ましいので「taskscheduler_disable.bat」の名前を「OFF」、「taskscheduler_enable.bat」の名前を「ON」にします

ついでにアイコンも歯車マークではわかりにくいので、右クリック→プロパティ→アイコンの変更で、好きなマークに変更しましょう

今回はOFFのマークを「×」、ONのマークを「V(チェックマーク」にしてみました

次に、タスクバーを右クリック→ツールバー→新規ツールバーを選択

先ほど作成した「TP」フォルダを選択

タスクバーにON、OFFのショートカットが表示されます

これで完成!

OFFのボタンを押したらタッチスクリーンが無効になることを確認します

ONのボタンはもはやゆびでは効きませんので、デジタイザーペンでONを押すと、タッチスクリーンが有効になり、ゆびが反応することを確認します

長くなりましたが、これで絵を描きながら手軽にタッチスクリーンをON、OFFできるようになりました。

手のひらが勝手に線を書いてしまう問題はこれで解決しました

一度作ってしまえばずっと使えて、しかもすべて無料でできるので、同じような悩みがありましたらぜひやってみてくださいね(ちなみに私は無料ペイントソフト「メディバンPro」を使用しています。画力はあいかわらずですが…)

タッチスクリーンを有効にしてから再起動、シャットダウンができるボタンを作成する

もしうっかりタッチスクリーンをOFFの状態でシャットダウン、再起動をすると、ログインするときにタッチスクリーンが効かなくなり、ペンで操作しなくてはなりません。

ONにし忘れるといちいちペンを取り出すのが面倒なので、

ONし忘れ防止のためシャットダウン、再起動ボタンを作っておきます。

これもバッチファイルを作り、ショートカットをデスクトップに置いておくやり方です。

メモ帳を開き、以下のプログラムを記入します

schtasks /run /tn enabletouchscreen →タッチスクリーンを有効にしなさい

shutdown.exe /s /t 1  →シャットダウンをしなさい

拡張子を.batにして、任意のフォルダ内に保管します。

再起動のプログラムも同様に作成します

schtasks /run /tn enabletouchscreen →タッチスクリーンを有効にしなさい

shutdown.exe /r /t 1  →再起動しなさい

できたバッチファイルは

再起動バッチ:reboot_taskscheduler_enable.bat

シャットダウンバッチ:shutdown_taskscheduler_enable.bat

これのショートカットをデスクトップに作ります

ショートカットは、右クリック→アイコンの変更 で好きなアイコンに変更します

こんな感じで、再起動、シャットダウンをするときはこのショートカットをダブルクリックすれば、自動的にタッチスクリーンをONにしてから再起動、シャットダウンしてくれます。

今回のしくみを作るにあたり、以下の記事を参考にさせていただきました

一発でデバイスを有効・無効にするdevcon.exeを使ったバッチファイルの作り方

【超入門】10分でできるWindowsでのはじめてのバッチファイル作成

初心者でもわかるWindowsタスクスケジューラの使い方

schtasksコマンドでWindowsのタスクスケジューラに特権が必要なタスクを登録する

それでは、また。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする