【发布时间】:2018-10-27 21:40:58
【问题描述】:
如何确保我的 C# 控制台应用程序始终位于前面? 即如果有人点击离开控制台,我如何检测到控制台失去焦点并将其带回前面? 我有这个 C# 控制台应用程序正在等待用户扫描条形码,如果由于某种原因有人点击离开控制台窗口,那么条形码数据将“丢失”。 我看了一下发布在另一个线程上的这段代码;但是,我似乎无法让它为我工作: bring a console window to front in c# 感谢@ILan,这段代码将控制台保持在所有窗口的顶部,但它没有设置“焦点”来继续捕获传入的数据。
class Program
{
[DllImport("user32.dll")]
static extern bool SetWindowPos(IntPtr hWnd,
IntPtr hWndInsertAfter,
int X,
int Y,
int cx,
int cy,
uint uFlags);
static readonly IntPtr HWND_TOPMOST = new IntPtr(-1);
const uint SWP_NOSIZE = 0x0001, SWP_NOMOVE = 0x0002, SWP_SHOWWINDOW = 0x0040;
[DllImport("kernel32.dll")]
static extern IntPtr GetConsoleWindow();
static void Main()
{
IntPtr handle = GetConsoleWindow();
SetWindowPos(handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_SHOWWINDOW);
Console.WriteLine($"Hello handle: {handle}");
Console.ReadLine();
}
}
【问题讨论】:
-
@CamiloTerevinto,它在哪里被调用... ;-)
-
既然你有窗口的句柄,你可以使用this question中的代码把它放在最上面。
-
@CamiloTerevinto,哈哈,我没看到。我刚刚看到 Console.WriteLine 然后掩盖了该行的其余部分。哦,天哪,我很愚蠢 ;-) (现在最好删除我愚蠢的 cmets...)
-
@elgonzo 发生在我们所有人身上 :)