(특히 Visual Studio 디버거를 실행할 때) C#에서 콘솔 응용 프로그램 윈도우를 앞에 가져올 수 있습니까?콘솔 윈도우를 앞쪽으로 가져 오기 #
답변
그것은 끔찍한, 해키,하지만 나를 위해 작동 (감사, pinvoke.net!) :
using System;
using System.Diagnostics;
using System.Runtime.InteropServices;
using System.Threading;
public class Test
{
[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool SetForegroundWindow(IntPtr hWnd);
[DllImport("user32.dll", EntryPoint="FindWindow", SetLastError = true)]
static extern IntPtr FindWindowByCaption(IntPtr zeroOnly, string lpWindowName);
public static void Main()
{
string originalTitle = Console.Title;
string uniqueTitle = Guid.NewGuid().ToString();
Console.Title = uniqueTitle;
Thread.Sleep(50);
IntPtr handle = FindWindowByCaption(IntPtr.Zero, uniqueTitle);
if (handle == IntPtr.Zero)
{
Console.WriteLine("Oops, cant find main window.");
return;
}
Console.Title = originalTitle;
while (true)
{
Thread.Sleep(3000);
Console.WriteLine(SetForegroundWindow(handle));
}
}
}
디버깅 할 때 맨 위에 표시되도록 코드에 추가하지 마십시오. – tvanfosson
@tv - 어쩌면 당신은 절대적인 진술에 대해 설명 할 수 있습니다. 개인적으로 이것이 합법적이고 권장되는 창 관리 기능의 사용이라고 생각합니다. 가장 좋은 DRY 접근 방식은 아니지만 약간의 리팩토링을 통해 Win32 응용 프로그램 개발에있어 일반적인 관행입니다. 해키가 아니라 데스크톱 주위로 창을 이동하는 방법입니다. –
Visual Studio 디버거에서만이 코드를 실행하려면 다음을 사용할 수 있습니다. if (Debugger.IsAttached == true) {...} –
는 두 개의 모니터를 가져옵니다 (적어도)와 보조 모니터에서 열려으로 VisualStudio. VisualStudio에서 앱을 실행하면 기본 모니터에서 기본적으로 시작됩니다. 마지막으로 열리는 앱이기 때문에 처음부터 시작하고 VisualStudio로 변경해도 영향을주지 않습니다. 어쨌든 나를 위해 일합니다.
두 번째 모니터 인 IMHO가없는 경우 사용자가해야합니다.
이것이 내가하는 일입니다.
[DllImport("kernel32.dll", ExactSpelling = true)]
public static extern IntPtr GetConsoleWindow();
[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool SetForegroundWindow(IntPtr hWnd);
public void BringConsoleToFront()
{
SetForegroundWindow(GetConsoleWindow());
}
아주 늦은 대답,하지만 난 주위에 다음과 같은 작업 사용 :이, 당신이 윈도우 폼과 콘솔 응용 프로그램을 실행하고 양식의 전면에 콘솔을 가지고 싶다면
을 우리가 위에서 보았 듯이 이것을하기에는 제정신이 아닙니다. 그러나 Windows Forms에서이 작업을 수행하는 방법이 있습니다. BringToFront()
및 SendToBack()
을 사용하여 프로그램의 창 레이어를 변경할 수 있습니다. 프로그램에는 양식과 콘솔이 있었고 콘솔이 앞에 있어야하므로 양식을 뒤쪽으로 보냈습니다.
사용자가 멀티 태스킹을하고 콘솔을 모든 것 앞에두고 싶다면 콘솔이 작동하지 않습니다. 그러나 프로그램의 창에 영향을 주려는 경우 적절한 해결 방법입니다.
어떤 상황에서 그리고 왜 이것을하고 싶습니까? 합법적 인 경우가 있지만 대개 이런 종류의 문제는 가치가있는 것보다 더 큰 문제입니다. – ICR