tabcal.exe opções de linha de comando

1

Existe um utilitário no Windows 7 que permite fazer calibração por toque, se você tiver uma tela de toque suportada.

O executável é tabcal.exe e está localizado em:

C:\Windows\System32

Eu estou procurando uma maneira de shell este exe eu mesmo do meu aplicativo de quiosque para:

  1. Redefinir dados de calibração
  2. Execute a tela do modo de calibração

O exe suporta alguns switches, mas eles não são documentados. Uma vez que o interruptor que encontrei foi este:

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

Gostaria de saber se alguém pode me ajudar a encontrar as opções de comando para redefinir os dados de calibração, o que funcionaria da mesma forma que ir ao Painel de Controle e acessar as Configurações do Tablet PC e clicar em "Redefinir ..."

    
por ScottN 10.05.2016 / 22:07

4 respostas

3

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
              (if ClearCal isn't specified, default function is LinCal)
              requires DisplayID if you have more than one device with pen and/or touch capabilities
              may require DeviceKind 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 do LinCal, 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 and LinCal 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 is validate

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 from HKLM:\SYSTEM\CurrentControlSet\Control\TabletPC\LinearityData)

Export

              Optional argument to LinCal to export calibration data to a file.
              Output file is in directory from which tabcal 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 in HKLM:\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
    
por 07.11.2016 / 22:49
1

Eu corri tabcal através de strings . A lista abaixo pode ser comutadores possíveis. Eu não sei o que eles fazem.

LinCal
ShowCursor
Quiet
NoValidate
SaveFiles
Export
UserLinCal
ClearCal
NoDesktop
XInterval=
YInterval=
XGridPts=
YGridPts=
DeviceName=
DevicePath=
DisplayID=
DeviceKind=
UserSid=
UserSid=%s %s
RunAs
TabCalSingleInstance
    
por 28.06.2016 / 02:45
1

Muito obrigado pelo trabalho de todos neste tópico! Consegui usar essa informação para resolver um problema de inversão do eixo y com um novo touchscreen. Eu criei o teste de calibração personalizado usando o seguinte código:

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

Isso inverteu com sucesso meus pontos do eixo y e permitiu que eu usasse a nova tela sensível ao toque normalmente. Isso foi usado em um monitor de 1366 por 768, portanto, edite de acordo com o tamanho de exibição.

    
por 05.01.2018 / 23:07
1

Informações adicionais:

No Windows 10, em vez de reiniciar o wisptis.exe, você precisa eliminar o DWM.exe (que reinicia automaticamente) para que os novos valores do Registro entrem em vigor (se você não usar o TabCal.exe).

Além disso, se você alterar os dados de calibração manualmente no registro, deverá emitir a mensagem do Windows SendMessageTimeout (HWND_BROADCAST, WM_SETTINGCHANGE, NULL, "TabletPCDigitizerMappingChanged") como TabCal para notificar qualquer cliente que os valores de calibração foram alterados. / p>     

por 29.08.2018 / 15:47