2010-09-21 2 views
2

Зная hwnd окна, как я могу прочитать его содержимое? Прежде чем кто-нибудь спросит меня, я пытаюсь получить текст, который использовался в окне Communicator.Как читать содержимое экрана из другого приложения [Office Communicator]

Ниже приведен код, который я нашел в Интернете. Код не мой.

using System; 
using System.Collections.Generic; 
using System.Text; 
using System.Runtime.InteropServices; 

namespace EventFun 
{ 
class EventHookUp 
{ 
    CommunicatorAPI.Messenger mCommunicator = null; 

    static void Main(string[] args) 
    { 
     EventHookUp hu = new EventHookUp(); 
     hu.InitializeEventHocks(); 
     Console.ReadKey(); 
    } 

    public void InitializeEventHocks() 
    { 
     mCommunicator = new CommunicatorAPI.Messenger(); 
     mCommunicator.OnIMWindowCreated += new CommunicatorAPI.DMessengerEvents_OnIMWindowCreatedEventHandler(mCommunicator_OnIMWindowCreated); 
     mCommunicator.OnIMWindowDestroyed += new CommunicatorAPI.DMessengerEvents_OnIMWindowDestroyedEventHandler(mCommunicator_OnIMWindowDestroyed); 
    } 

    void mCommunicator_OnIMWindowCreated(object pIMWindow) 
    { 
     CommunicatorAPI.IMessengerConversationWndAdvanced stpIMWindow = pIMWindow as CommunicatorAPI.IMessengerConversationWndAdvanced; 
     //stpIMWindow.History; 
     long Hwnd = (long)stpIMWindow.HWND; 
     Console.WriteLine("New IM Window Created : {0}", Hwnd); 

     CommunicatorAPI.IMessengerContacts contactList = (CommunicatorAPI.IMessengerContacts)stpIMWindow.Contacts; 
     StringBuilder sb = new StringBuilder(); 
     foreach (CommunicatorAPI.IMessengerContact imc in contactList) 
     { 
      sb.Append(imc.FriendlyName); 
      sb.Append(Environment.NewLine); 
     } 
     Console.WriteLine(sb.ToString()); 
    } 

    void mCommunicator_OnIMWindowDestroyed(object pIMWindow) 
    { 
     Console.WriteLine("IM Window Destroyed."); 
    } 
} 
} 
+1

Первый удар по Google ведет к документации API: http://msdn.microsoft.com/en -us/library/bb758727 (v = office.12) .aspx вы могли бы получить необходимую информацию, запросив API, вместо того, чтобы пытаться найти общий метод чтения текста из других окон. –

+0

@Albin Sunnanbo Я могу искать снова, но как далеко не нашел ранее исследованный. Конечно, не отправляйте вопрос, не обращаясь сначала к ответу. Фактически, параллельно этому вопросу, я продолжаю свои исследования. Спасибо –

ответ

3

Похоже, вы пытаетесь получить историю текста беседы из окна беседы? Если да, то George Durzi имеет отличный blog post.

+0

Друг, это было именно то, что я хотел, и никто не отвечал мне. Тем не менее, я проверю, есть ли у меня источники моего проекта, и я попытаюсь реализовать код, описанный в сообщении. Любые поздравления за помощь. успех –

1

В этом блоге нет, я ниже метод, чтобы получить историю разговора:

object obj = msgrAdv.StartConversation(
    CONVERSATION_TYPE.CONVERSATION_TYPE_IM, // Type of conversation 
    sipUris, // object array of signin names for having multiple conversations or just a string 
    null, 
    "Test", 
    "1", 
    null); 

imWindowHandle = long.Parse(obj.ToString()); 

if (imWindow == null) //If there is already an open window... 
{ 
    imWindow = (IMessengerConversationWndAdvanced)msgrAdv.InstantMessage(sipUris); 
} 
//else there was no open window, we have opened the window using "msgrAdv.StartConversation" so there is a imWindow associated which is implemented in communicator_OnIMWindowCreated. 
//and then... 
string history = imWindow.History;