tabcal.exe 命令行开关

Sco*_*ttN 4 windows-7 command-line touchscreen command-line-arguments

如果您有受支持的触摸屏,Windows 7 上有一个实用程序可以让您进行触摸校准。

可执行文件是 tabcal.exe,它位于:

C:\Windows\System32
Run Code Online (Sandbox Code Playgroud)

我正在寻找一种方法将这个 exe 自己从我的信息亭应用程序中外壳到:

  1. 重置校准数据
  2. 执行校准模式屏幕

exe 支持一些开关,但它们没有记录。一旦切换,我发现是这样的:

tabcal lincal novalidate XGridPts={coords} YGridPts={coords}
Run Code Online (Sandbox Code Playgroud)

我想知道是否有人可以帮助我找到重置校准数据的命令开关,这与转到控制面板并转到平板电脑设置然后单击“重置...”的工作原理相同

Dan*_*Dan 7

简答

tabcal.exe ClearCal DisplayID=\\.\DISPLAY1
Run Code Online (Sandbox Code Playgroud)

长答案

您不会在tabcal.exe任何地方找到命令行参数的官方列表,但我希望这对某人有用。此信息由Process Monitor(我的首选实用程序,用于了解通过命令行参数告诉进程执行的操作以及它对其他进程、文件系统和注册表执行的操作)和自由使用谷歌。

这是我相信我已经想出的:

ClearCal

              重置给定设备的校准数据
              需要 DisplayID

LinCal

              运行校准
              (如果ClearCal没有指定,缺省功能是LinCal
              要求DisplayID,如果你有一个以上的设备与笔和/或触摸的能力
              ,可能需要DeviceKind,如果你有在单个显示器上笔和数字化仪触摸

DisplayID=\\.\DISPLAY1

              与触摸屏关联的基于一的显示索引
              (如果您有两个显示器,则为 1 或 2;值与显示控制面板中的多显示器标识号匹配)

Quiet

              禁止消息框
              例如,如果您这样做LinCal,您的更改将被保存而不是提示您是否要保存
              例如,如果您的命令行参数有错误,您将不会收到指示

DeviceKind={touch,pen}

              似乎是可选参数ClearCalLinCal指示数字化仪的类型
              (我怀疑如果您在同一显示器上同时使用这两个参数,但我的数字化仪仅支持触摸,则可能需要它。)

{validate,novalidate}

              LinCal防止或接受远离十字准线的校准标记的注册的可选参数
              如果未指定,则默认值为validate

XGridPts=
YGridPts=

              可选参数(如果同时使用,则两者都需要)来LinCal指定用于校准的十字准线的 X 和 Y 坐标。
              值是逗号分隔的列表,没有从零开始的像素坐标的空格
              (例如,对于 1920×1080,接受显示 X 值 0-1919 和 Y 值 0-1079;下面是一些示例)
              如果未指定,则校准点除非先前指定,否则默认为四个(从 中检索值HKLM:\SYSTEM\CurrentControlSet\Control\TabletPC\LinearityData

Export

              LinCal将校准数据导出到文件的可选参数。
              输出文件位于tabcal被调用的目录中,名为“caldata n .txt”,其中n是从零开始的自动递增数字
              文件的内容是数字化仪的名称、换行符和写入到的相同十六进制字符串中的注册表值HKLM:\SYSTEM\CurrentControlSet\Control\TabletPC\LinearityData
              (我还没有找到相应的导入功能。)

我学到的其他东西

有三个包含校准数据的注册表子项:

  • 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

前两个可能包含一个名为的二进制值,vid_xxxxpid_xxxx&colxx其中包含该特定设备的校准数据以及 XGridPts 和 YGridPts 值(如果您使用 4 个以上的触摸点进行校准)。

Enum\HID在其名称中具有与LinearityData值相同的 VID/PID/Col 值的子项将具有LinearityData与上述相同数据命名的值。

如果您删除所有这些注册表值,您将重置校准数据,但更改不会生效,直到该数据被系统读回,无论是在后续启动时还是在wisptis.exe用户进程重新启动时。(即使 Tablet PC 输入服务停止并重新启动wisptis.exe进程,它也不会有序地重新启动。请看图。)

一个更简单的方法是运行以下命令(需要提升),删除这些键并立即影响更改:

tabcal.exe ClearCal DeviceKind=touch DisplayID=\\.\DISPLAY1
Run Code Online (Sandbox Code Playgroud)

这是当用户从我的测试系统上的 Tablet PC 设置控制面板中选择“重置...”时运行的确切命令。如果您有笔输入设备或不同的显示配置,您的命令可能略有不同。(如果您启用了 UAC,则在允许重置操作之前,您可以打开“详细信息”窗格以查看要执行的完整命令行。或者,您可以从Process Monitor 中提取该信息。)

正如您已经确定的那样,您可以根据显示器的大小和您的特定要求,使用以下命令之一的派生词重新校准触摸屏:

# 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
Run Code Online (Sandbox Code Playgroud)