用c#调用外部程序的几个问题

yzmchinaren 2009-08-28 09:11:24
第一:使得打开的外部程序居中并在顶部
第二:外部程序只能打开一次
第三:外部程序关闭后才能操作自己的程序
谢谢!
...全文
628 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
yzmchinaren 2009-08-28
  • 打赏
  • 举报
回复
你试验一下就知道了
yzmchinaren 2009-08-28
  • 打赏
  • 举报
回复
private bool alreadyRun; 
private void pictureBox3_Click(object sender, EventArgs e)
{
try
{
if(!alreadyRun)
{
var MyProcess = new Process();
MyProcess.StartInfo.FileName = @"c:\1.txt";
MyProcess.Start();
MessageBox.Show(MyProcess.MainWindowHandle.ToString());
alreadyRun = true;
MyProcess.WaitForExit();
alreadyRun = false;
}

}
catch (Exception error)
{
MessageBox.Show(error.Message);
}
}
dancingbit 2009-08-28
  • 打赏
  • 举报
回复
注意alreadyGo声明的位置。
dancingbit 2009-08-28
  • 打赏
  • 举报
回复
给我看看你是如何加的?
贴出你加了之后的完整的button_Click方法。
yzmchinaren 2009-08-28
  • 打赏
  • 举报
回复
我加之后也试验过了
dancingbit 2009-08-28
  • 打赏
  • 举报
回复
你没加我说的判断,怎么就断定加与不加是一样的?
yzmchinaren 2009-08-28
  • 打赏
  • 举报
回复
就是这些
你可以试验一下

var MyProcess = new Process();
MyProcess.StartInfo.FileName = @"c:\1.txt";
MyProcess.Start();
MyProcess.WaitForExit();

当打开后 你在点击那个button 然后关闭外部程序 他会又自动弹出这个外部程序
dancingbit 2009-08-28
  • 打赏
  • 举报
回复
贴出你完整的button_Click方法。
yzmchinaren 2009-08-28
  • 打赏
  • 举报
回复
你这个判断 加不加 都是一样的
alreadyGo=true;
MyProcess.WaitForExit();
alreadyGo=false;
yzmchinaren 2009-08-28
  • 打赏
  • 举报
回复
ls的代码 跟我的代码试验效果是一样的
dancingbit 2009-08-28
  • 打赏
  • 举报
回复
别人程序中的窗口设置为模式窗口:

API函数:SetWindowLong
dancingbit 2009-08-28
  • 打赏
  • 举报
回复

bool alreadyGo=false;

private void button_Click(object sender,EventArgs e)
{
if(!alreadyGo)
{
MyProcess = new Process();
MyProcess.StartInfo.FileName = @"c:\1.txt";
MyProcess.Start();
alreadyGo=true;
MyProcess.WaitForExit();
alreadyGo=false;
}
}
yzmchinaren 2009-08-28
  • 打赏
  • 举报
回复
如果做一个模式窗口
就是窗口打开的时候
不能点击下面窗体的按键
就OK
不过这个模式窗体怎么实现?
yzmchinaren 2009-08-28
  • 打赏
  • 举报
回复
MyProcess.WaitForExit();
这个是堵塞模式 你只能打开一个窗口
当你正常关闭你打开的程序时,假如你在打开这个程序时 你又点击button (这时是一直只打开一个窗口的)
这个外部程序会按照次数一次一次打开(关闭后又打开,按照你点击的次数)
不妨 你可以做个demo试一下
dancingbit 2009-08-28
  • 打赏
  • 举报
回复
你自己设置个标志,表明已打开,在button_Click中判断,如果已打开的话就不再打开了。
yzmchinaren 2009-08-28
  • 打赏
  • 举报
回复
现在的问题 先上代码
在一个button的click事件中的代码如下:
var MyProcess = new Process();
MyProcess.StartInfo.FileName = @"c:\1.txt";
MyProcess.Start();
MyProcess.WaitForExit();
这样可以实现只能打开一个窗口
假如在窗口打开 ,你再点击button的话 等你关闭这个窗口后
他会按照你点击的次数又打开相应的次数 也就是说他有执行了刚才的程序
dancingbit 2009-08-28
  • 打赏
  • 举报
回复
1.获得窗口句柄后使用API函数SetWindowPos。
yudi010 2009-08-28
  • 打赏
  • 举报
回复
2和3都可以通过检查进程名然后进行判断
yzmchinaren 2009-08-28
  • 打赏
  • 举报
回复
现在剩下 第一条没有解决了
二三条用WaitForExit();
yzmchinaren 2009-08-28
  • 打赏
  • 举报
回复
外部程序是一个单独可执行的exe文件

调用这个程序能做成模式窗口?
加载更多回复(3)
微信小程序系统教程[初级阶段],微信小程序0基础学起,讲解微信小程序开发的基础知识。 微信小程序系统教程共有“微信小程序系统教程[初级阶段]”、“微信小程序系统教程[中级阶段]——核心技术”、“微信小程序系统教程[阶段]客服消息+微信支付+九宝电商系统”。 “微信小程序系统教程[阶段]全套课程”包含: 1.微信小程序系统教程[阶段]_客服消息 2.微信小程序系统教程[阶段]_微信支付 3.微信小程序系统教程[阶段]_九宝电商系统 学习“微信小程序系统教程[阶段]”要求有微信小程序的基础。建议先学习“微信小程序系统教程[初级阶段]”、“微信小程序系统教程[中级阶段]”,后在报名“微信小程序系统教程[阶段]”。 阶段讲解的客服消息,是针对小程序的。后台程序用接近底层的技术,没有使用三方技术。这样降低同学们学习成本。 微信支付,这部分课程很有难度,要求同学们认真听讲,有不会的技术问题可以请教老师。购买课程后请联系老师,提供单号,给你源程序。 九宝电商系统是一套十分适和学习、项目的课程。既可以系统的学习微信小程序相关知识,还可以修改后上线。 “微信小程序系统教程[中级阶段]——核心技术”重点讲解微信小程序事件、组件、API 微信小程序系统教程[初级阶段],微信小程序0基础学起,讲解微信小程序开发的基础知识。 购买课程的同学,可赠送就九宝老师编写的《微信小程序开发宝典》。 购课请咨询qq2326321088

110,577

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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