2012-02-29 4 views
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을 사용하여 실행중인 인스턴스를 가져옵니다. 그러나 열려있는 Word 응용 프로그램은 word app가 포커스를 잃는 경우에만 실행중인 개체 테이블에 등록됩니다 (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와 프로그래밍 멀리 열 단어 창에서 초점을 강제하고 그것을 돌려 보내야하지만, 그게 전부 완전한 혼란 호출 할 수 있습니다.

일반적인 등록 방법은 무엇입니까?

+0

이렇게 해결책이 없습니까? 대신 다른 대안을 게시 할 수 있습니까? –

+0

@AniketBhansali 죄송합니다. 지금은 기억이 안납니다. ( – nawfal

답변

1

내가 아는 한 직접적인 협력없이 ROT에 다른 응용 프로그램의 개체를 등록 할 방법이 없습니다. 테이블은 프로세스를 추적하지 않으며 클래스 팩토리와 관련 모니 커를 추적합니다. ROT에 뭔가를 등록하려면 IUnknown 포인터가 필요합니다.이 포인터는 Word에서 직접 가져올 게 아닙니다.

관련 문제