다음을 통해 공유


사용자 지정된 UI에 대한 드라이버 지원

중요

인쇄 지원 앱(PSA)과 함께 Microsoft의 IPP 받은 편지함 클래스 드라이버를 사용하여 프린터 장치 개발을 위해 Windows 10 및 11의 인쇄 환경을 사용자 지정하는 것이 좋습니다.

자세한 내용은 인쇄 지원 앱 디자인 가이드를 참조하세요.

v4 인쇄 드라이버 모델은 인쇄용 프린터 확장 또는 UWP 디바이스 앱을 사용하여 UI 사용자 지정을 기본적으로 지원하여 개발되었습니다.

추가 UI 사용자 지정 디자인 고려 사항은 다음 섹션에 설명되어 있습니다.

모든 v4 인쇄 드라이버는 인쇄 기본 설정에서 작동하지만 모든 시나리오에서 최대 일관성을 보장하기 위해 구성 계층과 UI 계층 간의 경계를 유지하는 것이 중요합니다. 프린터 확장 또는 UWP 디바이스 앱이 설치되지 않았거나 자동으로 설치되었을 수 있으므로 v4 인쇄 드라이버는 사용자 지정된 프린터 기본 설정 환경 없이 인쇄 드라이버가 작동하도록 해야 합니다. 특히 PrintTicket 및 PrintCapabilities 지원은 드라이버의 GPD/PPD + JavaScript 제약 조건 구현에서 완전하고 포괄적이어야 합니다.

프린터 확장 또는 UWP 디바이스 앱의 일부 제약 조건 유효성 검사는 매우 유용한 대화형 환경을 제공하는 측면에서 유용할 수 있지만 신뢰할 수 있는 것으로 간주되는 드라이버의 유효성 검사를 대체해서는 안 됩니다.

프린터 확장 및 UWP 디바이스 앱은 네트워크 리소스에 대한 직접 네트워크 호출 대신 IPrinterQueue::SendBidiQuery 메서드를 사용해야 합니다. 네트워크 리소스에 연결해야 하는 경우 다른 스레드에서 수행하거나 UI가 중단되지 않도록 비동기적으로 수행해야 합니다. 나중에 더 빠르게 호출하려면 데이터를 검색한 후 캐시해야 합니다.

프린터 알림

프린터 알림은 Bidi 및 DriverEvent XML 파일에 의해 구동됩니다. 그러나 배터리 사용 시간을 더 잘 관리하고 중단을 최소화하기 위해 사용자가 인쇄할 때만 알림이 표시됩니다.

인쇄 기본 설정은 인쇄 중인 앱에 대한 컨텍스트이지만 프린터 알림은 그렇지 않습니다. 다음 순서도에서는 Windows에서 프린터 알림의 동작을 결정하는 데 사용하는 의사 결정 트리에 대해 설명합니다. 사용 가능한 경우 UWP 디바이스 앱이 프린터 확장보다 우선합니다.

프린터 알림 동작 순서도입니다.

GetForegroundWindow를 호출하여 사용자 지정 UI를 사용하여 Windows 8 환경에 알림을 표시하려고 하면 알림 창이 표시되지 않는다는 사실을 알고 있어야 합니다. 이는 운영 체제가 GetForegroundWindow를 사용하여 포그라운드 창을 만드는 스레드에 더 높은 우선 순위를 할당하려고 시도하고 Windows 8 환경의 대화에는 허용되지 않기 때문입니다. 사용자 지정 UI를 사용하여 Windows 8 환경에서 알림을 표시하려면 GetDesktopWindow를 호출하여 알림을 표시해야 합니다.

드라이버 이벤트 만들기. V4 인쇄 드라이버는 DriverEvent XML 파일을 사용하여 Bidi 쿼리 및 드라이버 이벤트를 발생시켜야 하는 트리거를 설명합니다. 또한 드라이버 이벤트는 표준 문자열만 지원한다는 점에 유의해야 합니다. 표준 문자열에 대한 자세한 내용은 AsyncUI 기본 리소스 파일 문자열 리소스를 참조하세요. 현재 구현에서는 MS-PAN 프로토콜을 사용하여 AsyncUIBalloon 메시지를 만들고 게시합니다. 이 구현은 나중에 성능 향상을 위해 변경될 수 있으므로 기본 프로토콜에 종속되지 않도록 v4 인쇄 드라이버를 개발하는 것이 중요합니다.

다음 다이어그램은 프로토콜 사용률을 보여줍니다.

드라이버 이벤트를 사용하는 프로토콜 사용률입니다.

드라이버 이벤트 XML 샘플입니다. 다음 XML 코드 조각은 하나의 드라이버 이벤트를 지정합니다. 이 이벤트는 Bidi가 보고한 총 용량의 21% 미만인 노란색 잉크를 확인합니다. 이 경우 resourceID 132에서 참조하는 문자열을 사용하여 AsyncUIBalloon 메시지가 만들어집니다. 즉, "'%1'이(가) 토너/잉크에서 낮습니다."라는 메시지가 표시됩니다. 여기서 Resource 2002("Yellow")는 %1로 대체됩니다.

<de:DriverEvents xmlns:de="https://schemas.microsoft.com/windows/2011/08/printing/driverevents" schemaVersion="4.0">
  <DriverEvent eventId="{A04CF0FC-1CEB-4C62-B967-6F0AE5C5F81E}">
    <Transport>USB</Transport>
    <Transport>WSD</Transport>
    <Query>\Printer.Consumables</Query>
    <Trigger result="\Printer.Consumables.Yellow:Level" comparison="LessThan" value="21">
      <StandardMessage resourceId="132">
        <StringParameter index="1" resourceId="2002" />
      </StandardMessage>
    </Trigger>
  </DriverEvent>
</de:DriverEvents>

드라이버 이벤트 스키마. DriverEvent 스키마는 Windows 드라이버 키트에서 \Include\um\PrinterDriverEvents.xsd로 사용할 수 있습니다.

드라이버 이벤트 XML 유효성 검사. 드라이버 매니페스트에서 DriverEvent XML을 올바르게 설명하는 한 XML 파일은 INFGate 도구에서 자동으로 유효성을 검사합니다.

AsyncUIBalloon

비동기UI 기본 리소스 파일 문자열 리소스

IPrinterQueue::SendBidiQuery

MS-PAN 프로토콜