2009-01-03 10 views
6

¿Alguien conoce una forma sensata de obtener información sobre la presión de la tableta/lápiz en Windows?¿Cómo recuperas la información de presión de la aguja en Windows?

Es posible distinguir un lápiz táctil de ratón con :: GetMessageExtraInfo, pero no se puede obtener ninguna información más allá de eso. También encontré la API de WinTab en una esquina alejada del sitio de Wacom, pero eso no forma parte de las ventanas hasta donde yo sé, y tiene un sistema de eventos/mensajes completamente distinto de la cola de mensajes.

Teniendo en cuenta todo lo que quiero es la información de presión más básica ciertamente hay una API/COM estándar de Win32, es cualquier persona consciente de lo que podría ser?

Respuesta

2

Debe utilizar el Tablet PC Pen/Ink API. La versión COM de la API vive en InkObj.dll. Aquí es un punto de partida para la documentación: http://msdn.microsoft.com/en-us/library/ms700664.aspx

Si no recuerdo mal, InkObj.dll está disponible en Windows XP SP2 y todos los posteriores sistemas operativos cliente de Windows, independientemente de si la máquina es un Tablet PC.

2

ACTUALIZACIÓN:
Ha sido un número de años desde que inicialmente dieron esta respuesta, pero Wintab ha convertido en el estándar de facto, y ntrig más o menos doblado, con el tiempo la construcción de un envoltorio para permitir la API Wintab para acceder a través de este digitalizador.
(http://www.tabletpcbuzz.com/showthread.php?37547-N-trig-Posts-WinTAB-Support-Driver)

Esta es una respuesta bastante tarde, pero recientemente mi esposa y yo compramos un Tablet PC Dell XT, que como resulta que en realidad utiliza ntrig, un conjunto de interfaces que utilizan tinta, la aceptó nuevos API de Windows que se envía con Windows XP Tablet Edition, luego SP 2 y todas las versiones posteriores.

Muchas tabletas de Wacom y otras usan la API Wintab, que actualmente no está abierta ni realmente permitida su uso. Por lo que he oído, las personas que lo mantienen son bastante sue-happy.

Por lo tanto, depende del tipo de tableta que esté utilizando y de los controladores que haya instalado. En mi opinión sesgada, debe trabajar con Ink, ya que proporciona (o al menos a través de NTrig y Windows 7 proporcionará) capacidad multitáctil y es probable que sea el nuevo estándar para interfaces de tableta. Pero a partir de ahora, los dispositivos NTrig no traducen su información de presión y ángulo a aplicaciones comunes de Wintab, como Photoshop o Corel Painter. Las aplicaciones tienden a requerir al menos algo de soporte para Tablet API de Microsoft para funcionar correctamente.

+0

su información, ya que suelen afectar esta respuesta en las búsquedas sobre Wintab: La API Wintab todavía es comúnmente utilizado para las interacciones tableta de lápiz y parece ser el estándar de facto, al menos hasta que más fabricantes de aplicaciones y tabletas adapten el soporte de Microsoft Ink. Las personas que mantienen la especificación actualmente son Wacom, y estaban en el extremo receptor de [la demanda a la que supongo que se refiere] (http://caselaw.findlaw.com/us-federal-circuit/1114074.html) Su sitio web le da la bienvenida a otros fabricantes para hablar sobre la implementación de las especificaciones de wintab con su propio hardware. – user1201210

+0

¡Guau, cuatro años después! He encontrado que lo que dices es cierto, aunque la demanda a la que me refería era que Wacom demandaba a alguien por intentar port wintab a su interfaz nativa. Dicho esto, NTrig ha escrito un contenedor para permitir la API wintab, y ahora mi antiguo Dell XT2 funciona con Photoshop et al. Actualizaré esta respuesta. – NateDSaint

2

La forma actual de hacerlo es manejar WM_POINTERnnn msgs. Tenga en cuenta que esto es para Win 8 y versiones posteriores.

Nota obtendrá estos Mensajes para el tacto y la pluma, por lo que necesita saber la pointerType con el fin de probar la pluma. La WPARAM recibida por un WNDPROC para WM_POINTERnnnn mensajes como WM_POINTERUPDATE y otros mensajes contiene el identificador de puntero que necesitará para solicitar más información. Empíricamente encontré que WM_POINTERUPDATE da como resultado información que contiene datos de presión, mientras que si los indicadores del puntero indican hacia abajo/arriba no hay información de presión.

const WORD wid = GET_POINTERID_WPARAM(wParam); 
POINTER_INFO piTemp = {NULL}; 
GetPointerInfo(wid, &piTemp); 
if (piTemp.pointerType == PT_PEN 
{ 
    UINT32 entries = 0; 
    UINT32 pointers = 0; 

    GetPointerFramePenInfoHistory(wid, &entries, &pointers, NULL); // how many 
    // TODO, allocate space needed for the info, process the data in a loop to retrieve it, test pointerInfo.pointerFlags for down/up/update. 

} 

Una vez que sepa que se trata de la pluma, se puede obtener la información de presión de la estructura POINTER_PEN_INFO.

Esto es similar al tacto de manejo, aunque para el toque que desee el reconocimiento de gestos y la inercia. Hay una muestra de Microsoft que ilustra el uso de estas funciones.

Es parte de una charla de construcción: https://channel9.msdn.com/Events/Build/2013/4-022

Cuestiones relacionadas