#c# #windows #winforms
Вопрос:
Я использовал следующее крысиное гнездо кода, чтобы попытаться сохранить окно моей программы киоска вверху и текстовое поле внутри него выбранным:
// Keeps the form on top and the text box selected
private void SecurityTimer_Tick(object sender, EventArgs e)
{
uint foreThread = GetWindowThreadProcessId(GetForegroundWindow(), IntPtr.Zero);
uint appThread = GetCurrentThreadId();
const uint SW_SHOW = 5;
if (foreThread != appThread)
{
AttachThreadInput(foreThread, appThread, true);
BringWindowToTop(this.Handle);
ShowWindow(this.Handle, SW_SHOW);
AttachThreadInput(foreThread, appThread, false);
}
else
{
BringWindowToTop(this.Handle);
ShowWindow(this.Handle, SW_SHOW);
}
this.TopMost = false;
this.TopMost = true;
this.Activate();
CardTextBox.Focus();
}
Когда я запускаю его с помощью кнопки «Начать отладку» в Visual Studio, код работает должным образом и сохраняет окно вверху, не позволяя отображать меню «Пуск» и переключатель задач Win Tab. Однако, когда я напрямую запускаю скомпилированный файл .exe из проводника, это не останавливает открытие других программ и только заставляет программу мигать оранжевым цветом на панели задач. Я тоже пытался this.Activate()
и this.Focus()
, но они тоже не сработали. Я нахожусь в Windows 10. Может кто-нибудь, пожалуйста, рассказать мне о проблеме с моим кодом? Спасибо!
Комментарии:
1. делает ли он это также, когда вы запускаете его от имени администратора?
2. @FranzGleichmann К сожалению, да! Единственный способ заставить его работать по назначению-запустить его из интегрированной среды разработки, а не из проводника.