?? 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 + -