Я хотел бы захватить и отключить Savefiledialog, который отображается при использовании драйвера Microsoft Print to PDF из приложения, которое не является офисным. Затем программно введите путь к файлу, возможно, с помощью System.Windows.Automation.
Я не могу найти дескриптор SaveFileDialog, когда он отображается. Я полагаю, что могу справиться с частью Windows.Automation.
Я хотел бы использовать драйвер Microsoft, поскольку он поставляется со всеми окнами 10.
Существуют ли другие способы захвата / подавления этого диалога? В настоящее время я делаю это с другим драйвером PDF на моем локальном компьютере через реестр. Но я бы хотел перейти на Microsoft PDF, поскольку он является стандартным.
Тема:
Как программно печатать в файл PDF без запроса имени файла в C # с помощью принтера Microsoft Print To PDF, который поставляется с Windows 10 - Не решает мою проблему и печатает пустую страницу при запуске из Revit API. Autodesk Revit должен начать печать (и выполняется через его API).
Код для поиска диалога от user32.dll
public static List<IntPtr>GetChildWindows( IntPtr parent) {
List<IntPtr>result=new List<IntPtr>();
GCHandle listHandle=GCHandle.Alloc(result);
try {
EnumWindowProc childProc=new EnumWindowProc(EnumWindow);
EnumChildWindows(parent, childProc, GCHandle.ToIntPtr(listHandle));
}
finally {
if (listHandle.IsAllocated) listHandle.Free();
}
return result;
}
public static string GetText(IntPtr hWnd) {
int length=GetWindowTextLength(hWnd);
StringBuilder sb=new StringBuilder(length + 1);
GetWindowText(hWnd, sb, sb.Capacity);
return sb.ToString();
}
private void Test() {
Process[] revits=Process.GetProcessesByName( "Revit");
List<IntPtr>children=GetChildWindows( revits[0].MainWindowHandle);
var names=new List<string>();
foreach (var child in children) {
names.Add(GetText(child));
}
}