web-dev-qa-db-ja.com

tabcal.exeコマンドラインスイッチ

サポートされているタッチスクリーンがある場合は、Windows7にタッチキャリブレーションを実行できるユーティリティがあります。

実行可能ファイルはtabcal.exeで、次の場所にあります。

C:\Windows\System32

キオスクアプリケーションからこのexeファイルを自分でシェル化する方法を探しています。

  1. キャリブレーションデータをリセットする
  2. キャリブレーションモード画面の実行

Exeはいくつかのスイッチをサポートしていますが、それらは文書化されていません。私が見つけたスイッチはこれでした:

tabcal lincal novalidate XGridPts={coords} YGridPts={coords}

キャリブレーションデータをリセットするコマンドスイッチを見つけるのを手伝ってくれる人がいるかどうか知りたいのですが、これはコントロールパネルに移動してTabletPCの設定に移動して[リセット...]をクリックするのと同じように機能します。

3
ScottN

短い答え

_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
_
5
Dan

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
3
ChrisM

追加情報:

Windows 10では、wisptis.exeを再起動する代わりに、レジストリからの新しい値を有効にするためにDWM.exeを強制終了する必要があります(自動的に再起動します)(TabCal.exeを使用しない場合)。

また、レジストリでキャリブレーションデータを手動で変更する場合は、TabCalがクライアントにキャリブレーション値が変更されたことを通知するため、WindowsメッセージSendMessageTimeout(HWND_BROADCAST、WM_SETTINGCHANGE、NULL、 "TabletPCDigitizerMappingChanged")を発行する必要があります。

2
user938673

このスレッドで皆さんの作業に感謝します!この情報を使用して、新しいタッチスクリーンでのy軸反転の問題を解決することができました。次のコードを使用してカスタムキャリブレーションテストを作成しました。

tabcal lincal novalidate DeviceKind=touch DisplayID=\\.\DISPLAY1 XGridPts=99,1265 YGridPts=99,667

これにより、y軸のポイントが正常に反転し、新しいタッチスクリーンを通常どおり使用できるようになりました。これは1366x 768ディスプレイで使用されていたため、ディスプレイサイズに応じて編集してください。

1
user3092842