Как программно зарегистрировать экземпляр Word в таблице запущенных объектов?

Это возможный дубликат. Не могу найти точного, я помню, как проходил один такой давний раз.

Инструменту нужна возможность обнаруживать, открыт ли какой-либо файл MS Word где-либо с компьютера. Итак, мы используем наблюдатель процесса, например так:

string query = "SELECT TargetInstance FROM __Instance" + Event + "Event WITHIN 0.5 " +
               "WHERE TargetInstance ISA 'Win32_Process' AND TargetInstance.Name = '" + processName + "'";

string scope = @"\\.\root\CIMV2";

//Create a watcher and listen for events
watcher = new ManagementEventWatcher(scope, query);
watcher.EventArrived += eventHandler;
watcher.Start();

Теперь, что бы это ни было, вот сложная часть: мне нужно получить экземпляр автоматизации слова текущего открытого процесса WINWORD. Поэтому я использую Marshal.GetActiveObject чтобы получить работающий экземпляр. Но открытое приложение Word регистрируется в таблице запущенных объектов только в том случае, если приложение word теряет фокус (как задокументировано msdn). Как мне вручную зарегистрировать слово application в ROT, если у меня есть процесс со мной? Некоторый псевдокод ниже

//process started
private void ProcessStarted(object sender, EventArrivedEventArgs e)
{
     // Marshal.GetActiveObject fails since there is no object yet.
     // Process.GetProcessesByName("WINWORD") got it.
     // now how to register this word process to ROT?
     // so that I have a global instance of word application?
}

Примечание: я могу с некоторыми тяжелыми вызовами API программным образом отвести фокус от открытого окна слова и затем вернуть его обратно, но это полный беспорядок.

Любой нормальный способ регистрации?

1 ответ

Решение

Насколько я знаю, невозможно зарегистрировать объекты другого приложения в ROT без его прямого взаимодействия. Таблица не отслеживает процессы, она отслеживает фабрики классов и связанные с ними названия. Чтобы что-то зарегистрировать в ROT, вам нужен указатель IUnknown, который вы не получите напрямую от Word.

Другие вопросы по тегам