Как закрыть Pdf файлы из C # - PullRequest
1 голос
/ 21 марта 2012

Я пытаюсь открыть 2 файла PDF в Adobe Reader из моего кода C #.Позволяет называть их A и B, а A открывается раньше B.

Теперь, когда я пытаюсь уничтожить процесс, связанный с файлом A, файл B также закрывается, потому что они связаны с одним и тем же процессом.Есть ли способ закрыть файл A, не закрывая файл B.

Также, когда я впервые пытаюсь завершить процесс, связанный с файлом B, ничего не происходит, и файл B по-прежнему остается открытым.

Как следуетЯ решаю два вышеупомянутых сценария.

У меня есть дескриптор обоих файлов.Есть ли способ, которым я могу закрыть ручку

Ответы [ 4 ]

3 голосов
/ 21 марта 2012

Похоже, вы должны использовать Interactionlication Communication API для Acrobat, который имеет возможность открывать и закрывать документы.То, что вы делаете, довольно нелегко по сравнению с тем, что вы можете получить с IAC ( pdf документация здесь ).

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

Вы можете найти процесс просмотра PDF из A, используя следующий код.

using System.Diagnostics;

public bool FindAndKillProcess(string name)
{
    //here we're going to get a list of all running processes on
    //the computer
    foreach (Process clsProcess in Process.GetProcesses()) {
        //now we're going to see if any of the running processes
        //match the currently running processes by using the StartsWith Method,
        //this prevents us from incluing the .EXE for the process we're looking for.
        //. Be sure to not
        //add the .exe to the name you provide, i.e: NOTEPAD,
        //not NOTEPAD.EXE or false is always returned even if
        //notepad is running
        if (clsProcess.ProcessName.StartsWith(name))
        {
            //since we found the proccess we now need to use the
            //Kill Method to kill the process. Remember, if you have
            //the process running more than once, say IE open 4
            //times the loop thr way it is now will close all 4,
            //if you want it to just close the first one it finds
            //then add a return; after the Kill
            clsProcess.Kill();
            //process killed, return true
            return true;
        }
    }
    //process not found, return false
    return false;
}

затем вызовите метод выше.

FindAndKillProcess("AcroRd32.exe");

чтобы можно было завершить процесс просмотра PDF.

0 голосов
/ 19 января 2017

TRY:
if (clsProcess.ProcessName. Содержит (имя))

ВМЕСТО:
if (clsProcess.ProcessName. StartsWith (name))

using System.Diagnostics;

  public bool FindAndKillProcess(string name)
        {
            foreach (Process clsProcess in Process.GetProcesses())
            {
                if (clsProcess.ProcessName.Contains(name))
                {
                    //To know if it works
                    //MessageBox.Show(clsProcess);
                    clsProcess.Kill();
                    return true;
                }
            }
            //process not found, return false
            return false;
        }

////// call the function:

            FindAndKillProcess("AcroRd32");

////// if you have been saved all the variables also you can close you main form

            FindAndKillProcess("Form_Name");
0 голосов
/ 21 марта 2012

Я думаю, что один из способов сделать это - найти этот экземпляр программы и закрыть его из вашего приложения.Вот пример того, как найти окно и закрыть его: http://www.mycsharpcorner.com/Post.aspx?postID=32

Поскольку у вас открыто 2 экземпляра Adobe Reader, вы захотите определить, какой именно.Вы можете искать по тексту в рамке.Если у вас есть копия spy ++ (или аналогичной альтернативы), это значительно облегчает работу с внешними компонентами графического интерфейса, потому что вы можете многое узнать об этом окне, включая его имя, дескриптор окна и многое другое.

...