Как я могу узнать, что другой экземпляр Word работает вне моего приложения? - PullRequest
0 голосов
/ 14 апреля 2019

Я хочу разработать приложение для Windows на C #, управляющее документами Word.Я хочу признать, что другое приложение Word открывается другим способом (например, из меню Пуск Windows), и я хочу создать предупреждение об этом.

Пользователь может открыть документы Word из главного окна этого приложения, например, так:жестко запрограммированный тест, запущенный при нажатии кнопки теста:

myApp = new Word.Application();
Word.Document mydoc1 = myApp.Documents.Open("C://test/doc1.docx");
Word.Document mydoc2 = myApp.Documents.Open("C://test/doc2.docx");

Пользователь может перетаскивать тексты или изображения из дерева в главном окне этого приложения в эти открытые документы (без проблем).

Нокогда пользователь открывает новое приложение Word другим способом, чем в этом приложении (например, из меню «Пуск» или дважды щелкнул WINWORD.EXE и т. д.), работа с этим приложением очень запутанная, поскольку перетаскивание работает правильно только на управляемыхдокументы, открытые этим приложением.

Я решаю это с помощью инструкции для пользователя, что «никакое другое приложение Word не должно быть запущено», и приложение будет предупреждать об этой ситуации.

Я обнаружил, что проверка при запуске приложения проста (что-то вроде этого):

foreach (Process lP in Process.GetProcesses())
            {
                if (lP.ProcessName == "WINWORD")
                {
                    MessageBox.Show("Word is running, close please");
                    return;
                }
            }

Но я не знаю, как распознать ситуацию, когда новое другое Слово открывается впоследствиикогда мое приложение уже запущено.Я думаю, что эта проверка будет периодически запускаться при некоторой отметке времени, но я не знаю, как распознать «мое приложение Word», запущенное моим приложением, из второго «приложения чужого слова», запущенного снаружи.

1 Ответ

0 голосов
/ 17 апреля 2019

Я принял это решение:

При включении таймера этот метод запускается:

{
            int s;
            Process[] mps = Process.GetProcessesByName(aName);
            s= mps.Length;
            mps.ToList().ForEach(p => p.Dispose());
            return s;
}

Я думаю, что это простое решение.

Я уважаю это не очень хорошее решение :). (... извини, Джими, но спасибо за предупреждение о памяти, по мнению Google, ты прав).

Кто-нибудь видит скрытые проблемы?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...