用剪贴板进行通信的疑问

sizheng0320 2007-06-05 10:33:34
用剪贴板进行进程间通信,是不是会影响到系统正常的使用啊?


比如,进行通信的两个进程一直在运行,一直在通过剪贴板通信,那其它的程序,如WORD等,它们的复制粘贴功能是不是会受到影响呢?
...全文
283 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
lyg_zy 2007-06-11
  • 打赏
  • 举报
回复
WM_COPYDATA消息比较简单
lyg_zy 2007-06-11
  • 打赏
  • 举报
回复
如果数据少的话,也可以通过发消息。
lyg_zy 2007-06-11
  • 打赏
  • 举报
回复
已测试,以下代码是会清空系统剪贴板的.
::OpenClipboard(m_hWnd);
EmptyClipboard();
CloseClipboard();
所以建议不要通过剪贴板来进行数据通信。用内存映射文件比较好。
大体步骤如下:(没有测试)

1:定义一数据交换结构
struc sData
{
int a;
int b;
};

2:进程一进行读写数据
HANDLE hMapFile;

hMapFile = CreateFileMapping(hFile, // current file handle
NULL, // default security
PAGE_READWRITE, // read/write permission
0, // max. object size
0, // size of hFile
"MyFileMappingObject"); // name of mapping object

sData *lpMapAddress;
lpMapAddress = MapViewOfFile(hMapFile, // handle to mapping object
FILE_MAP_ALL_ACCESS, // read/write permission
sizeof(sData), // max. object size
sizeof(sData), // size of hFile
0); // map entire file


(2)进程2进行读写数据
HANDLE hMapFile;
sData * lpMapAddress;

hMapFile = OpenFileMapping(FILE_MAP_ALL_ACCESS, // read/write permission
FALSE, // Do not inherit the name
"MyFileMappingObject"); // of the mapping object.

lpMapAddress = MapViewOfFile(hMapFile, // handle to mapping object
FILE_MAP_ALL_ACCESS, // read/write permission
sizeof(sData), // max. object size
sizeof(sData), // size of hFile
0); // map entire file
eduyu 2007-06-09
  • 打赏
  • 举报
回复
打错了,是一个桌面一个,如果一定要用,把互相通讯的线程创建到一个虚拟的桌面上用。
eduyu 2007-06-09
  • 打赏
  • 举报
回复
肯定,一个window station只有一个clipboard。
sizheng0320 2007-06-07
  • 打赏
  • 举报
回复
有人试过吗?
  • 打赏
  • 举报
回复
看介绍
BOOL OpenClipboard( HWND hWndNewOwner );
[in] Handle to the window to be associated with the open clipboard. If this parameter is NULL, the open clipboard is associated with the current task.
和窗口相关联的吧

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧