簡體   English   中英

如何以編程方式在運行對象表中注冊Word實例?

[英]how to programmatically register Word instance in running object table?

這可能是重復的。 找不到確切的那個,我記得經歷了這么長時間。

該工具需要具有檢測在計算機上任何位置是否打開任何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應用程序失去焦點時,該應用程序才會在運行的對象表中注冊(如msdn所述)。 如果我有此過程,如何在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調用以編程方式將焦點移離打開的單詞窗口,然后將其移回原處,但這就是一團糟。

有正常的注冊方式嗎?

據我了解,沒有ROT的直接合作,就無法在ROT中注冊另一個應用程序的對象。 該表不跟蹤流程,而是跟蹤類工廠及其關聯的綽號。 為了在ROT中注冊某些內容,您需要它的IUnknown指針,而您不會直接從Word中獲得該指針。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM