Em WIA, Como posso adicionar o meu programa na lista de programas de aquisição de imagens de uma câmera digital?

votos
3

Quando eu ligar a minha câmera digital com o meu computador, uma caixa de diálogo que contém todos os programas registrados pode ser usado para obter imagens da câmera aparecerá. Agora eu quero adicionar meu próprio programa na lista, de modo que quando eu clique no item do meu programa, eu posso usar o meu próprio programa para obter imagens da câmera digital.

Muito obrigado.

Publicado 28/11/2008 em 03:24
fonte usuário
Em outras línguas...                            


2 respostas

votos
7

WIA tem um objeto Gerenciador de dispositivos que fornece uma interface que permite a programas para registrar para notificações de eventos.

Contactar o Gerenciador de Dispositivos

Você usa a IWiaDevMgrinterface para interagir com o gerenciador de dispositivos. Você obter um ponteiro para a interface com uma chamada para CoCreateInstance():

    IWiaDevMgr *pWiaDevMgr;
    HRESULT hr;
    hr = CoCreateInstance(CLSID_WiaDevMgr,
        NULL,
        CLSCTX_LOCAL_SERVER,
        IID_IWiaDevMgr,
        (void*)&pWiaDevMgr);

Registrar um programa para um evento

Em seguida, registrar um programa para ser executado quando o evento é acionado é tão simples como:

pWiaDevMgr->RegisterEventCallbackProgram(
    WIA_REGISTER_EVENT_CALLBACK,
    NULL,
    &WIA_EVENT_DEVICE_CONNECTED,
    bstrCommandline,
    bstrName,
    bstrDescription,
    bstrIcon);

A linha de comando, nome, descrição e ícone são todos BSTRé porque eles estão passando através de uma interface COM. Você pode usar SysAllocString()e seus amigos para criá-los, ou usar as classes fornecidas por extensões Visual C ou ATL para criar e gerenciá-los.

Liberar o Gerenciador de Dispositivos

Se você não estiver usando um ponteiro inteligente COM-aware para a interface, então não se esqueça de liberar a referência tomada por CoCreateInstance():

    pWiaDevMgr->Release();

Se você não liberá-lo, o sistema COM vai encontrar uma maneira de puni-lo, mas ele pode não ser imediatamente óbvio ...

Anulação

testes ocasional mostra que a exclusão de um evento registrado funciona quando todos os quatro parâmetros utilizados para registrar o evento são passados ​​exatamente. A chamada é:

pWiaDevMgr->RegisterEventCallbackProgram(
    WIA_UNREGISTER_EVENT_CALLBACK,
    NULL,
    &WIA_EVENT_DEVICE_CONNECTED,
    bstrCommandline,
    bstrName,
    bstrDescription,
    bstrIcon);

Este é um aborrecimento potencial porque não parece haver nenhuma API documentado para listar os eventos registrados. Isto implica que, se o seu instalador registra um programa, então ele deve também manter um registro dos argumentos usados ​​para que o desinstalador pode cancelar o registro do evento.

Os parâmetros de evento

A linha de comando podem conter as cordas %1e %2que vai ser substituído pelo nome da porta e o GUID do evento que disparou, respectivamente, antes da linha de comando é analisado.

O ícone, nome e descrição são exibidos na lista apresentada ao usuário quando a câmera está ligada. O nome deve ser mais curto do que a descrição.

O ícone é uma combinação de um nome de arquivo e um identificador de recurso. Um valor padrão bom é "sti.dll,0"que será uma imagem genérica de uma câmera e scanner. Se você fornecer o seu próprio ícone, a corda quase certamente deve incluir um caminho completo para a DLL. Sair em um membro, eu imagino que, deliberadamente, incluindo uma vírgula em qualquer lugar do caminho que não seja como separador antes do ID de recurso irá causar problemas.

Por trás das cenas

A localização real onde WIA / STI armazena a lista de eventos não está documentada. No entanto, com um pouco de pesquisa em regedit, eu localizado o catálogo de eventos no meu sistema XP SP3. Alguém poderia imaginar que seria encontrado em um local semelhante em outros sistemas de ...

A chave do registro HKLM\SYSTEM\CurrrentControlSet\Control\StillImage\Eventscontém uma subchave para cada evento conhecido do sistema. Cada tecla tem um valor nomeado GUID que contém o GUID que identifica esse evento.

Dispositivo ligado tratadores de eventos são listados na Connectsubchave, por exemplo.

Chaves para dispositivos individuais WIA / STI podem ser encontrados na HKLM\SYSTEM\CurrentControlSet\Control\Class\{6BDD1FC6-810F-11D0-BEC7-08002BE2092F}chave entre outros lugares.

Lembre-se que estes locais não são documentados. Tocá-los em seu próprio risco, sua milhagem pode variar, ...

Respondeu 27/06/2009 em 01:57
fonte usuário

votos
0

Você precisa usar a interface WIA (Windows Image Acquisition). IWiaDevMgr fornece três métodos para fazer isso: RegisterEventCallbackProgram, RegisterEventCallbackCLSID e RegisterEventCallbackInterface. Se você deseja que o Windows para iniciar o seu programa quando o usuário clica em você na caixa de diálogo de reprodução automática, você pode usar qualquer RegisterEventCallbackProgram ou RegisterEventCallbackCLSID.

Respondeu 21/01/2009 em 12:54
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more