Microsoft Print to PDF でコードからファイル名指定

Windows 10 標準装備の仮想プリンタ Microsoft Print to PDF ですが、作成されるPDFファイル名をアプリケーションのコードから指定できないか探していたところ、以下を見つけました。

How to programmatically print to PDF file without prompting for filename in C# using the Microsoft Print To PDF printer that comes with Windows 10

https://stackoverflow.com/questions/31896952/how-to-programmatically-print-to-pdf-file-without-prompting-for-filename-in-c-sh

C++ の場合は、Windows API 関数 CreateDC の第3パラメータにデフォルトの "PORTPROMPT:" ではなくファイル名を指定すればいいです。

    HANDLE hDC = CreateDC("winspool", "Microsoft Print to PDF", "C:\\HOGE\\HOGEHOGE.PDF");

OWLNext の場合は、TPrinter インスタンスメンバ関数 GetData を呼び出して取得する TPrintDialog::TData クラスインスタンスに SetDevNames で設定するときの第3パラメータが相当します。OWLNext ではそのデータを元に TCreatedDC::TCreatedDC にて、Windows API 関数 CreateDC を呼び出すようになっています。

    TPrinter printer;
    printer.GetData()->SetDevNames("winspool", "Microsoft Print to PDF", "C:\\HOGE\\HOGEHOGE.PDF");