Win32 App 与 Win32 Console App 通信的问题~高手请进~UP者有分 我想在我的win32程序A里WinExec一个win32 console程序B(自己写的),把一些A里的信息output到B上去,请问各位高人,我应该怎么做? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 这是进程间数据交换的问题。可以建立内存映射文件,通过它交换数据。console程序以查询方式查询映射文件的内容,决定是否进行显示。或者在console中创建接收消息的线程,响应win32程序A发送的需要output数据的消息,从映射内存中获取需要输出的数据,在控制台输出。 能不能说说怎样创建接收消息的线程,我不大懂?thanks~ DWORD dwShareMode=FILE_SHARE_READ|FILE_SHARE_WRITE; SECURITY_ATTRIBUTES sa={sizeof(sa),NULL,true}; STARTUPINFO si; PROCESS_INFORMATION pi; HANDLE hconsel = NULL; // 创建一个中间文件 hconsel = ::CreateFile("d:\\lll.txt", GENERIC_READ|GENERIC_WRITE, dwShareMode, &sa, OPEN_ALWAYS, ILE_ATTRIBUTE_TEMPORARY|FILE_FLAG_DELETE_ON_CLOSE, NULL); if (hconsel == INVALID_HANDLE_VALUE) { AfxMessageBox("Could not create file."); return; // process error } //////////////////////////////////////////////////////// ZeroMemory( &si, sizeof(si) ); si.cb = sizeof(si); ZeroMemory( &pi, sizeof(pi) ); si.cb = sizeof(si); si.dwFlags = STARTF_USESTDHANDLES;//这个标志最重要,表明下面的句柄有效 si.hStdOutput = hconsel; //得到程序输出流(文件)句柄 ///////////////////////////////////////////////////////// if(!(CreateProcess("E:\\任务之一\\dsaqua091\\dsaqua\\DSaqua09.exe", TEXT("DSaqua09"), NULL, NULL, true, CREATE_NO_WINDOW,NULL, "E:\\任务之一\\dsaqua091\\dsaqua", &si, &pi))) { MessageBox("Cannot open this file!"); CloseHandle(hconsel); return; } ///////////////////////////////////////////////////////////// WaitForSingleObject( pi.hProcess, INFINITE ); CloseHandle( pi.hProcess ); CloseHandle( pi.hThread ); m_handfile = hconsel; 最后得到文件句柄,你可以输出到你的控制台窗口中 上面的代码是我做过的一个程序的小片断 谢谢 lilylovey(楚云飞) 你的程序,我想问问原理是不是win32程序A通过将信息不断写入一个文本文件,而程序B则不断监视该文本文件是否改变,是的话就把新添加进去的信息输出到console窗口? 自己写得就简单了。把你要output的东西当命令行参数就行了。用不着memory mapped file什么的高深技巧。 ado打开数据库的问题 散分,我的第一个VC程序总算做好了 一个Post方式下载网页问题(在线等) 问一个菜鸟问题! 如何在对话框程序中画一个网格? 程序出现如下连接错误,怎样解决? sql查询语句 新手问题〉为什么我的一个累没有在工作区里显示出来(曾经显示过,不知怎么回事又没了) *.ocx文件用vb6怎么打包????????救命!!! 怎样一次创建一个多级目录(50分哦) UP有分!哪位大哥大姐知道Windows的打印机的SPOOL文件的格式?急!UP有分 快救我,已写了一周的程序出现了一个要命的错误。回答对了都有分。
SECURITY_ATTRIBUTES sa={sizeof(sa),NULL,true};
STARTUPINFO si;
PROCESS_INFORMATION pi;
HANDLE hconsel = NULL;
// 创建一个中间文件
hconsel = ::CreateFile("d:\\lll.txt",
GENERIC_READ|GENERIC_WRITE,
dwShareMode,
&sa,
OPEN_ALWAYS,
ILE_ATTRIBUTE_TEMPORARY|FILE_FLAG_DELETE_ON_CLOSE,
NULL);
if (hconsel == INVALID_HANDLE_VALUE)
{
AfxMessageBox("Could not create file.");
return; // process error
} ////////////////////////////////////////////////////////
ZeroMemory( &si, sizeof(si) );
si.cb = sizeof(si);
ZeroMemory( &pi, sizeof(pi) );
si.cb = sizeof(si);
si.dwFlags = STARTF_USESTDHANDLES;//这个标志最重要,表明下面的句柄有效
si.hStdOutput = hconsel; //得到程序输出流(文件)句柄 /////////////////////////////////////////////////////////
if(!(CreateProcess("E:\\任务之一\\dsaqua091\\dsaqua\\DSaqua09.exe",
TEXT("DSaqua09"),
NULL,
NULL,
true,
CREATE_NO_WINDOW,NULL, "E:\\任务之一\\dsaqua091\\dsaqua",
&si,
&pi)))
{
MessageBox("Cannot open this file!");
CloseHandle(hconsel);
return;
}
/////////////////////////////////////////////////////////////
WaitForSingleObject( pi.hProcess, INFINITE );
CloseHandle( pi.hProcess );
CloseHandle( pi.hThread );
m_handfile = hconsel;
最后得到文件句柄,你可以输出到你的控制台窗口中
上面的代码是我做过的一个程序的小片断
文本文件,而程序B则不断监视该文本文件是否改变,是的话就把新添加进去的信息输出到
console窗口?
把你要output的东西当命令行参数就行了。
用不着memory mapped file什么的高深技巧。