⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 writedata.cpp

📁 Visual C++高级编程及其项目应用开发(含源代码)
💻 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 + -