根据用户的选择将控制台应用程序移动到后台

时间:2014-01-16 22:17:27

标签: c# background console-application

我在标题中看到了一些关于问题的解决方案,但它们都没有按照我的意愿行事。

我有ch = Console.ReadKey().KeyChar;,如果用户输入'y',我希望该应用进入后台。如果用户输入'n',程序会继续,就像什么都没发生一样这可能吗?我做了很多研究,但仍然找不到适合我的研究。

这是我现在所拥有的:

char ch = '0';
Console.WriteLine("Enter Log File Destenation:");
string url = Console.ReadLine();
Console.WriteLine("Run In BackGround ? (Defaul Set to False)";
ch = Console.ReadKey().KeyChar;
if (ch == 'y')
{
    //Move To Background
}

    // continue with program

这是一个比特币率记录器。它从网站标题获取比特率并将其记录到txt文件中,该目标由用户在程序开始时设置。 设置目的地后,它会询问它是否应该在后台运行。 无论哪种方式,程序都会进入log(true)循环。

1 个答案:

答案 0 :(得分:0)

使用SetWindowPos方法和参数HWND_BOTTOM

using System.Runtime.InteropServices;

namespace ConsoleApplication1
{
    class Program
    {
        [DllImport("user32.dll", SetLastError=true)]
        [return: MarshalAs(UnmanagedType.Bool)]
        private static extern bool SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter, int x, int y, int cx, int cy, uint uFlags);

        [DllImport("user32.dll")]
        [return: MarshalAs(UnmanagedType.Bool)]
        public static extern bool GetWindowRect(IntPtr hWnd, out W32RECT lpRect);

        [StructLayout(LayoutKind.Sequential)]
        public struct W32RECT
        {
            public int Left;
            public int Top;
            public int Right;
            public int Bottom;
        }

        public const uint HWND_BOTTOM = 1;

        static void Main(string[] args)
        {
           IntPtr handle = Process.GetCurrentProcess().MainWindowHandle;
           W32RECT rect;
           GetWindowRect(handle , out rect); //to get position and size of your console
           SetWindowPos(handle, IntPtr.Zero, rect.Left, rect.Top, rect.Right - rect.Left, rect.Bottom - rect.Top, HWND_BOTTOM);//to set background position of your console with the same size and screen's position
        }
    }
}

未经测试但会有效

来源:http://www.developpez.net/forums/d199635/environnements-developpement/delphi/setforegroundwindow-setbackgroundwindow/(如果需要,我可以翻译)