版权声明 请尊重原创作品。转载请保持文章完整性,并以超链接形式注明原始作者“tingsking18”和主站点地址,方便其他朋友提问和指正。 1.使用共享内存 代码如下: view plaincopy to clipboardprint? 01.void FileMapping(void) 02.{ 03. //打开共享的文件对象。 04. m_hMapFile = ::OpenFileMapping(FILE_MAP_ALL_ACCESS, FALSE,_T("TestFileMap")); 05. if (m_hMapFile) 06. { 07. //显示共享的文件数据。 08. LPTSTR lpMapAddr = (LPTSTR)MapViewOfFile(m_hMapFile,FILE_MAP_ALL_ACCESS,0,0,0); 09. OutputDebugString(lpMapAddr); 10. } 11. else 12. { 13. //创建共享文件。 14. m_hMapFile = ::CreateFileMapping((HANDLE)0xFFFFFFFF, NULL, PAGE_READWRITE, 0, 1024, "TestFileMap"); 15. //拷贝数据到共享文件里。 16. LPTSTR lpMapAddr = (LPTSTR)MapViewOfFile(m_hMapFile,FILE_MAP_ALL_ACCESS,0,0,0); 17. 18. StrCpy(lpMapAddr,"TestFileMap"); 19. FlushViewOfFile(lpMapAddr,12+1); 20. } 21.} 注意:使用完成共享内存后,要删除共享内存,否则会生成很多临时文件。 UnmapViewOfFile(m_hMapFile) 2.使用dll在进程间共享内存 #pragma data_seg (".IdleUI") // you must define as SHARED in .def HHOOK g_hHookKbd = NULL; // one instance for all processes HHOOK g_hHookMouse = NULL; // one instance for all processes DWORD g_dwLastInputTick = 0; // tick time of last input event #pragma data_seg () 然后在def文件中定义:SECTIONS .IdleUI READ WRITE SHARED 注意:共享数据必须初始化,否则微软编译器会把没有初始化的数据放到.BSS段中,从而导致多个进程之间的共享行为失败。 3.使用WM_COPYDATA在窗体程序间传递消息。 发送的时候的代码如下:WM_COPYDATA消息主要目的是允许在进程间传递只读数据。SDK文档推荐用户使用SendMessage函数,接受方在数据拷贝完成前不返回,这样发送方就不可能删除和修改数据: view plaincopy to clipboardprint? 01.HWND hWnd=::FindWindow(NULL,"b"); 02.if(hWnd!=NULL) 03.{ 04. COPYDATASTRUCT cpd; /*给COPYDATASTRUCT结构赋值*/ 05. cpd.dwData = 0; 06. cpd.cbData = strlen("字符串"); 07. cpd.lpData = (void*)"字符串"; 08. ::SendMessage(hWnd,WM_COPYDATA,NULL,(LPARAM)&cpd);//发送! 09.} 接收的时候: afx_msg BOOL OnCopyData(CWnd* pWnd, COPYDATASTRUCT* pCopyDataStruct); BOOL CMyDlg::OnCopyData(CWnd* pWnd, COPYDATASTRUCT* pCopyDataStruct) { // TODO: Add your message handler code here and/or call default AfxMessageBox((LPCSTR)(pCopyDataStruct->lpData));/*利用对话框表示收到消息*/ return CDialog::OnCopyData(pWnd, pCopyDataStruct); } 4.调用ReadProcessMemory以及WriteProcessMemory函数. 调用ReadProcessMemory以及WriteProcessMemory函数用户在发送进程中分配一块内存存放数据,调用GlobalAlloc或VirtualAlloc函数实现: pApp->m_hGlobalHandle=GlobalAlloc(GMEM_SHARE,1024); 可以得到指针地址: pApp->mpszGlobalHandlePtr=(LPSTR)GlobalLock (pApp->m_hGlobalHandle); 在接收进程中要用到用户希望影响的进程的打开句柄。为了读写另一进程,按如下方式调用OpenProcess函数: HANDLE hTargetProcess=OpenProcess( STANDARD_RIGHTS_REQUIRED| PROCESS_VM_REDA| PROCESS_VM_WRITE| PROCESS_VM_OPERATION,//访问权限 FALSE,//继承关系 dwProcessID);//进程ID 为保证OpenProcess函数调用成功,用户所影响的进程必须由上述标志创建。 用户获得一个进程的有效句柄,就可调用ReadProcessMemory函数读取该进程的内存: BOOL ReadProcessMemory( HANDLE hProcess, // 进程指针 LPCVOID lpBaseAddress, // 数据块的首地址 LPVOID lpBuffer, // 读取数据所需缓冲区 DWORD cbRead, // 要读取的字节数 LPDWORD lpNumberOfBytesRead ); 使用同样的句柄也可以写入该进程的内存: BOOL WriteProcessMemory( HANDLE hProcess, // 进程指针 LPVOID lpBaseAddress, // 要写入的首地址 LPVOID lpBuffer, // 缓冲区地址 DWORD cbWrite, // 要写的字节数 LPDWORD lpNumberOfBytesWritten ); 本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/tingsking18/archive/2009/04/13/4069576.aspx
分享到:
相关推荐
Windows进程间通信
Windows进程之间是相互独立的,通过Windows消息机制,我们可以在进程之间进行通信,适合一台电脑的windows平台下进行消息交换,该例是两个winform之间通过windows消息发送和接收数据。 1、进程间通信 2、SendMessage...
windows内存共享进程间通信
进程间通讯大全
在windows下实现进程间的通信,通过内存文件映射实现数据通信,通过信号量进行同步,通过线程池实现数据的异步处理,实现多个进程间的高速数据通信
Windows下实现进程间通信。 用于操作系统课程。 功能简单,代码简短、清晰。 适合初学者理解进程间通信的实现。
利用管道进行进程间的通信,运用windows API函数建立父进程和子进程通过本地qq进行通信
适合学习进程间通信机制,对比windows、linux两大主流操作系统,讲解很好
Windows 下的进程间通信
一个例子:通过Windows窗口消息实现 QT进程间通信,实现消息在进程间互发
共享内存方式实现进程间通信。详细看我的博客:http://blog.csdn.net/pengguokan/article/details/8921346
danny_share博客Windows进程间通信配套源码,本工程主要描述进程的创建和关闭方式。
进程间通信之消息队列 ( message queue ) 消息队列是消息的链表,具有特定的格式,并由消息队列标识符标识. 七种进程间通信方式: 一.无名管道( pipe ) 二.有名管道( fifo ) 三.共享内存 ( shared memory ) 四....
Windows下的进程间通信
进程间通信,让你清晰了解进程间的通信原理
Windows 的IPC(进程间通信)机制主要是异步管道和命名管道。(至于其他的IPC方式,例如内存映射、邮槽等这里就不介绍了) 管道(pipe)是用于进程间通信的共享内存区域。创建管道的进程称为管道服务器,而连接到这...
windows每个内核对象都可以用一个HANDLE 来进行索引,本实例利用管道实现Console输出重定向的功能,简单易学,解释了父子进程间内核对象句柄继承的原理。 代码编译运行后,ping的输出将保存到"C:\test_console_...
通过 DDEML 开发 Windows 进程间通信 的 C/C++ 示例程序代码
通过对进程间通信同步/互斥问题的编程实现,加深理解信号量和 P、V 操作的原理; 对 Windows 或 Linux 涉及的几种互斥、同步机制有更进一步的了解;熟悉 Windows 或 Linux 中定义的与互斥、同步有关的函数。
描述了在windows下多进程通信的多种方式,如:管道、邮件槽等