#include <Windows.h>
#include "resource.h"
wchar_t data[1000];
HWND childHwnd;
HANDLE hmap = NULL;
LPVOID lpdata = NULL;
HWND win = NULL;
LRESULT CALLBACK WinMainProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM LParam);
INT_PTR CALLBACK DlgProc(HWND hdlg, UINT msg, WPARAM wParam, LPARAM lParam);
HINSTANCE hgapp; //当前应用程序句柄
int WINAPI WinMain(HINSTANCE hThisApp, HINSTANCE hPrevApp, LPSTR lpCmd, int nShow)
{
LPCWSTR title = L"Father_Process";
WNDCLASS wc = { sizeof(WNDCLASS) };
wc.hbrBackground = (HBRUSH)COLOR_WINDOW;
wc.hInstance = hThisApp;
wc.lpfnWndProc = WinMainProc;
wc.lpszClassName = title;
wc.style = CS_HREDRAW | CS_VREDRAW;
RegisterClass(&wc);
HWND hwnd = CreateWindow(title, L"Father_Process", WS_OVERLAPPEDWINDOW,50, 50, 320, 240, NULL, NULL, hThisApp, NULL);
if (!hwnd)
return 0;
hgapp = hThisApp;
ShowWindow(hwnd, nShow);
UpdateWindow(hwnd);
MSG msg;
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return 0;
}
LRESULT CALLBACK WinMainProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM LParam)
{
HWND hdlg = NULL;
switch (msg)
{
case WM_CREATE:
hdlg = CreateDialog(hgapp, MAKEINTRESOURCE(WIN), hwnd, (DLGPROC)DlgProc);
if (hdlg)
{
win = hdlg;
ShowWindow(hdlg, SW_NORMAL);
}
return 0;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
case LB_ADDSTRING:
{
SendMessage(GetDlgItem(win,SHOWCHAT), msg, wParam, LParam);
return 0;
}
case WM_SETTEXT:
{
hmap = OpenFileMappingA(FILE_MAP_READ, FALSE, "share");
lpdata = MapViewOfFile(hmap, FILE_MAP_READ, 0, 0, 0);
SendMessage(GetDlgItem(win, SHOWFILE), msg, NULL, (LPARAM)lpdata);
UnmapViewOfFile(lpdata);
CloseHandle(hmap);
return 0;
}
default:
return DefWindowProc(hwnd, msg, wParam, LParam);
}
return 0;
}
INT_PTR CALLBACK DlgProc(HWND hdlg, UINT msg, WPARAM wParam, LPARAM lParam)
{
int dwLen =0;
int nwLen =0;
LPWSTR lpszPath = NULL;
switch (msg)
{
case WM_SYSCOMMAND:
if (wParam == SC_CLOSE)
{
DestroyWindow(hdlg);
}
return 0;
case WM_COMMAND:
{
switch (LOWORD(wParam))
{
case COM_CHAT:
childHwnd = FindWindow(L"Child_Process", L"Child_Process");
SendMessage(GetDlgItem(hdlg,CHATBOX), WM_GETTEXT, 1000, (LPARAM)data);
SendMessage(childHwnd, LB_ADDSTRING, NULL, (LPARAM)data);
break;
case FIND_FILE:
OPENFILENAME opfn;
WCHAR strFilename[MAX_PATH];
ZeroMemory(&opfn, sizeof(OPENFILENAME));
opfn.lStructSize = sizeof(OPENFILENAME);
opfn.lpstrFilter = L"*.*\0*.*\0*.txt\0*.txt\0";
opfn.nFilterIndex = 1;
opfn.lpstrFile = strFilename;
opfn.lpstrFile[0] = '\0';
opfn.nMaxFile = sizeof(strFilename);
opfn.Flags = OFN_FILEMUSTEXIST | OFN_PATHMUSTEXIST;
if (GetOpenFileName(&opfn))
{
SendMessage(GetDlgItem(hdlg, FILE), WM_SETTEXT, NULL, (LPARAM)strFilename);
}
HANDLE hFile;
hFile = CreateFile(strFilename, GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
char buff[1000];
DWORD dwReads;
ReadFile(hFile, buff, 1000, &dwReads, NULL);
buff[dwReads] = 0;
dwLen = strlen(buff) + 1;
nwLen = MultiByteToWideChar(CP_ACP, 0, buff, dwLen, NULL, 0);//算出合适的长度
lpszPath = new WCHAR[dwLen];
MultiByteToWideChar(CP_ACP, 0, buff, dwLen, lpszPath, nwLen);
SendMessage(GetDlgItem(hdlg, FILE_CON), WM_SETTEXT, NULL, (LPARAM)lpszPath);
CloseHandle(hFile);
break;
case COM_FILE:
childHwnd = FindWindow(L"Child_Process", L"Child_Process");
hmap = CreateFileMappingA(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE | SEC_COMMIT, 0, 10000, "share");
lpdata = MapViewOfFile(hmap, FILE_MAP_READ | FILE_MAP_WRITE, 0, 0, 0);
ZeroMemory(lpdata, sizeof(lpdata));
SendMessage(GetDlgItem(win, FILE_CON), WM_GETTEXT, 10000, (LPARAM)lpdata);
SendMessage(childHwnd, WM_SETTEXT, NULL, NULL);
break;
case CREATE:
PROCESS_INFORMATION pro_info;
STARTUPINFO sti;
ZeroMemory(&pro_info, sizeof(PROCESS_INFORMATION));
ZeroMemory(&sti, sizeof(STARTUPINFO));
sti.cb = sizeof(sti);
CreateProcess(L"childprocess.exe", NULL, NULL, NULL, FALSE, 0, NULL, NULL, &sti, &pro_info);
CloseHandle(pro_info.hProcess);
CloseHandle(pro_info.hThread);
break;
}
}
return 0;
}
return (INT_PTR)FALSE;
}
苏州大学操作系统实验二进程间通信李培峰班
需积分: 10 188 浏览量
2016-12-12
08:13:55
上传
评论 1
收藏 11.55MB ZIP 举报
qq_34047620
- 粉丝: 0
- 资源: 3
最新资源
- IMG_20240508_075130.jpg
- 阿里云认证普尔文考场预约指引v1.5.pdf
- linux-shell学习笔记.pdf
- Xilinx FPGA时钟资源详述
- Linux-shell脚本全面学习.pdf
- Java入门到起飞 – 带源码课件 据说是学JAVA基础的天花板
- 算法部署-使用deepstream在GPU上部署YOLOX目标检测算法-附项目源码-优质项目实战.zip
- Python基于Flask人力资源管理系统+源代码+文档说明+数据库.zip
- java反编译软件,class文件反编译为java文件
- 使用WebService技术实现天气预报实时查询,开发工具:Visual Studio
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈