una tomar tiene teclado tecla pantalla pant impr hacer cómo cual como capturar captura activa c# visual-studio visual-studio-2008 events keydown

c# - tomar - ¿Cómo capturo la tecla Imprimir pantalla?



cómo tomar una captura de pantalla en windows 10 (2)

Mi programa debe capturar cuando la tecla Imprimir pantalla está presionada pero no funciona (sin embargo, funciona con otras teclas).

Supongo que esto tiene algo que ver con el secuestro de Windows de mi autoridad y, como todavía soy nuevo en esto, me encantaría saber cómo puedo solucionar este problema.

Aquí está mi código actual:

namespace Boom_Screenshot_ { /// <summary> /// Interaction logic for Window1.xaml /// </summary> public partial class Window1 : Window { //SETTINGS Key TRIGGER_KEY = Key.PrintScreen; public Window1() { InitializeComponent(); } private void Window_KeyDown(object sender, KeyEventArgs e) { if (e.Key == TRIGGER_KEY) { MessageBox.Show("''PrintScreen'' was pressed."); } } } }


A continuación está mi solución WPF pura.

Podemos lograr esto en xaml utilizando la clase NavigationCommands (Namespace: System.Window.Input) que proporciona un conjunto estándar de comandos de navegación (por ejemplo, NextPage, PreviousPage, Refresh, Search, etc.)

Estrategia de implementación:

Así que podemos llamar a cualquier código personalizado para ejecutar en la actualización de la aplicación usando NavigationCommands.Refresh como

<UserControl.CommandBindings> <CommandBinding Command=''NavigationCommands.Refresh'' Executed="ApplicationRefresh_Executed"> </CommandBinding> </UserControl.CommandBindings>

Ahora en código detrás de la clase de UserControl podemos definir el método como

private void ApplicationRefresh_Executed(object sender, ExecutedRoutedEventArgs e) { // Implementation goes here. }


Tengo una respuesta para ti que encontré aquí (no hablo chino, así que no me preguntes qué dice :). Tienes que establecer un gancho. Él proporciona una clase de contenedor. Repito un código aquí sin los caracteres chinos. RegisterHotKey.cs ...

using System; using System.Runtime.InteropServices; using System.Windows.Forms; namespace TestKeydown { public class RegisterHotKeyClass { private IntPtr m_WindowHandle = IntPtr.Zero; private MODKEY m_ModKey = MODKEY.MOD_CONTROL; private Keys m_Keys = Keys.A; private int m_WParam = 10000; private bool Star = false; private HotKeyWndProc m_HotKeyWnd = new HotKeyWndProc(); public IntPtr WindowHandle { get { return m_WindowHandle; } set { if (Star)return; m_WindowHandle = value; } } public MODKEY ModKey { get { return m_ModKey; } set { if (Star)return; m_ModKey = value; } } public Keys Keys { get { return m_Keys; } set { if (Star)return; m_Keys = value; } } public int WParam { get { return m_WParam; } set { if (Star)return; m_WParam = value; } } public void StarHotKey() { if (m_WindowHandle != IntPtr.Zero) { if (!RegisterHotKey(m_WindowHandle, m_WParam, m_ModKey, m_Keys)) { throw new Exception(""); } try { m_HotKeyWnd.m_HotKeyPass = new HotKeyPass(KeyPass); m_HotKeyWnd.m_WParam = m_WParam; m_HotKeyWnd.AssignHandle(m_WindowHandle); Star = true; } catch { StopHotKey(); } } } private void KeyPass() { if (HotKey != null) HotKey(); } public void StopHotKey() { if (Star) { if (!UnregisterHotKey(m_WindowHandle, m_WParam)) { throw new Exception(""); } Star = false; m_HotKeyWnd.ReleaseHandle(); } } public delegate void HotKeyPass(); public event HotKeyPass HotKey; private class HotKeyWndProc : NativeWindow { public int m_WParam = 10000; public HotKeyPass m_HotKeyPass; protected override void WndProc(ref Message m) { if (m.Msg == 0x0312 && m.WParam.ToInt32() == m_WParam) { if (m_HotKeyPass != null) m_HotKeyPass.Invoke(); } base.WndProc(ref m); } } public enum MODKEY { MOD_ALT = 0x0001, MOD_CONTROL = 0x0002, MOD_SHIFT = 0x0004, MOD_WIN = 0x0008, } [DllImport("user32.dll")] public static extern bool RegisterHotKey(IntPtr wnd, int id, MODKEY mode, Keys vk); [DllImport("user32.dll")] public static extern bool UnregisterHotKey(IntPtr wnd, int id); } }

Llamar código en un formulario ...

private RegisterHotKeyClass _RegisKey = new RegisterHotKeyClass(); void _Regis_HotKey() { MessageBox.Show("ok"); } private void Form1_Load(object sender, EventArgs e) { _RegisKey.Keys = Keys.PrintScreen; _RegisKey.ModKey = 0; _RegisKey.WindowHandle = this.Handle; _RegisKey.HotKey += new RegisterHotKeyClass.HotKeyPass(_Regis_HotKey); _RegisKey.StarHotKey(); }