精华内容
下载资源
问答
  • 摘要:C#源码,菜单窗体,WinForm,控制台 WinForm执行控制台命令,也就是将控制台命令可视化,方便用户操作,一般情况下,控制台命令我们都使用CMD来启动,而本次,你只需在这个WinForm窗口中输入命令即可。
  • 2.WinForm程序和控制台窗口Console 如果你调试过SharpDevelop的源程序,会发现它在DEBUG模式时会出现一个控制台窗口,以显示日志信息。或许我使用的方法与其不同,不过你可以试一试,写出我们自己的调试日志代码。 ...

    本文转载:http://blog.csdn.net/oyi319/article/details/5753311

    2.WinForm程序和控制台窗口Console

    如果你调试过SharpDevelop的源程序,会发现它在DEBUG模式时会出现一个控制台窗口,以显示日志信息。或许我使用的方法与其不同,不过你可以试一试,写出我们自己的调试日志代码。

     

    首先要解决的问题是如何在Debug模式时显示Console窗口。我确定,这是一个WinForm项目,也没有改过它的输出类型。我们需要在项目的入口点使用一些API函数将控制台显示出来:

    它们是 AllocConsole 和 FreeConsole。

     

    1. [DllImport("kernel32.dll")]  
    2. public static extern Boolean AllocConsole();  
    3. [DllImport("kernel32.dll")]  
    4. public static extern Boolean FreeConsole();  

     

    然后我们使它在Main()开始处判断DEBUG编译标记,调用AllocConsole方法显示控制台,然后在Main()的结束处判断DEBUG编译标记,调用FreeConsole方法关闭控制台。这样,我们就可以使用Console.Write等方法将调试信息显示在这个控制台窗口里。

     

    为了达到更好的效果,我们写一个Shell类,用它来封装Console.WriteLine方法,输出个性化信息。我是这样做的,根据输出到控制台的文本的前几个字判断为“警告”、“错误”、“注意”时,输出带有黄色、红色、绿色的文字,其他输出信息输出控制台缺省的灰色文字,以起到区分效果,还要在每条信息前加上输出信息的当时时间。

     

    这个Shell类是这样的:

     

    1. /// <summary>  
    2. /// 与控制台交互  
    3. /// </summary>  
    4. static class Shell  
    5. {  
    6.     /// <summary>  
    7.     /// 输出信息  
    8.     /// </summary>  
    9.     /// <param name="format"></param>  
    10.     /// <param name="args"></param>  
    11.     public static void WriteLine(string format, params object[] args)  
    12.     {  
    13.         WriteLine(string.Format(format, args));  
    14.     }  
    15.   
    16.     /// <summary>  
    17.     /// 输出信息  
    18.     /// </summary>  
    19.     /// <param name="output"></param>  
    20.     public static void WriteLine(string output)  
    21.     {  
    22.         Console.ForegroundColor = GetConsoleColor(output);  
    23.         Console.WriteLine(@"[{0}]{1}", DateTimeOffset.Now, output);  
    24.     }  
    25.   
    26.     /// <summary>  
    27.     /// 根据输出文本选择控制台文字颜色  
    28.     /// </summary>  
    29.     /// <param name="output"></param>  
    30.     /// <returns></returns>  
    31.     private static ConsoleColor GetConsoleColor(string output)  
    32.     {  
    33.         if (output.StartsWith("警告")) return ConsoleColor.Yellow;  
    34.         if (output.StartsWith("错误")) return ConsoleColor.Red;  
    35.         if (output.StartsWith("注意")) return ConsoleColor.Green;  
    36.         return ConsoleColor.Gray;  
    37.     }  
    38. }  

     

     

    那么程序入口函数Main代码如下:

     

    1. /// <summary>  
    2. /// 应用程序的主入口点。  
    3. /// </summary>  
    4. [STAThread]  
    5. static void Main()  
    6. {  
    7. #if DEBUG  
    8.     AllocConsole();  
    9.     Shell.WriteLine("注意:启动程序...");  
    10.   
    11.     Shell.WriteLine("/tWritten by Oyi319");  
    12.     Shell.WriteLine("/tBlog: http://blog.csdn.com/oyi319");  
    13.     Shell.WriteLine("{0}:{1}", "警告", "这是一条警告信息。");  
    14.     Shell.WriteLine("{0}:{1}", "错误", "这是一条错误信息!");  
    15.     Shell.WriteLine("{0}:{1}", "注意", "这是一条需要的注意信息。");  
    16.     Shell.WriteLine("");  
    17. #endif  
    18.     Application.EnableVisualStyles();  
    19.     Application.SetCompatibleTextRenderingDefault(false);  
    20.     Application.Run(new Form1());  
    21. #if DEBUG  
    22.     Shell.WriteLine("注意:2秒后关闭...");  
    23.     Thread.Sleep(2000);  
    24.     FreeConsole();  
    25. #endif  
    26. }  

     

     

    现在这个控制台窗口,只会在DEBUG模式时显示,而在Release编译时不会出现。 这是不是你想要的调试方法呢?

    转载于:https://www.cnblogs.com/wangchuang/p/5809678.html

    展开全文
  • winform 启用控制台

    2012-08-05 22:42:58
    /**////   /// 启动控制台  ///   ///   [DllImport("kernel32.dll")]  public static extern bool AllocConsole();  /**////   /// 释放控制台  ///
      /**//// <summary>
            
    /// 启动控制台
            
    /// </summary>
            
    /// <returns></returns>

            [DllImport("kernel32.dll")]
            
    public static extern bool AllocConsole();
            
    /**//// <summary>
            
    /// 释放控制台
            
    /// </summary>
            
    /// <returns></returns>

            [DllImport("kernel32.dll")]
            
    public static extern bool FreeConsole();
    展开全文
  • C#_winform内嵌控制台

    2020-08-18 17:29:13
    //屏蔽关闭按钮 } else //快捷方式启动进入 { MessageBox.Show("未找到父窗体,即将重定向!!!","重定向查找"); windowHandle = FindWindow(null, "数据显示"); if (windowHandle != IntPtr.Zero) { Thread.Sleep...

    引用的函数:

     		[System.Runtime.InteropServices.DllImport("kernel32.dll", SetLastError = true)]
            [return: System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.Bool)]
            static extern bool AllocConsole();//开启
    
            [System.Runtime.InteropServices.DllImport("Kernel32")]
            public static extern void FreeConsole();//关闭
    
            [System.Runtime.InteropServices.DllImport("user32.dll", EntryPoint = "FindWindow")]
            extern static IntPtr FindWindow(string lpClassName, string lpWindowName);//找出运行的窗口   
    
             [System.Runtime.InteropServices.DllImport("user32.dll", EntryPoint = "FindWindow")]
            private static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string lpszClass, string lpszWindow);
    
            [System.Runtime.InteropServices.DllImport("user32.dll", EntryPoint = "GetSystemMenu")]
            extern static IntPtr GetSystemMenu(IntPtr hWnd, IntPtr bRevert); //取出窗口运行的菜单   
    
            [System.Runtime.InteropServices.DllImport("user32.dll", EntryPoint = "RemoveMenu")]
            extern static IntPtr RemoveMenu(IntPtr hMenu, uint uPosition, uint uFlags); //灰掉按钮
              
            [System.Runtime.InteropServices.DllImport("User32.dll ", EntryPoint = "SetParent")]
            private static extern IntPtr SetParent(IntPtr hWndChild, IntPtr hWndNewParent);//设置父窗体
            
            [System.Runtime.InteropServices.DllImport("user32.dll ", EntryPoint = "ShowWindow")]
            public static extern int ShowWindow(IntPtr hwnd, int nCmdShow);//显示窗口
    

    内嵌窗体(我嵌入给一个tabpages的一个页面)

     			if (AllocConsole())
                {         
                    Console.Title = "数据显示";//先定义窗口标题,防止未找到
                    windowHandle = FindWindow(null, Process.GetCurrentProcess().MainModule.FileName);
                    if (windowHandle != IntPtr.Zero)//在根目录下或VS下进入
                    {
                        Thread.Sleep(100);
                        SetParent(windowHandle, 数据显示.TabPages[0].Handle);
                        closeMenu = GetSystemMenu(windowHandle, IntPtr.Zero);
                        uint SC_CLOSE = 0xF060;
                        RemoveMenu(closeMenu, SC_CLOSE, 0x0);//屏蔽关闭按钮
                    }
                    else //快捷方式启动进入
                    {
                        MessageBox.Show("未找到父窗体,即将重定向!!!","重定向查找");
                        windowHandle = FindWindow(null, "数据显示");
                        if (windowHandle != IntPtr.Zero)
                        {
                            Thread.Sleep(100);
                            SetParent(windowHandle, 数据显示.TabPages[0].Handle);
                            closeMenu = GetSystemMenu(windowHandle, IntPtr.Zero);
                            uint SC_CLOSE = 0xF060;
                            RemoveMenu(closeMenu, SC_CLOSE, 0x0);//屏蔽关闭按钮
                        }
                    } 
                    Console.WindowWidth = 100;
                    Console.SetWindowPosition(0, 0);    
                    Console.ForegroundColor = ConsoleColor.Green;
                    ShowWindow(windowHandle, 3);
                }
                else
                {
                    MessageBox.Show("请注意控制台窗口未正常打开,请检查环境!","环境缺失");
                    return;
                }   
    

    最后:在绑定之前,父窗体一定要刷出来哈

    展开全文
  • c# WinForm调用控制台

    2013-04-25 22:15:04
    由于Windows控制台程序是封装在kernel32.dll,所以有必要讲述一下WinForm如何调用动态链接库的步骤。 1.首先需要在调用窗体中申明using System.Runtime.InteropServices; 2.其次需要在C#语言源程序中声明外部...

    由于Windows控制台程序是封装在kernel32.dll,所以有必要讲述一下WinForm如何调用动态链接库的步骤。

    1.首先需要在调用窗体中申明using System.Runtime.InteropServices;

    2.其次需要在C#语言源程序中声明外部方法,格式如下:

    [DLLImport(“DLL文件”)]

    修饰符 extern 返回变量类型 方法名称 (参数列表)

    其中:DLL文件:包含定义外部方法的库文件;修饰符:访问修饰符,除了abstract以外在声明方法时可以使用的修饰符;返回变量类型:在DLL文件中你需调用方法的返回变量类型;方法名称:在DLL文件中你需调用方法的名称;参数列表:在DLL文件中你需调用方法的列表。

    注意:外部方法的申明位置应该放在方法申明处,一般是放在类里的头部。

    3.在调用出,直接调用方法即可。

    下面以WinForm调用控制台程序进行举例说明:

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    using System.Runtime.InteropServices;

    namespace WindowsFormsApplication1
    {
        public partial class Form1 : Form
        {
            [DllImport("kernel32.dll")]
            public static extern bool AllocConsole();
            public Form1()
            {
                InitializeComponent();
            }
            private void button1_Click(object sender, EventArgs e)
            {           
                AllocConsole();
                System.Console.WriteLine("CYY 你好!");         
            }
        }
    }

     

    附:其实调用控制台更多的是通过创建一个类来调用,原理是一样的,同样附上实例

    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Runtime.InteropServices;

    namespace WindowsFormsApplication1
    {
        public class ConsoleShow
        {
            /// <summary>
            /// 启动控制台
            /// </summary>
            /// <returns></returns>
            [DllImport("kernel32.dll")]
            public static extern bool AllocConsole();
            /// <summary>
            /// 释放控制台
            /// </summary>
            /// <returns></returns>
            [DllImport("kernel32.dll")]
            public static extern bool FreeConsole();
        }
    }

     

    这个时候,在调用的时候ConsoleShow pConsoleShow = new ConsoleShow (); pConsoleShow .AllocConsole();

    展开全文
  • C# winform控制台Properties.Settings.Default的使用及存储位置 作者的程序 是MmPS.ClientForm.exe,使用Properties.Settings.Default.Save()以后, 会保存成MmPS.ClientForm.exe_Url_cdmg52oge3gd2ky3...
  • 需求winForm 程序输出类型为 windows 程序(不是命令行程序)在运行时想输入一些信息编译开发调试,如何...namespace WindowsFormsApplication1{ public partial class NativeMethods { ///  /// 启动控制台 //
  • c# WinForm调用控制台

    千次阅读 2014-09-25 13:26:52
    由于Windows控制台程序是封装在kernel32.dll,所以有必要讲述一下WinForm如何调用动态链接库的步骤。 1.首先需要在调用窗体中申明using System.Runtime.InteropServices; 2.其次需要在C#语言源程序中声明外部...
  • // 获取启动了应用程序的可执行文件的路径,路径最末不带“\”,适用于Winform程序 System.Windows.Forms.Application.StartupPath // 获取启动了应用程序的可执行文件的路径及文件名,再配合使用System.IO.Path....
  • WINform 获得控制台程序运行结果

    千次阅读 2009-04-15 17:12:00
    private void button1_Click(object sender, EventArgs e) { //实例化一个进程类 Process cmd = new Process(); //获得系统信息,使用的是 systeminfo.exe 这个控制台程序
  • 如果有的时候我们需要给WPF应用程序传递参数,我们需要自己写一个包含Main函数的类来实现,Winform以及控制台没有隐藏Main函数直接加上参数即可。 外部传递过来的参数就在string[] args里面,例如传递的参数是字符串...
  • //启动窗口 [DllImport("kernel32.dll")] public static extern bool FreeConsole(); //关闭窗口 通过这种方式调用的,如何设置 c#控制台的长和宽呢? 设置他的缓存区和长宽 是用 user32.dll 还是...
  • 1、创建控制台项目 在
  • Winform 动态启动控制台命令行

    千次阅读 2011-04-02 11:45:00
    winForm 程序输出类型为 windows 程序(不是命令行程序) 在运行时想输入一些信息编译开发调试,如何实现这一功能 <br />解答: AllocConsole、FreeConsole 这两个 API 可以在任何时候调用...
  • 全局程序集GlobalAssemblyInfo.cs及WinForm程序如何在Debug模式下启动控制台窗口Console
  • 需求winForm 程序输出类型为 windows 程序(不是命令行程序)在运行时想输入一些信息编译开发调试,如何实现这一功能解答: AllocConsole、FreeConsole 这两个 API 可以在任何时候调用和关闭 命令行。代码演示:API ...
  • 讲解全局程序集GlobalAssemblyInfo.cs的使用和WinForm程序如何在Debug模式下启动控制台窗口Console以显示调试信息
  • Winform中打开控制台

    2018-11-14 20:34:32
    1、说明 由于控制台api被封装在kernel32.dll链接库中,而kernel32.dll并未托管dll,所以需要使用DllImport来导入。 3、代码 static class Program ... /// 启动控制台 /// &lt;/summary&gt; //...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,900
精华内容 1,160
关键字:

winform启动控制台