如何让我的c#程序从其他应用程序获取数据?
假设应用程序是,例如,“Yahoo Messenger”,并且有人在聊天框中对你说“你好”......
现在,我希望我的c#程序能够从我的应用程序中打印出来的“Yahoo Messenger聊天框”中读取/获取该数据或信息吗?有可能吗?
答案 0 :(得分:4)
您需要使用visual studio工具名称SPY ++来了解win32 api的流程。
之后参考这些链接
Get text from another application
在实施部分代码后,请重新发布与编程相关的更具体的问题
答案 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#数据结构。