Я пытаюсь создать небольшое приложение, выполняющее определенные функции при нажатии клавиш F (F1, F2 & F3 в текущем контексте). Недавно я начал играть с горячими клавишами на C#, но я не могу понять, как это понять. Я пробовал переименовывать System.Windows.Input.KeyEventArgs в System.Windows.Forms.KeyEventArgs, но он не работает. Я не уверен, что это лучший/правильный способ сделать это, но да, логически это имеет смысл для меня. activeTracker действует как триггер для моего цикла, а другие клавиши F отправляют текстовые команды.C# WPF Настройка F HotKeys
namespace WpfApplication1
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
[DllImport("user32.dll", CharSet = CharSet.Unicode)]
public static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
[DllImport("user32.dll")]
public static extern bool SetForegroundWindow(IntPtr hWnd);
bool activeTracker = false;
private void btnActive_Click(object sender, RoutedEventArgs e)
{
while (activeTracker)
{
IntPtr WindowHandle = FindWindow(txtClassName.Text, txtWindowTitle.Text);
if (WindowHandle == IntPtr.Zero)
{
System.Windows.MessageBox.Show(txtWindowTitle.Text + " does not exist");
return;
}
SetForegroundWindow(WindowHandle);
SendKeys.SendWait(txtMessage1.Text + "{ENTER}");
System.Threading.Thread.Sleep(TimeSpan.FromSeconds(1));
SendKeys.SendWait(txtMessage2.Text + "{ENTER}");
}
}
private void Window_KeyDown(object sender, System.Windows.Input.KeyEventArgs e)
{
if (e.KeyCode == "F1")
{
activateTracker = True;
return;
}else if(e.KeyCode == "F2")
{
activateTracker = False;
return;
}else if(e.KeyCode == "F3")
{
SendKeys.SendWait(txtMessage5.Text + "{ENTER}");
}
}
}
}
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525" KeyDown="Window_KeyDown">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="108*"/>
<ColumnDefinition Width="409*"/>
</Grid.ColumnDefinitions>
<TextBox x:Name="txtWindowTitle" HorizontalAlignment="Left" Height="23" Margin="176,10,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="233" Visibility="Hidden" Text="Value1" Grid.Column="1"/>
<TextBlock HorizontalAlignment="Left" Margin="33,130,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Grid.Column="1"/>
<TextBox x:Name="txtClassName" HorizontalAlignment="Left" Height="23" Margin="176,41,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="233" Visibility="Hidden" Text="Value2" Grid.Column="1"/>
<Label Content="Message 1:" HorizontalAlignment="Left" Margin="10,37,0,0" VerticalAlignment="Top"/>
<Label Content="Message 2:" HorizontalAlignment="Left" Margin="10,68,0,0" VerticalAlignment="Top"/>
<TextBox x:Name="txtMessage1" HorizontalAlignment="Left" Height="23" Margin="96,40,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="370" Grid.ColumnSpan="2"/>
<Label Content="Message 3:" HorizontalAlignment="Left" Margin="10,99,0,0" VerticalAlignment="Top"/>
<TextBox x:Name="txtMessage2" HorizontalAlignment="Left" Height="23" Margin="96,72,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="370" Grid.ColumnSpan="2"/>
<TextBox x:Name="txtMessage3" HorizontalAlignment="Left" Height="23" Margin="96,102,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="370" Grid.ColumnSpan="2"/>
<Button x:Name="btnActive" Content="Activate" HorizontalAlignment="Left" Margin="56,237,0,0" VerticalAlignment="Top" Width="75" Click="btnActive_Click" Grid.ColumnSpan="2"/>
<TextBox x:Name="txtMessage5" HorizontalAlignment="Left" Height="23" Margin="96,146,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="370" Grid.ColumnSpan="2"/>
</Grid>
</Window>
Установили ли вы контрольную точку в обработчике события 'Window_KeyDown', чтобы убедиться, что она вызвана? Вы не показываете XAML, поэтому я могу только предположить, что вы добавляете событие KeyDown. – ChrisF
Добавил мой код XAML к моему сообщению, не совсем уверен, что вы имеете в виду, установив точку останова. – HereToLearn
Используйте отладчик Visual Studio - «F5». Нажмите «F9» в строке, где вы хотите, чтобы код остановился, чтобы вы могли проверить переменные и проверить, что они являются значениями, которые вы ожидаете от них. – ChrisF