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