Resposta curta
tabcal.exe ClearCal DisplayID=\.\DISPLAY1
Resposta longa
Você não encontrará uma lista oficial de parâmetros de linha de comando para tabcal.exe
em qualquer lugar, mas espero que isso seja útil para alguém.
Esta informação é trazida a você pelo Process Monitor (meu utilitário go-to para entender o que é um processo foi dito para fazer via argumentos de linha de comando, bem como o que está fazendo para outros processos, o sistema de arquivos e registro) e uso liberal do Google.
Eis o que acredito ter descoberto:
ClearCal
resets calibration data for a given device
requires DisplayID
LinCal
runs calibration
(ifClearCal
isn't specified, default function isLinCal
)
requiresDisplayID
if you have more than one device with pen and/or touch capabilities
may requireDeviceKind
if you have both pen and touch digitizers on a single display
DisplayID=\.\DISPLAY1
one-based display index associated with the touch screen
(If you have two displays it's 1 or 2; value matches multi-display identification number in Display Control Panel)
Quiet
Suppresses message boxes
E.g., if you doLinCal
, your changes will be saved rather than being prompted if you'd like to save
E.g., if you have an error with your command-line arguments, you won't receive a message indicating that
DeviceKind={touch,pen}
Seemingly optional argument to
ClearCal
andLinCal
to indicate the type of digitizer
(I suspect it may be required if you have both on the same display but my digitizer supports only touch.)
{validate,novalidate}
Optional argument to
LinCal
to prevent or accept registration of calibration marks that are way off from the crosshairs
If unspecified, the default isvalidate
XGridPts=
YGridPts=
Optional arguments (if used both required) to
LinCal
to specify X and Y coordinates of crosshairs for calibration.
Values are a comma-delimited list without spaces of the zero-based pixel coordinates
(e.g., for a 1920×1080, display X values 0-1919 and Y values 0-1079 are accepted; some examples are below)
If unspecified, calibration points default to four unless previously specified (values are retrieved fromHKLM:\SYSTEM\CurrentControlSet\Control\TabletPC\LinearityData
)
Export
Optional argument to
LinCal
to export calibration data to a file.
Output file is in directory from whichtabcal
was called, named 'caldatan.txt', where n is a zero-based auto-incrementing number
Contents of file are the name of the digitizer, a line break, and the same hex string written to the registry value inHKLM:\SYSTEM\CurrentControlSet\Control\TabletPC\LinearityData
(I haven't found a corresponding Import function.)
Outras coisas que aprendi
Existem três subchaves de registro que contêm dados de calibração:
-
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
Os dois primeiros podem conter um valor binário denominado vid_xxxxpid_xxxx&colxx
contendo os dados de calibração para esse dispositivo específico, bem como os valores XGridPts e YGridPts, se você calibrar com mais de 4 pontos de contato.
A subchave Enum\HID
que tem os mesmos valores de VID / PID / Col em seu nome que o valor LinearityData
terá um valor chamado LinearityData
com os mesmos dados que os acima.
Se você excluir todos esses valores do registro, os dados de calibragem serão redefinidos, mas a alteração não entrará em vigor até que os dados sejam lidos novamente pelo sistema, na inicialização subseqüente ou quando o wisptis.exe
processo do usuário é reiniciado. (Uma reinicialização ordenada do Serviço de Entrada do Tablet PC não faz isso, embora ele pare e reinicie os processos wisptis.exe
. Vá para a figura.)
Uma maneira muito mais fácil de fazer isso é executar o seguinte comando (que requer elevação), que exclui essas chaves e efetua a alteração imediatamente:
tabcal.exe ClearCal DeviceKind=touch DisplayID=\.\DISPLAY1
Este é o comando exato que é executado quando um usuário seleciona "Redefinir ..." no Painel de Controle de Configurações do Tablet PC no meu sistema de teste. Se você tiver um dispositivo de entrada de caneta ou uma configuração de exibição diferente, seu comando poderá ser um pouco diferente. (Se você tiver habilitado o UAC, antes de permitir a ação Redefinir, você pode abrir o painel Detalhes para ver a linha de comando completa a ser executada. Alternativamente, você pode extrair essa informação de Monitor de Processo .)
Como você já determinou, é possível recalibrar a tela sensível ao toque usando um derivativo de um dos comandos a seguir, dependendo do tamanho da tela e de seus requisitos específicos:
# 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