如何从另一个独立应用程序中获取数据使用 C#?

6

我该如何让我的C#程序从其他应用程序中获取数据?

假设这个应用程序是"Yahoo Messenger",有人在聊天框里跟你打招呼说"嗨!"...

现在,我想让我的C#程序读取/获取"Yahoo Messenger聊天框"中的数据或信息,并将其打印在我的应用程序上,这样是否可行?


1
想到网络服务了吗?ASP.Net Webservices - Waqas Raja
WCF可以使用进程/机器级别的连接,这是一种选择。 - CodingBarfield
3个回答

4

2
如果该应用程序(例如Yahoo Messenger)提供一个接口(例如COM)供其他应用程序访问其信息,那么这将很容易。
如果没有,您将不得不通过Windows API来捕获确切窗口的句柄以及所有文本。
你有任何关于你的其他应用程序的想法吗?
编辑: 查看这个雅虎回答。有人问了同样的问题,也许答案中提供的链接会对您有所帮助:http://answers.yahoo.com/question/index?qid=20081126161509AAhr6Dz 雅虎回答内容:
我建议查看libpurple。这是一个通用的即时消息后端,支持Yahoo。它被Pidgin IM客户端等使用。
但请注意,libpurple是一个C++库,因此您必须调用本地代码。

这是我所说的另一个应用程序...链接:[link]http://www.4shared.com/file/dxVnsMHC/Topaz_Chat.html - user848682

1
如果你可以控制“那个应用程序”(例如Yahoo messenger),你可以使用winapi创建一个共享内存:
    LPSECURITY_ATTRIBUTES lpAtt=NULL;

    HANDLE INVALID_FILE_HANDLE=(HANDLE)0xFFFFFFFF; //Memory handle
    hMapFile=::CreateFileMapping(INVALID_FILE_HANDLE,
    lpAtt,PAGE_READWRITE, 0,nSize, SharedMemName);
    if (hMapFile == NULL) 
    { 
        ShowSomeMessageBox("Could not create shared memory");
        return NULL;
    }

    LPTSTR pBuf = (LPTSTR) MapViewOfFile(hMapFile, FILE_MAP_ALL_ACCESS,0,0,nSize);
    if(NULL==pBuf) 
    {
        ShowSomeMessageBox("Could not create mapped view of theshared memory");
        return NULL;
}

一旦您拥有了该缓冲区,您可以使用CopyMemory或任何api向其写入数据。

在您的C#应用程序中,您可以使用Interop(P-invoke)调用WinAPI:

使用: OpenFileMapping(),MapViewOfFile() 等打开共享内存

使用: Marshal.ReadInt32(),Marshal.StructureToPtr() 等将数据读取到您的C#数据结构中。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接