WIA: device.ExecuteCommand(CommandID.wiaCommandTakePicture); возвращает ноль

У меня есть старая программа, которую я использовал для удаленного управления цифровой камерой, чтобы автоматически делать фотографии и передавать их на ПК. Программа основана на WIA и, насколько я помню, изначально была разработана и использовалась на Windows XP.

Недавно вынул его из архивов и пытался заставить его работать на 64-битной Windows 7, используя ту же камеру. Нахождение камеры и запуск захвата работает без проблем. Однако при выполнении этой строки:

//device of type WIA.Device
Item item = device.ExecuteCommand(CommandID.wiaCommandTakePicture);

возвращается ноль, оставляя меня без ссылки на изображение для передачи. Искал решение все выше и ниже, но не смог ничего найти. Нашел другой сайт QA, где в ответе предлагалось использовать:

//manager of type WIA.DeviceManager, device of type WIA.Device
manager.RegisterEvent(EventID.wiaEventItemCreated, device.DeviceID);
manager.OnEvent += new _IDeviceManagerEvents_OnEventEventHandler(manager_OnEvent);

после получения изображения можно получить события, содержащие itemID. Попробовал это, и никакое событие не поднимается.

1 ответ

По моему опыту, WIA имеет много странностей. Я также боролся с null вернулся Item item = device.ExecuteCommand(CommandID.wiaCommandTakePicture); и хотя я работаю в Windows 7, моя машина 32-битная.

Решение на моей машине - прислушиваться к событию, указанному в исходном вопросе. Если это не работает, попробуйте зарегистрироваться для события, используя идентификатор подстановочного устройства:

manager.RegisterEvent(EventID.wiaEventItemCreated, Miscellaneous.wiaAnyDeviceID);
device.ExecuteCommand(CommandID.wiaCommandTakePicture);

Я также обнаружил, что мне нужно перерегистрировать событие после каждой команды устройства, иначе оно прекратило бы запуск.

Другие вопросы по тегам