一 剪贴板
1 函数接口
// 打开剪贴板
BOOL OpenClipboard(
HWND hWndNewOwner
);
// 清空剪贴板
BOOL EmptyClipboard(void);
// 分配内存对象
int GlobalAlloc(int flags, int size);
// 加锁内存对象
LPVOID GlobalLock(int handle);
// 解锁内存对象
bool GlobalUnLock(int handle);
// 关闭剪贴板
BOOL CloseClipboard(void);
// 设置剪贴板数据
HANDLE SetClipboardData(
UINT uFormat,
HANDLE hMem
);
// 读取剪贴板数据
HANDLE GetClipboardData(
UINT uFormat
);
2 实例
// 往剪贴板,写数据;
void CClipboardDlg::OnBtnSend()
{
// 打开剪贴板
if(OpenClipboard())
{
CString str;
GetDlgItem(IDC_EDIT_SEND, str); // 保存发送编辑框控件上的数据
// 清空剪贴板
EmptyClipboard();
// 分配内存对象,并填充内存
HANDLE hClip = GlobalAlloc(GMEM_MOVEABLE, str.GetLength() + 1);
char * pBuf = (char *)GlobalLock(hClip);
strcpy(pBuf, str);
GlobalUnlock(hClip);
// 设置剪贴板数据
SetClipboardData(CF_TEXT, hClip);
// 关闭剪贴板
CloseClipboard();
}
}
// 从剪贴板,读数据
void CClipboardDlg::OnBtnRecv()
{
// 打开剪贴板
if(OpenClipboard())
{
// 是否,有可读数据
if(IsClipboardFormateAvailable(CF_TEXT)){
// 读取剪贴板数据
HANDLE hClip = GetClipboardData(CF_TEXT);
char * pBuf = (char*)GlobalLock(hClip);
GlobalUnlock(hClip);
// 显示
SetDlgItemText(IDC_EDIT_RECV, pBuf);
}
// 关闭剪贴板
CloseClipboard();
}
}
二 匿名管道
1 接口函数
// 创建管道
BOOL CreatePipe(
PHANDLE hReadPipe,
PHANDLE hWritePipe,
LPSECURITY_ATTRIBUTES lpPipeAttributes,
DWORD nSize
);
// 创建进程
BOOL CreateProcessA(
LPCSTR lpApplicationName,
LPSTR lpCommandLine,
LPSECURITY_ATTRIBUTES lpProcessAttributes,
LPSECURITY_ATTRIBUTES lpThreadAttributes,
BOOL bInheritHandles,
DWORD dwCreationFlags,
LPVOID lpEnvironment,
LPCSTR lpCurrentDirectory,
LPSTARTUPINFOA lpStartupInfo,
LPPROCESS_INFORMATION lpProcessInformation
);
// 读数据
BOOL ReadFile(
HANDLE hFile,
LPVOID lpBuffer,
DWORD nNumberOfBytesToRead,
LPDWORD lpNumberOfBytesRead,
LPOVERLAPPED lpOverlapped
);
// 写数据
BOOL WriteFile(
HANDLE hFile