2012-03-08 20 views
5

Uruchamiam program Reader 10.0, aby wysłać plik PDF na drukarkę z programu C# w systemie Win 7. Oto, co robię teraz:Uruchamianie programu Acrobat Reader 10.0 z C#: jak zminimalizować?

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); 

zauważyłem, że uruchomienie Reader tak (lub z wiersza poleceń) faktycznie rozpoczyna 2 AcroRd32.exe wykonywalne. Żadne z nich nie jest zminimalizowane. Próbowałem również ProcessWindowStyle.Hidden z tym samym wynikiem.

Czy istnieje sposób zmuszenia Czytnika do zminimalizowania?

Dzięki!

+0

Czy mógłbyś opublikować bardziej kompletną próbkę (Jak to nazywasz tę funkcję i stąd) Ponieważ ostatnio zrobiłem to samo na Win 7 i miałem tylko 1 instancję działającą. – Alex

Odpowiedz

2

Spróbuj z wtapianiem /h w linii poleceń. Spowoduje to uruchomienie instancji Adobe Reader zminimalizowanej do paska zadań. Nie ma jednak "miłej" opcji, aby ją całkowicie ukryć (według mojej wiedzy). Oprócz zhakowania nieprzewidywalnych rzeczy z Win32 API. Bardziej ogólne podejście do uruchamiania niektórych aplikacji jest ograniczone do API. Zobacz post Steve'a.

ten powinien zrobić:

string args = String.Format("/h /t \"{0}\" \"{1}\"", this.pdfFileName, this.printerName); 
+0

Wypróbowałem to wcześniej - nie działało –

2

Po uruchomieniu procesu, można uzyskać MainWindowHandle z nim i używać P/Invoke aby go zminimalizować:

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

//.. 
ShowWindow(process.MainWindowHandle, 11); //11 is ForceMinimized 
+1

Dlaczego miałbyś używać Win32 API, gdy jest wbudowana funkcja Adobe, aby go zminimalizować :)? – Alex

+0

@Alex, jeśli kiedykolwiek chce, aby to było bardziej ogólne, Win32 API jest drogą do zrobienia. Z pewnością parametr będzie działał dla Adobe, ale co, jeśli potrzebuje go do pracy z FoxIt lub inną aplikacją? –

+0

Z pewnością skorzystam z rozwiązania Win Api, a nie params ... – squelos

0

Zobacz to: http://www.robvanderwoude.com/commandlineswitches.php#Acrobat

Otwórz plik PDF:

AcroRd32.exe PdfFile 

otworzyć plik PDF w nowym przykład Adobe Reader:

AcroRd32.exe /N PdfFile 

otworzyć plik PDF na stronie 7:

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

Otwórz plik PDF z Okienko nawigacji aktywny, pomniejszyć do 50%, a poszukiwaniu i podkreślić słowo "partia":

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

wydrukować fil PDF e z okna:

AcroRd32.exe /P PdfFile 

wydrukować plik PDF cicho:

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

Ostatnia komenda powoduje otwarcie nowego okna Adobe Reader, wydrukować plik PDF a następnie wypowiedzieć okno chyba tego okna dzieje się tak, że zostało tylko jedno okno Adobe Reader: co najmniej jedno okno Adobe Reader pozostanie otwarte.

Edit: http://partners.adobe.com/public/developer/en/acrobat/PDFOpenParameters.pdf#page=5

0

rzeczywiście nie można wysłać dokument PDF bezpośrednio do drukarki za pomocą programu Adobe Acrobat Reader przy użyciu kodu masz wspomniałem.

Potrzebne jest.net pdf api, który ma funkcjonalność wdrożoną do drukowania pdf. możesz dodać odwołanie do projektu, a następnie zacząć korzystać z api. możesz google/bing w Internecie o souch apis, które są również bezpłatne i łatwe w użyciu.

+0

Robię to całkiem pomyślnie.Jedynym problemem jest denerwujące okno czytnika, które wyskakuje i które staram się zminimalizować –

+0

Ok, Ponieważ AcroRd32.exe nadal działa po wydrukowaniu można użyć klasy Process, aby uruchomić procesy według nazwy AcroRd32.exe przy użyciu Process.GetProcessesByName ("AcroRd32.exe") i zabić je, wywołując metodę Kill instancji klasy Process. Pamiętaj, metoda Process.GetProcessesByName daje ci tablicę instancji procesu, więc musisz wykonać pętlę i zabić proces, wywołując metodę Kill – Uday0119

+0

Robię to już jest. Po prostu próbuję uniknąć wyskakującego okienka, gdy proces zostanie uruchomiony –

0
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(); 
Powiązane problemy