WinExec和CreateProcess的区别?

xiaozuo 2001-05-18 06:19:00
加精
在2000中用WinExec可以成功调用单片机开发程序C196,但是CreateProcess却不能,死在程序的启动屏幕上了。下面是调用代码:
PROCESS_INFORMATION pInf;
STARTUPINFO stInf;
stInf.cb=sizeof(STARTUPINFO);
stInf.lpReserved=NULL;
stInf.lpDesktop="";
stInf.lpTitle=NULL;
stInf.dwFlags=STARTF_USESHOWWINDOW;
stInf.cbReserved2=0;
stInf.lpReserved2=NULL;
stInf.wShowWindow=SW_SHOWNORMAL;
CreateProcess(NULL,(char *)pAppName,NULL,NULL,FALSE,
CREATE_NEW_PROCESS_GROUP,NULL,NULL,&stInf,&pInf);

WinExec(pAppName,SW_SHOWNORMAL);
...全文
542 29 打赏 收藏 转发到动态 举报
写回复
用AI写文章
29 条回复
切换为时间正序
请发表友善的回复…
发表回复
m_SuperIdler 2001-08-28
  • 打赏
  • 举报
回复
gz
duhualin 2001-08-01
  • 打赏
  • 举报
回复
gz
verybigbug 2001-05-31
  • 打赏
  • 举报
回复
Dialog的Visible设为FALSE,Oninitdialog中

PostMessage(WM_COMMAND, MAKEWPARAM(IDOK,BN_CLICKED),(LONG)GetDlgItem(IDOK)->m_hWnd);
return FALSE;
xiaozuo 2001-05-31
  • 打赏
  • 举报
回复
使用MoveWindow(0,0,0,0,FALSE)后,最小化的窗口在屏幕中间悬着,并不在任务栏上,好像Oncreate也无效。
yangmajituipo 2001-05-30
  • 打赏
  • 举报
回复
我真的不知道是何意,
抱歉,oncreate是添加wm_create系统生成的,
处理后
该程序不会在任务栏,alt+tab中看出来
舟中夜起 2001-05-29
  • 打赏
  • 举报
回复
执行没有安全要求的程序,_execl(...)比较方便一些

xiaozuo 2001-05-29
  • 打赏
  • 举报
回复
_execl不能返回进程句柄,不能用。

yangmajituipo:
对不起,
WPARAM wParam;
wParam = MAKEWPARAM(IDOK,BN_CLICKED);
this->SendMessage(WM_COMMAND,wParam,(LONG)GetDlgItem(IDOK)->m_hWnd);
和直接调用OnOK效果完全一样,并没有先结束Oninitdialog,而是直接转到了OnOK。另外lpCreateStruct?????
不过说话算数,分数会给你的。

其实我本来的的问题已经很好地解决了,现在是想知道:
1:Oninitdialog是不是有办法隐藏对话框;
2:有没有办法退出Oninitdialog后立刻调用OnOK.
xiaozuo 2001-05-29
  • 打赏
  • 举报
回复
yangmajituipo的方法可以解决我的问题,但是仍有一个小小的不足,假如不在OnOK中退出,仍有一个很小又不能最大化的窗口出现,this->MoveWindow(0,0,0,0,FALSE)仅仅是把窗口最消化了,不能重画而已,并没有隐藏。
请你到其它贴子上登记,至少2/3的分是你的。
yangmajituipo 2001-05-29
  • 打赏
  • 举报
回复
行吗
yangmajituipo 2001-05-29
  • 打赏
  • 举报
回复
你是不是要因长在状态栏上的
给一种方案
在dialog中加入成员CWnd m_WndParent;

在int CDDlg::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
// TODO: Add your specialized creation code here
if (!::IsWindow(m_wndParent.m_hWnd))
{
LPCTSTR pstrOwnerClass = AfxRegisterWndClass(0);
if (!m_wndParent.CreateEx(0, pstrOwnerClass, "", WS_POPUP,
CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
NULL, 0))
return FALSE;
}

lpCreateStruct->hwndParent = m_wndParent.m_hWnd;
if (CDialog::OnCreate(lpCreateStruct) == -1)
return -1;
return 0;
}

在oninitdialog中
this->MoveWindow(0,0,0,0,FALSE);
this->SetOwner(&m_wndParent);
this->SetParent(&m_wndParent);

我到其他贴子登记去了,谢谢
yangmajituipo 2001-05-28
  • 打赏
  • 举报
回复
看了半天,终于明白是什么意思。
试试在
CDialog::OnInitDialog();
this->MoveWindow(0,0,0,0,FALSE);
WPARAM wParam;
wParam = MAKEWPARAM(IDOK,BN_CLICKED);
this->SendMessage(WM_COMMAND,wParam,(LONG)GetDlgItem(IDOK)->m_hWnd);
绝对不闪,对请加分
xiaozuo 2001-05-28
  • 打赏
  • 举报
回复
我已经在最新的MSDN中找到了WinExec调用CreateProcess的区别,已经解决了我的问题,不过假如有人能解决其他两个问题,这4个帖子的分全部给他。
xiaozuo 2001-05-25
  • 打赏
  • 举报
回复
请同时参照http://www.csdn.net/expert/topic/126/126211.shtm和http://www.csdn.net/expert/topic/126/126247.shtm,问题的原因是OnOK中要调用一个程序,当用EinExec调用时,没有进程句柄,无法控制,但是用CreateProcess建立进程时,却要无限制等到我的OnOK结束,只要先退出OnInitDialog()后再运行OnOK就没有这个问题。
现在的问题是:
1:退出OnInitDialog()后我的对话筐要出现,但是我不能让它出现,假如在OnOK中使用ShowWindow(SW_HIDE)可以隐藏对话筐,但是仍有一闪,必须首先在OnInitDialog()就隐藏对话筐;
2:为了不让调用的程序等待,我必须先退出OnInitDialog()后再立刻调用OnOK;
3:假如能够让CreatProcess和WinExec具有一样的调用效果,问题也可以解决,我可以在OnInitDialog()中直接调用OnOK。
xiaozuo 2001-05-22
  • 打赏
  • 举报
回复
到灌水乐园转了一圈又回来了!
NowCan 2001-05-21
  • 打赏
  • 举报
回复
怎么跑到灌水乐园来了?
gnuljf 2001-05-21
  • 打赏
  • 举报
回复
跟着楼上的:)
backlove 2001-05-21
  • 打赏
  • 举报
回复
不会,蹭分的
panda_w 2001-05-21
  • 打赏
  • 举报
回复
启动进程,我是这样做的

STARTUPINFO stinfo;
//启动窗口的信息
PROCESSINFO procinfo;//进程的信息
CreateProcess(NULL,_T("notepad.exe"),NULL,NULL,FALSE,
NORMAL_PRIORITY_ CLASS,NULL,NULL, &stinfo,&procinfo);

另外,我没有转你的贴子到灌水乐园
xiaozuo 2001-05-21
  • 打赏
  • 举报
回复
我的帖子无缘无故跑到了灌水乐园,而且还不能返回到VC.
NowCan 2001-05-19
  • 打赏
  • 举报
回复
PROCESS_INFORMATION pInf={sizeof(pInf)};
STARTUPINFO stInf={sizeof(stInf)};
加载更多回复(9)

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧