Как прочитать содержимое экрана из другого приложения [Office Communicator] - PullRequest
2 голосов
/ 22 сентября 2010

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

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

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.");
    }
}
}

Ответы [ 2 ]

3 голосов
/ 25 октября 2010

Похоже, вы пытаетесь получить историю разговора из окна разговора?Если это так, Джордж Дурзи имеет превосходное сообщение в блоге по этому вопросу.

1 голос
/ 30 мая 2013

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

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;
...