데스크톱 윈도우 응용 프로그램에서 UWP 라이브러리를 이용한 비디오 장치 열람하는 방법
우선 다음의 글에 따라,
윈도우 데스크톱 응용 프로그램(예: Console)에서 알림 메시지(Toast notifications) 띄우기
; https://www.sysnet.pe.kr/2/0/11073
.csproj 파일에 다음의 노드를 추가하고,
<TargetPlatformVersion>8.0</TargetPlatformVersion>
2개의 참조를 추가해 주면 됩니다.
- C:\Program Files (x86)\Windows Kits\10\UnionMetadata\10.0.15063.0\Windows.winmd
- C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETCore\v4.5\System.Runtime.WindowsRuntime.dll
(Windows.winmd 경로에서 "10.0.15063.0" 버전은 여러분들의 개발 환경에 설치한 Windows Kits의 버전 경로로 대체하면 됩니다. 예를 들어, 10.0.19041.0, 10.0.22000.0, 10.0.22621.0 등...)
그런 후 다음과 같이 코딩을 작성하면 비디오 장치를 열람할 수 있습니다.
using System;
using System.Threading.Tasks;
using Windows.Devices.Enumeration;
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
ListDevices().GetAwaiter().GetResult();
}
private static async Task ListDevices()
{
var devices = await DeviceInformation.FindAllAsync(DeviceClass.VideoCapture);
foreach (var item in devices)
{
Console.WriteLine($"{item.Id}: {item.Name}");
}
}
}
}
로지텍 웹 캠이 달린 제 컴퓨터의 경우 다음과 같이 출력됩니다.
\\?\USB#VID_046D&...[생략]...\{bbefb6c7-...[생략]...724083}: Logitech HD Pro Webcam C920
// SIG H703의 경우
// \?\USB#VID_1BCF&...[생략]...{e5323777-f976-4f5b-9b55-b94699c46e44}\GLOBAL: FHD Camera
물론 DeviceClass 상수의 값이 다음과 같이 다양하기 때문에,
[ContractVersion(typeof(UniversalApiContract), 65536)]
public enum DeviceClass
{
All = 0,
AudioCapture = 1,
AudioRender = 2,
PortableStorageDevice = 3,
VideoCapture = 4,
ImageScanner = 5,
Location = 6
}
비디오 캡처 장치뿐만 아니라 원하는 장치를 다양하게 열람할 수 있습니다.
(첨부 파일은 이 글의 예제 코드를 포함한 콘솔 프로젝트입니다.)
참고로 System.Runtime.WindowsRuntime.dll 참조를 하지 않으면 다음과 같은 컴파일 오류가 발생합니다.
Error CS4036 'IAsyncOperation' does not contain a definition for 'GetAwaiter' and no extension method 'GetAwaiter' accepting a first argument of type 'IAsyncOperation' could be found (are you missing a using directive for 'System'?)
[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]