サポートされているタッチスクリーンがある場合は、Windows7にタッチキャリブレーションを実行できるユーティリティがあります。
実行可能ファイルはtabcal.exeで、次の場所にあります。
C:\Windows\System32
キオスクアプリケーションからこのexeファイルを自分でシェル化する方法を探しています。
Exeはいくつかのスイッチをサポートしていますが、それらは文書化されていません。私が見つけたスイッチはこれでした:
tabcal lincal novalidate XGridPts={coords} YGridPts={coords}
キャリブレーションデータをリセットするコマンドスイッチを見つけるのを手伝ってくれる人がいるかどうか知りたいのですが、これはコントロールパネルに移動してTabletPCの設定に移動して[リセット...]をクリックするのと同じように機能します。
_tabcal.exe ClearCal DisplayID=\\.\DISPLAY1
_
_tabcal.exe
_のコマンドラインパラメータの公式リストはどこにもありませんが、これが誰かに役立つことを願っています。この情報は Process Monitor (コマンドライン引数を介してプロセスが実行するように指示されたこと、および他のプロセス、ファイルシステム、および他のプロセスに対して実行していることを理解するための私の頼りになるユーティリティによって提供されます。レジストリ)およびGoogleの自由な使用。
これが私が理解したと私が信じていることです:
ClearCal
特定のデバイスのキャリブレーションデータをリセットします
DisplayIDが必要
LinCal
キャリブレーションを実行します
(ClearCal
が指定されていない場合、デフォルトの関数はLinCal
です)
ペンやタッチ機能を備えたデバイスが複数ある場合は、DisplayID
が必要です
1つのディスプレイにペンデジタイザーとタッチデジタイザーの両方がある場合は、DeviceKind
が必要になる場合があります_
DisplayID=\\.\DISPLAY1
_
タッチスクリーンに関連付けられた1ベースのディスプレイインデックス
(ディスプレイが2つある場合は、1または2です。値はディスプレイコントロールパネルのマルチディスプレイ識別番号と一致します)
Quiet
メッセージボックスを抑制します
たとえば、LinCal
を実行すると、保存するかどうかを確認するメッセージが表示されるのではなく、変更が保存されます。
たとえば、コマンドライン引数にエラーがある場合、次のことを示すメッセージは表示されません。_
DeviceKind={touch,pen}
_
デジタイザーのタイプを示すための
ClearCal
およびLinCal
への一見オプションの引数
(同じディスプレイに両方がある場合は必要になると思いますが、私のデジタイザーはタッチのみをサポートしています。)_
{validate,novalidate}
_
十字線から大きく離れたキャリブレーションマークの登録を防止または受け入れるための
LinCal
へのオプションの引数
指定されていない場合、デフォルトはvalidate
です。_
XGridPts=
_
_YGridPts=
_
キャリブレーション用の十字線のX座標とY座標を指定するための
LinCal
へのオプションの引数(両方が必要な場合)。
値は、ゼロベースのピクセル座標のスペースを含まないコンマ区切りのリストです
(たとえば、1920×1080の場合、X値0-1919およびY値0-1079の表示が受け入れられます。いくつかの例を以下に示します)
指定されていない場合、事前に指定されていない限り、キャリブレーションポイントはデフォルトで4になります(値は_HKLM:\SYSTEM\CurrentControlSet\Control\TabletPC\LinearityData
_から取得されます)
Export
キャリブレーションデータをファイルにエクスポートするための
LinCal
へのオプションの引数。
出力ファイルは、tabcal
が呼び出されたディレクトリにあり、「caldatan。txt」という名前です。ここでnはゼロベースの自動インクリメント数です
ファイルの内容は、デジタイザーの名前、改行、および_HKLM:\SYSTEM\CurrentControlSet\Control\TabletPC\LinearityData
_のレジストリ値に書き込まれた同じ16進文字列です。
(対応するインポート機能が見つかりません。)
キャリブレーションデータを含む3つのレジストリサブキーがあります。
HKLM:\SYSTEM\CurrentControlSet\Control\TabletPC\LinearityData
_HKLM:\SYSTEM\CurrentControlSet\Control\TabletPC\UserLinearityData
_HKLM:\SYSTEM\CurrentControlSet\Enum\HID\VID_xxxx&&PID_xxxx&Colxx\(non-deterministic)\Device Parameters
最初の2つには、その特定のデバイスのキャリブレーションデータを含む_vid_xxxxpid_xxxx&colxx
_という名前のバイナリ値と、4つを超えるタッチポイントでキャリブレーションした場合のXGridPtsおよびYGridPts値が含まれる場合があります。
名前にLinearityData
値と同じVID/PID/Col値を持つ_Enum\HID
_サブキーには、上記と同じデータを持つLinearityData
という名前の値があります。
これらのレジストリ値をすべて削除すると、キャリブレーションデータがリセットされますが、その後の起動時または_wisptis.exe
_ユーザーがシステムによってデータが読み込まれるまで、変更は有効になりません。プロセスが再開されます。 (Tablet PC Input Serviceを正常に再起動しても、_wisptis.exe
_プロセスが停止して再起動しても実行されません。図を参照してください。)
これを行うためのはるかに簡単な方法は、これらのキーを削除してすぐに変更を行う次のコマンド(昇格が必要)を実行することです。
_tabcal.exe ClearCal DeviceKind=touch DisplayID=\\.\DISPLAY1
_
これは、ユーザーがテストシステムのTabletPC設定コントロールパネルから[リセット...]を選択したときに実行される正確なコマンドです。ペン入力デバイスまたは別のディスプレイ構成を使用している場合、コマンドはわずかに異なる場合があります。 (UACを有効にしている場合は、リセットアクションを許可する前に、[詳細]ペインを開いて、実行するコマンドライン全体を確認できます。または、 プロセスモニター からその情報を取得することもできます。)
すでに決定したように、ディスプレイのサイズと特定の要件に応じて、次のコマンドのいずれかの派生物を使用してタッチスクリーンを再調整できます。
_# Default touch calibration (4 points unless someone's previously specified XGridPts/YGridPts)
tabcal.exe lincal novalidate devicekind=touch
tabcal.exe lincal novalidate devicekind=pen
# Example 25-point touch calibration for 1920×1080 display
tabcal.exe lincal novalidate devicekind=touch XGridPts=10,485,960,1435,1910 YGridPts=10,275,540,805,1070
# Example 121-point pen calibration (from a Microsoft Surface forum)
tabcal.exe lincal novalidate devicekind=pen XGridPts=10,60,110,360,660,960,1260,1560,1810,1860,1910 YGridPts=10,60,110,200,330,490,650,810,970,1020,1070
_
tabcal
からstrings
まで実行しました。以下のリストは、可能なスイッチである可能性があります。私は彼らが何をしているのか分かりません。
LinCal
ShowCursor
Quiet
NoValidate
SaveFiles
Export
UserLinCal
ClearCal
NoDesktop
XInterval=
YInterval=
XGridPts=
YGridPts=
DeviceName=
DevicePath=
DisplayID=
DeviceKind=
UserSid=
UserSid=%s %s
RunAs
TabCalSingleInstance
追加情報:
Windows 10では、wisptis.exeを再起動する代わりに、レジストリからの新しい値を有効にするためにDWM.exeを強制終了する必要があります(自動的に再起動します)(TabCal.exeを使用しない場合)。
また、レジストリでキャリブレーションデータを手動で変更する場合は、TabCalがクライアントにキャリブレーション値が変更されたことを通知するため、WindowsメッセージSendMessageTimeout(HWND_BROADCAST、WM_SETTINGCHANGE、NULL、 "TabletPCDigitizerMappingChanged")を発行する必要があります。
このスレッドで皆さんの作業に感謝します!この情報を使用して、新しいタッチスクリーンでのy軸反転の問題を解決することができました。次のコードを使用してカスタムキャリブレーションテストを作成しました。
tabcal lincal novalidate DeviceKind=touch DisplayID=\\.\DISPLAY1 XGridPts=99,1265 YGridPts=99,667
これにより、y軸のポイントが正常に反転し、新しいタッチスクリーンを通常どおり使用できるようになりました。これは1366x 768ディスプレイで使用されていたため、ディスプレイサイズに応じて編集してください。