2
這是可能的重複。找不到確切的一個,我記得經歷了很久很久以前。如何以編程方式在運行對象表中註冊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
來獲得運行實例。但是,只有當單詞app失去焦點時(如msdn所記錄),纔會在運行的對象表中註冊一個打開的Word應用程序。如果我有與我在一起的流程,如何手動在ROT中註冊Word應用程序?下面
//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調用編程方式迫使焦點從打開的Word窗口離開,然後把它帶回來,但那是一塌糊塗。
任何正常的註冊方式?
所以沒有解決這個問題?你可以發佈你正在使用的其他選擇嗎? – 2017-12-18 05:59:32
@AniketBhansali對不起,我現在不記得:( – nawfal 2017-12-18 06:03:44