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

时间:2011-10-12 06:32:51

标签: c# exe

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

假设应用程序是,例如,“Yahoo Messenger”,并且有人在聊天框中对你说“你好”......

现在,我希望我的c#程序能够从我的应用程序中打印出来的“Yahoo Messenger聊天框”中读取/获取该数据或信息吗?有可能吗?

3 个答案:

答案 0 :(得分:4)

您需要使用visual studio工具名称SPY ++来了解win32 api的流程。

之后参考这些链接

Get text from another application

http://www.dreamincode.net/forums/topic/66140-scraping-the-text-from-another-application-with-win32-api/

在实施部分代码后,请重新发布与编程相关的更具体的问题

答案 1 :(得分:2)

如果该应用程序(例如Yahoo Messenger)为其他应用程序提供访问其信息的接口(例如:COM),那将很容易。

如果没有,您将不得不通过Windows API,捕获文本所在的确切窗口的句柄。

你知道你的其他应用是什么吗?

编辑: 查看此雅虎答案。有人提出了同样的问题,答案中提供的链接可能会对您有所帮助:http://answers.yahoo.com/question/index?qid=20081126161509AAhr6Dz

Yahoo Answers发布内容:

  

我建议看看libpurple。这是一个支持Yahoo的通用IM后端。它由Pidgin IM客户端使用,等等。

     

但请注意,libpurple是一个C ++库,因此您必须调用本机代码。

答案 2 :(得分: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#数据结构。