控制台程序如何将dos窗口隐藏?

小风扇 2011-08-10 11:04:42
Process p = new Process();
p.StartInfo.CreateNoWindow = true;
p.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
p.StartInfo.FileName = "D:\\Web28\\Web28\\FlashPaper\\FlashPrinter.exe";
p.StartInfo.Arguments = string.Format("{0} -o {1}", "D:\\Web28\\Web28\\Bob.doc", "D:\\Web28\\Web28\\gongwen.swf");
p.Start();
p.WaitForExit();//等待程序执行完退出进程
p.Close();//关闭进程
p.Dispose();
为什么执行的时候还是将执行的程序显示出了而不是隐藏啊?求高手
...全文
508 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
xxiju203 2011-08-18
  • 打赏
  • 举报
回复
设置最小化也是调用WINDOWS API函数,一样的

等待程序启动的sleep可以设置更长点的时间,还有就是按照我的方法你的文档最后有没有转换成功? 还有就是调试程序的时候短点看看哪个child是否为null,VS工具里面有个Spy++的程序,可用来查找程序窗口句柄,你看看你的窗体标题名称在Spy++里面是否是Macromedia FlashPaper,因为 不同版本的程序可能标题不一样导致找不到这个窗体,写程序不能生搬硬套 ,要懂得变通.
xxiju203 2011-08-11
  • 打赏
  • 举报
回复
研究了下你的这个程序,主程序带参数启动的时候本来就是隐藏的,所以不需要在Process中设置隐藏,他在后台处理完了文件之后又会启动他本身,所以应该结合API函数找到之后打开的窗口并且将其设置隐藏.代码如下


首先要引用两个系统API
[DllImport("User32.dll", EntryPoint = "FindWindow")]
private static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
[DllImport("user32.dll", EntryPoint = "ShowWindow", CharSet = CharSet.Auto)]
public static extern int ShowWindow(IntPtr hwnd, int nCmdShow);
//----------------------------------------------------------------------------------
OpenFileDialog op = new OpenFileDialog();
if (op.ShowDialog() == DialogResult.OK)
{
using (Process p = new Process())
{

p.StartInfo.FileName = Application.StartupPath + "\\FlashPaper\\FlashPrinter.exe";
p.StartInfo.Arguments = string.Format("{0} -o {1}", op.FileName, op.FileName + ".swf");
p.Start();
p.WaitForExit();
Thread.Sleep(3000);//等待程序启动,否则找不到程序窗口句柄
IntPtr child = FindWindow(null, "Macromedia FlashPaper");//查找标题为Macromedia FlashPaper的窗口句柄
if(child != null)
ShowWindow(child, 0);//设置隐藏
}
}
小风扇 2011-08-11
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 xxiju203 的回复:]
写成服务的话需要允许服务与桌面交互,这样的话你调用的软件的行为你也没法控制的.
[/Quote]
那怎么设置最小化呢?
xxiju203 2011-08-11
  • 打赏
  • 举报
回复
写成服务的话需要允许服务与桌面交互,这样的话你调用的软件的行为你也没法控制的.
tyrone2012 2011-08-11
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 wangxuecheng92 的回复:]
对不起,还是不明白,跪求答案啊
[/Quote]


正解
小风扇 2011-08-11
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 keenw 的回复:]
写成Console程序都会有的,要想没有那个要写成服务
[/Quote]
那怎么样写成服务呢,求指点迷津
小风扇 2011-08-11
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 xxiju203 的回复:]
干脆别隐藏了,设置最小化就行了.估计是程序自己又重新弹出了个窗口.
[/Quote]
求高人怎么设置成最小化啊?
程序猿CKeen 2011-08-11
  • 打赏
  • 举报
回复
写成Console程序都会有的,要想没有那个要写成服务
xxiju203 2011-08-11
  • 打赏
  • 举报
回复
干脆别隐藏了,设置最小化就行了.估计是程序自己又重新弹出了个窗口.
小风扇 2011-08-11
  • 打赏
  • 举报
回复
我想重述下我的问题,我用FlashPaper,在Web上调用的时候他会出现,我希望能把他隐藏,谢谢各位,希望能帮忙下
小风扇 2011-08-11
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 ch_fb 的回复:]
写成“服务”?
[/Quote]
啥意思啊?不明白,帮忙解释下
小风扇 2011-08-11
  • 打赏
  • 举报
回复
public partial class _Default : System.Web.UI.Page
{
[DllImport("User32.dll", EntryPoint = "FindWindow")]
private static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
[DllImport("user32.dll", EntryPoint = "ShowWindow", CharSet = CharSet.Auto)]
public static extern int ShowWindow(IntPtr hwnd, int nCmdShow);

protected void Page_Load(object sender, EventArgs e)
{
Process p = new Process();
p.StartInfo.RedirectStandardInput = true;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.RedirectStandardError = true;
p.StartInfo.CreateNoWindow = true;
p.StartInfo.UseShellExecute = false;
//p.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
p.StartInfo.FileName = "D:\\Web28\\Web28\\FlashPaper\\FlashPrinter.exe";
p.StartInfo.Arguments = string.Format("{0} -o {1}", "D:\\Web28\\Web28\\Bob.doc", "D:\\Web28\\Web28\\gongwen.swf");
p.Start();
Thread.Sleep(3000);//等待程序启动,否则找不到程序窗口句柄
IntPtr child = FindWindow(null, "Macromedia FlashPaper");//查找标题为Macromedia FlashPaper的窗口句柄
if (child != null)
ShowWindow(child, 0);//设置隐藏
p.WaitForExit();//等待程序执行完退出进程

}
这是我又改造的我的代码...还是不行,能不能教教我怎么设置成最小化啊?
小风扇 2011-08-11
  • 打赏
  • 举报
回复
xxiju203
感谢你的帮助,虽然还是没弄出来,我按照你的代码弄了一个下午.....运行以后总是在等待响应....然后什么也没发生....对不起,我快笨死了。。。
小风扇 2011-08-10
  • 打赏
  • 举报
回复
对不起,还是不明白,跪求答案啊
老毕 2011-08-10
  • 打赏
  • 举报
回复
请参考:
http://blog.sina.com.cn/s/blog_49b7edd70100grwt.html
小风扇 2011-08-10
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 javaoraspx 的回复:]
p.StartInfo.CreateNoWindow = true;//设定不显示窗口
这句不能隐藏 ?
[/Quote]
昂,就是,不能隐藏,所以我想问问...
javaoraspx 2011-08-10
  • 打赏
  • 举报
回复
p.StartInfo.CreateNoWindow = true;//设定不显示窗口
这句不能隐藏 ?
javaoraspx 2011-08-10
  • 打赏
  • 举报
回复
我记得是有个属性是 可以隐藏 窗口的
Charlemagne 2011-08-10
  • 打赏
  • 举报
回复
正解!

[Quote=引用 6 楼 effun 的回复:]

p.StartInfo.UseShellExecute = false

http://msdn.microsoft.com/zh-cn/library/system.diagnostics.processstartinfo.useshellexecute(v=VS.80).aspx
[/Quote]
自由建客 2011-08-10
  • 打赏
  • 举报
回复
写成“服务”?
加载更多回复(4)

110,538

社区成员

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

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

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