Запуск Acrobat Reader 10.0 из C #: как свернуть? - PullRequest
5 голосов
/ 08 марта 2012

Я запускаю Reader 10.0 для отправки файла PDF на принтер из программы C # в системе Win 7. Вот что я делаю сейчас:

startInfo.FileName = adobeReaderPath;
string args = String.Format("/t \"{0}\" \"{1}\"", this.pdfFileName, this.printerName);
startInfo.Arguments = args;
startInfo.CreateNoWindow = true;
startInfo.ErrorDialog = false;
startInfo.UseShellExecute = false;
startInfo.WindowStyle = ProcessWindowStyle.Minimized;
Process process = Process.Start(startInfo);

Я заметил, что такой запуск Reader (или из командной строки) фактически запускает 2 исполняемых файла AcroRd32.exe. Ни один из них не свернут. Я также попробовал ProcessWindowStyle.Hidden с тем же результатом.

Есть ли способ заставить Reader запускаться свернутым?

Спасибо!

Ответы [ 5 ]

2 голосов
/ 08 марта 2012

После запуска процесса вы можете получить его MainWindowHandle и использовать P / Invoke , чтобы свести его к минимуму:

[DllImport("user32.dll")]
static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);

//..
ShowWindow(process.MainWindowHandle, 11);  //11 is ForceMinimized
2 голосов
/ 08 марта 2012

Попробуйте с включением /h в командной строке. Это запускает экземпляр Adobe Reader, свернутый на панель задач. Однако нет «хорошей» опции, чтобы скрыть ее полностью (насколько мне известно). Кроме взлома непредсказуемых вещей с Win32 API. Более общий подход к минимизации запуска некоторых приложений - через API. Смотрите пост Стива.

Это должно сделать:

string args = String.Format("/h /t \"{0}\" \"{1}\"", this.pdfFileName, this.printerName);
0 голосов
/ 21 февраля 2016
Process proc = new Process();
proc.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
proc.StartInfo.Verb = "print";

proc.StartInfo.FileName = @"Path of Adobe exe";
proc.StartInfo.Arguments = String.Format(@"/p /h {0}", fileToPrint);
proc.StartInfo.UseShellExecute = false;
proc.StartInfo.CreateNoWindow = true;
proc.Start();
0 голосов
/ 08 марта 2012

На самом деле вы не можете отправить документ PDF непосредственно на принтер, используя Adobe Acrobat Reader, используя код, который вы упомянули.

Вам нужен .net pdf api, который имеет функции, реализованные для печати PDF.Вы можете добавить ссылку на проект, а затем начать использовать API.Вы можете google / bing в интернете о souch apis, которые также бесплатны и просты в использовании.

0 голосов
/ 08 марта 2012

См. Это: http://www.robvanderwoude.com/commandlineswitches.php#Acrobat

Открыть файл PDF:

AcroRd32.exe PdfFile

Открыть файл PDF в новом экземпляре Adobe Reader:

AcroRd32.exe /N PdfFile

Откройте файл PDF на странице 7:

AcroRd32.exe /A "page=7=OpenActions" PdfFile

Откройте файл PDF с активной панелью навигации, уменьшите масштаб до 50%, найдите и выделите слово «пакет»:

AcroRd32.exe /A "zoom=50&navpanes=1=OpenActions&search=batch" PdfFile

Печать файла PDF с диалоговым окном:

AcroRd32.exe /P PdfFile

Печать файла PDF без вывода сообщений :

AcroRd32.exe /N /T PdfFile PrinterName [ PrinterDriver [ PrinterPort ] ]

Последняя команда откроет новый AdobeОкно Reader, распечатайте файл PDF, а затем закройте его, если только это окно не является единственным оставленным окном Adobe Reader: по крайней мере одно окно Adobe Reader останется открытым.http://partners.adobe.com/public/developer/en/acrobat/PDFOpenParameters.pdf#page=5

...