Compartilhar via


Eventos de dispositivos de imagem estática

Um evento de dispositivo de imagem estática é uma ocorrência no nível do dispositivo sobre a qual o software de nível superior deve ser notificado, caso esse software tenha solicitado tal notificação. O minidriver no modo de usuário é responsável por definir a maioria dos eventos do dispositivo e fornecer notificações quando ocorre um evento. Em geral, os eventos indicam que o software de nível superior será necessário para executar alguma ação.

Um evento típico de dispositivo de imagem fixa é a detecção de um botão de pressão pressionado. Por exemplo, um scanner pode fornecer a um usuário botões separados para iniciar a verificação de texto e fotografias. Quando um botão é pressionado, o software de nível superior será necessário para exibir ou armazenar a imagem. O monitor de eventos de imagem estática detecta que o evento ocorreu (usando a interface COM IStiDevice) e pode chamar um aplicativo de imagem estática que foi registrado anteriormente (usando a interface COM IStillImage).

Eventos de dispositivos de imagens fixas são representados por GUIDs. No sti.h, a Microsoft define os seguintes eventos de dispositivos de imagem estática:

GUID de Eventos Propósito
GUID_DeviceArrivedLaunch Um dispositivo de imagem estática acabou de ser anexado ao sistema.
GUID_ScanImage Uma imagem deve ser escaneada no computador.
GUID_ScanFaxImage Uma imagem deve ser verificada no computador e, em seguida, enviada por fax.
GUID_ScanPrintImage Uma imagem deve ser digitalizada no computador e impressa.
GUID_STIUserDefined1 Um botão definível pelo usuário foi pressionado.
GUID_STIUserDefined2 Um botão configurável pelo usuário foi pressionado.
GUID_STIUserDefined3 Um botão definido pelo usuário foi pressionado.

Os desenvolvedores de minidrivers no modo de usuário devem usar esses GUIDs de evento predefinidos sempre que possível. Se esses GUIDs não forem apropriados, os GUIDs para eventos específicos do dispositivo deverão ser definidos.

Para definir um evento de dispositivo de imagem estática, você deve:

  • Especifique um identificador GUID para cada evento.

  • Inclua cada GUID no arquivo INF do driver de modo usuário.

No arquivo INF do driver, cada especificação guid deve incluir um asterisco (que significa "todos os aplicativos") ou uma lista de aplicativos específicos, indicando quais aplicativos devem ser iniciados quando o evento ocorrer. O monitor de eventos de imagem fixa usa essa lista para fornecer atribuições padrão de aplicativos a eventos. O usuário pode modificar essas atribuições com o Painel de Controle de Scanners e Câmeras.

Notificação de eventos

O driver deve monitorar o dispositivo (usando E/S assíncrona ou sondagem) para determinar quando o evento associado a cada GUID ocorre. Dependendo dos recursos do dispositivo, o driver pode notificar os clientes sobre a ocorrência de eventos do dispositivo de forma assíncrona ou respondendo a uma solicitação para sondar o dispositivo. Todos os drivers que são capazes de fornecer notificação de eventos do dispositivo (por qualquer método) devem definir o sinalizador STI_GENCAP_NOTIFICATIONS na estrutura STI_DEV_CAPS do dispositivo. Os drivers que dão suporte à sondagem e não à notificação assíncrona também devem definir o sinalizador STI_GENCAP_POLLING_NEEDED na mesma estrutura. (Essas capacidades também devem ser indicadas usando a palavra-chave Capabilities em arquivos INF para dispositivos de imagem estática.)

Se um driver der suporte à notificação assíncrona de eventos, o monitor de eventos chamará IStiUSD::SetNotificationHandle para solicitar notificações e fornecer um identificador de evento. Quando ocorre um evento de dispositivo, o driver deve notificar o monitor de eventos chamando SetEvent (consulte a documentação do SDK do Microsoft Windows), usando o identificador de evento como argumento. Em seguida, o cliente pode chamar IStiUSD::GetNotificationData para obter o GUID do evento.

Se a sondagem for necessária, o monitor de eventos chamará IStiUSD::GetStatus para sondar o driver, o que, por sua vez, deve sondar o dispositivo e retornar resultados em uma estrutura STI_DEVICE_STATUS .