time 
设为首页】【收藏本站
当前位置: 主页 > 程序设计 > .net > WPF > 让WPF窗体程序支持命令行方式运行的三种方式

让WPF窗体程序支持命令行方式运行的三种方式

时间:2009-09-23 00:12 点击:字体:[ ]

  本文示例源代码或素材下载

  有的时候,我们希望窗体程序也能接受命令行参数,以Console的方式运行。但是实现起来却要一些小技巧才能做到。如果做一个WPF程序,在Window的Loaded事件里写这样的语句:

  Console.WriteLine("Hello word.");

  然后从CMD运行之。会发现这个语句根本没有输出出来。如图1所示。

让WPF窗体程序支持命令行方式运行的三种方式

  图1. 从命令行运行Wpf程序

  对于这个问题有三个解决方案。三个方案各有优缺点,请酌情选择。

  1.    使用more命令:这种方案不需要修改任何代码,只要在从命令行运行时加个 “ | more”即可。如图2 所示。

让WPF窗体程序支持命令行方式运行的三种方式

  图2. 使用more重定向输出

  2.    更改程序的Output Type:在VS的菜单中找到Project -> [Project Name] Properties…,选择Application选项卡。把其中的Output Type,从Windows Application更改成Console Application。后果是无论是不是从命令行运行,都有个Console窗口随着主窗体一起出来。如图3所示。

让WPF窗体程序支持命令行方式运行的三种方式

  图3. Output Type改成Console Application的效果

  3.    Windows API调用:通过调用kernel32.dll里的AttachConsole,可以把WPF程序与一个Console相关联。代码如下。

  ConsoleAttacher

1/**////////////////////////////////////////////////////////
2//         Console Attacher
3//          Version 1.0
4//        Powered by nankezhishi
5//        nankezhishi@gmail.com
6/**////////////////////////////////////////////////////////
7
8using System.Runtime.InteropServices;
9
10namespace WpfConsole
11{
12  /**//// <summary>
13  ///
14  /// </summary>
15  public class ConsoleAttacher
16  {
17    private const int ATTACH_PARENT_PROCESS = -1;
18
19    /**//// <summary>
20    ///
21    /// </summary>
22    public static void AttachParentConsole()
23    {
24      AttachConsole(ATTACH_PARENT_PROCESS);
25    }
26
27    [DllImport("Kernel32.dll", EntryPoint = "AttachConsole", CharSet = CharSet.Unicode, SetLastError = true)]
28    public static extern void AttachConsole(int dwProcessId);
29  }
30}
31

  然后在Loaded事件里加上对这个函数的调用。

  ConsoleAttacher.AttachParentConsole();

  运行结果如图4所示。

让WPF窗体程序支持命令行方式运行的三种方式

  图4. Attach Console


本 文 地 址 : http://www.fengfly.com/plus/view-83237-1.html    挑错    推荐
标签: 命令 支持 程序 Console 运行 方式 来源:博客园          作者:南柯之石   
------分隔线----------------------------
最新评论 查看所有评论
发表评论 查看所有评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
验证码: