Я знаю, что об этом уже было несколько тем. Мне нужно, чтобы окно формы Windows всегда было сфокусировано, что означает, что если я нажму на блокнот или любую другую программу, она не будет вводить в нее никаких данных, а будет вводить данные только в текстовое поле формы Windows.
Я нашел этот код, который несколько работает, объяснит больше
//Delegates for safe multi-threading.
delegate void DelegateGetFocus();
private DelegateGetFocus m_getFocus;
Thread newThread;
public MemberLogin()
{
m_getFocus = new DelegateGetFocus(this.getFocus);
InitializeComponent();
spawnThread(keepFocus);
toggleFocusButton.Text = "OFF";
timer1.Interval = 2000;
textBox1.Select();
}
//test focus stuff
//Spawns a new Thread.
private void spawnThread(ThreadStart ts)
{
try
{
newThread = new Thread(ts);
newThread.Start();
}
catch (Exception e)
{
MessageBox.Show(e.Message, "Exception!", MessageBoxButtons.OK,
MessageBoxIcon.Error);
}
}
//Continuously call getFocus.
private void keepFocus()
{
while (true)
{
getFocus();
}
}
//Keeps Form on top and gives focus.
private void getFocus()
{
//If we need to invoke this call from another thread.
if (this.InvokeRequired)
{
this.Invoke(m_getFocus, new object[] { });
}
//Otherwise, we're safe.
else
{
//having this seemed to have kept my windows onTop at all times even when off
// this.TopMost = true;
this.TopMost = true;
this.Activate();
this.textBox1.Select();
this.textBox1.Focus();
}
}
этот код, кажется, работает хорошо, только когда мой проект открыт, что означает, что когда мой проект Visual Studio закрыт, окно находится вверху, но не имеет фокуса, что означает, что я могу печатать внутри других программ. Странная вещь, которую я обнаружил, заключается в том, что и в блокноте, и в моем текстовом поле была мигающая строка, указывающая, где вы пишете текст. Если я запускаю свое приложение из проекта Visual Studio, все работает так, как должно, и когда я пытаюсь щелкнуть другие окна, оно не дает мне доступа, чего я и хочу.
Поэтому я немного смущен тем, почему он работает правильно только с открытым проектом.
Также обратите внимание, что пока проект открыт, даже .exe и другие копии, которые я сделал, работают правильно, я закрываю решение проекта, и программа делает то, что я объяснил выше.
Только что провел еще несколько тестов, и, похоже, он работает правильно только тогда, когда этот процесс запущен vhost.exe, который является хост-процессом Visual Studio. Я отключил его в настройках, и когда я запускаю из VS, он работает нормально, но когда я запускаю только exe в папке bin, я все равно получаю странные результаты.
ИЗМЕНИТЬ
Вот небольшое видео, которое я сделал с моими результатами http://www.youtube.com/watch?v=1ozpHSRGnMo
Новое изменение
Что я сделал, чтобы исправить это, так это установил мое приложение в полноэкранном режиме, сделав это, чтобы пользователь мог щелкнуть другие окна, не закрывая это окно сначала.
this.FormBorderStyle = FormBorderStyle.None;
this.WindowState = FormWindowState.Maximized;