📄 writedata.cpp
字号:
#include "stdafx.h"
#include "WriteData.h"
UINT WM_MYPROCMSG;
UINT WM_MYDATAEND;
void CWriteData::StartProc(CString strProcName)
{
STARTUPINFO si;
PROCESS_INFORMATION pi;
ZeroMemory(&si, sizeof(si));
ZeroMemory(&pi, sizeof(pi));
si.cb = sizeof(si);
si.dwFlags = STARTF_USESHOWWINDOW;
si.wShowWindow = 1;
// 创建用于同步的事件对象,该对象需要手工复位,初始为无信号状态
m_hEvent = CreateEvent(NULL, TRUE, FALSE, "Proc_SynEvent");
// 定义字符串,将CString类型的字符串转换为C风格的字符串
LPTSTR strFileName = new TCHAR[strProcName.GetLength() + 1];
_tcscpy(strFileName, strProcName);
// 建立进程
CreateProcess(NULL, strFileName, NULL, NULL, FALSE,
NORMAL_PRIORITY_CLASS | CREATE_NEW_CONSOLE, NULL, NULL, &si, &pi);
WaitForSingleObject(m_hEvent, INFINITE);
//关闭刚刚建立的进程的句柄
CloseHandle(pi.hProcess);
delete strFileName;
}
int CWriteData::Run()
{
CString str("Just For Try!--No."); // 用来写入到文件中
CString strEnd("\r\n");
CString strNum("");
CString strA(str);
CString strTem("");
for(int i=0; i<3; i++)
{
// 注意这个字符串互连的写法,有点难度
strNum.Format("%d",i);
str = strTem + strA + strNum + strEnd;
strTem = str;
}
/******************************************************************************
// 创建与文件对应的内存映射
// HANDLE hFile;
// 创建或打开一个文件
//hFile = CreateFile("E:\\MyFileMap.txt", GENERIC_READ | GENERIC_WRITE, 0, NULL,
// OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
// HANDLE hFileMap = CreateFileMapping(hFile, NULL,
// PAGE_READWRITE, 0, 0, "Syn_Mapping");
******************************************************************************/
HANDLE hFileMap = CreateFileMapping((HANDLE)INVALID_HANDLE_VALUE, NULL,
PAGE_READWRITE, 0, str.GetLength()+1, "Syn_Mapping");
// 建立view将内存映射文件映射到进程的地址空间
LPVOID lpView = MapViewOfFile(hFileMap, FILE_MAP_READ | FILE_MAP_WRITE,
0, 0, 0);
// 如果对应了某一磁盘文件,则不要该语句
memcpy((BYTE*)lpView, (LPCSTR)str, str.GetLength()+1);
UnmapViewOfFile(lpView);
ResetEvent(m_hEvent);
PostMessage(HWND_BROADCAST, WM_MYPROCMSG, NULL, NULL);
WaitForSingleObject(m_hEvent, INFINITE);
CloseHandle(hFileMap);
return 0;
}
void CWriteData::ExitProc(CString strProcName)
{
// 控制另一个进程的退出
CWnd * pOtherWnd = CWnd::FindWindow(NULL, strProcName);
if(pOtherWnd)
{
pOtherWnd->PostMessage(WM_CLOSE, NULL , NULL);
}
if(NULL != m_hEvent)
{
CloseHandle(m_hEvent);
}
//CloseHandle(m_hEvent);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -