Frage

Gibt es eine Möglichkeit ein Standard-Windows-Forms-Anwendung zu bekommen, um festzustellen, ob die Umschalttaste -Taste wird beim Anwendungsstart gedrückt gehalten wird - ohne Haken Windows mit

Ich würde im Idealfall den Workflow wie von normal zu ändern, wenn die Shift-Taste gedrückt gehalten wird, wenn die EXE-Datei ausgeführt wird.

War es hilfreich?

Lösung

Hier ist ein Artikel über das Lesen Schlüsselstaaten (und Maus) direkt an.

Andere Tipps

Die ModifierKeys Eigenschaft sieht ideal:

private void Form1_Load(object sender, EventArgs e)
{
    if ( (ModifierKeys & Keys.Shift) != 0)
    {
      MessageBox.Show("Shift is pressed");
    }
}

Überprüfen Sie Control.ModifierKeys ...

    [STAThread]
    static void Main(string[] args)
    {
        if (Control.ModifierKeys == Keys.ShiftKey)
        {
            // Do something special
        }
    }

Ich weiß, dass dieser Beitrag ist ziemlich alt, aber ich lief in dieser Frage und fixiert sie durch Jamies Code zu ändern:

[STAThread]
static void Main(string[] args)
{
    if (Control.ModifierKeys.ToString() == "Shift")
    {
        // Do something special
    }
}

Ich weiß, das Super alt ist, aber es störte mich ein wenig Menschen kämpfen mit diesem zu sehen. ModifierKeys ist ein Bit-Feld, so unter Berufung auf .ToString () oder == zu sehen, ob die Shift-Taste gedrückt ist, bestenfalls, unzuverlässig und nicht die richtige Verwendung eines Bit-Feldes:

public enum ModifierKeys
{
    /// <summary>No modifiers are pressed.</summary>
    None = 0,

    /// <summary>The ALT key.</summary>
    Alt = 1,

    /// <summary>The CTRL key.</summary>
    Control = 2,

    /// <summary>The SHIFT key.</summary>
    Shift = 4,

    /// <summary>The Windows logo key.</summary>
    // Windows = 8, No longer leaked
}

Entweder keine oder eine beliebige Kombination von Alt, Kontrolle, oder Umschalttaste gedrückt werden kann, so sollte die Prüfung sein:

if ((ModifierKeys & Keys.Shift) != 0)
{
    MessageBox.Show("Shift is pressed");
}

Ich werde bis-Abstimmung Dan Antwort, sobald ich das Recht verdienen, dies zu tun :-) .Net 4+ die hasFlag () -Methode als auch beinhaltet, aber ich bin daran gewöhnt, Operationen bitweise so habe ich es nicht verwendet . Weitere Informationen über die bitweise Operationen, Fahnen, (mit) Wahrheitstabellen und anderen Leckerbissen zu sehen:

http://geekswithblogs.net/BlackRabbitCoder/archive/2010/07/22/c-fundamentals-combining-enum-values-with-bit-flags.aspx

Was Sie in der Quelle zu sehen ist noch faszinierender:

/// <devdoc>
///     Retrieves the current state of the modifier keys. This will check the
///     current state of the shift, control, and alt keys.
/// </devdoc>
public static Keys ModifierKeys {
    get {
        Keys modifiers = 0;
        // SECURITYNOTE : only let state of Shift-Control-Alt out...
        //
        if (UnsafeNativeMethods.GetKeyState((int)Keys.ShiftKey) < 0) modifiers |= Keys.Shift;
        if (UnsafeNativeMethods.GetKeyState((int)Keys.ControlKey) < 0) modifiers |= Keys.Control;
        if (UnsafeNativeMethods.GetKeyState((int)Keys.Menu) < 0) modifiers |= Keys.Alt;
        return modifiers;
    }
}

Diese Implementierung sendet nur den Zustand der Umschalttaste, Steuerung und Alt. Der Tastenzustand von Windows ist nicht enthalten.

Wenn Sie den Schlüssel Zustand vor einer Form erkannt werden sollen oder Steuerelement erstellt wird, vielleicht in dem Main () -Methode können Sie verrückt wird.

Vielleicht möchten Sie auf diese:

if (VirtualKeyState.VK_SHIFT.IsKeyPressed())
{
    Debugger.Launch();
}

Erstellen Sie eine einfache Erweiterung Methode:

public static class KeyAssist
{
    public const int KEY_PRESSED = 0x8000;

    public static bool IsKeyPressed(this VirtualKeyState key) => Convert.ToBoolean(Native.GetKeyState(key) & KEY_PRESSED);
}

Import:

[DllImport("user32.dll")]
public static extern short GetKeyState(VirtualKeyState virtualKeyState);

Erstellen Sie die folgende Enumeration (oder einen Teilbereich, wenn Sie bitte) (von PInvoke):

public enum VirtualKeyState
{

    VK_LBUTTON = 0x01,
    VK_RBUTTON = 0x02,
    VK_CANCEL = 0x03,
    VK_MBUTTON = 0x04,
    VK_XBUTTON1 = 0x05,
    VK_XBUTTON2 = 0x06,
    VK_BACK = 0x08,
    VK_TAB = 0x09,
    VK_CLEAR = 0x0C,
    VK_RETURN = 0x0D,
    VK_SHIFT = 0x10,
    VK_CONTROL = 0x11,
    VK_MENU = 0x12,
    VK_PAUSE = 0x13,
    VK_CAPITAL = 0x14,
    VK_KANA = 0x15,
    VK_HANGEUL = 0x15,           
    VK_HANGUL = 0x15,
    VK_JUNJA = 0x17,
    VK_FINAL = 0x18,
    VK_HANJA = 0x19,
    VK_KANJI = 0x19,
    VK_ESCAPE = 0x1B,
    VK_CONVERT = 0x1C,
    VK_NONCONVERT = 0x1D,
    VK_ACCEPT = 0x1E,
    VK_MODECHANGE = 0x1F,
    VK_SPACE = 0x20,
    VK_PRIOR = 0x21,
    VK_NEXT = 0x22,
    VK_END = 0x23,
    VK_HOME = 0x24,
    VK_LEFT = 0x25,
    VK_UP = 0x26,
    VK_RIGHT = 0x27,
    VK_DOWN = 0x28,
    VK_SELECT = 0x29,
    VK_PRINT = 0x2A,
    VK_EXECUTE = 0x2B,
    VK_SNAPSHOT = 0x2C,
    VK_INSERT = 0x2D,
    VK_DELETE = 0x2E,
    VK_HELP = 0x2F,
    VK_LWIN = 0x5B,
    VK_RWIN = 0x5C,
    VK_APPS = 0x5D,
    VK_SLEEP = 0x5F,
    VK_NUMPAD0 = 0x60,
    VK_NUMPAD1 = 0x61,
    VK_NUMPAD2 = 0x62,
    VK_NUMPAD3 = 0x63,
    VK_NUMPAD4 = 0x64,
    VK_NUMPAD5 = 0x65,
    VK_NUMPAD6 = 0x66,
    VK_NUMPAD7 = 0x67,
    VK_NUMPAD8 = 0x68,
    VK_NUMPAD9 = 0x69,
    VK_MULTIPLY = 0x6A,
    VK_ADD = 0x6B,
    VK_SEPARATOR = 0x6C,
    VK_SUBTRACT = 0x6D,
    VK_DECIMAL = 0x6E,
    VK_DIVIDE = 0x6F,
    VK_F1 = 0x70,
    VK_F2 = 0x71,
    VK_F3 = 0x72,
    VK_F4 = 0x73,
    VK_F5 = 0x74,
    VK_F6 = 0x75,
    VK_F7 = 0x76,
    VK_F8 = 0x77,
    VK_F9 = 0x78,
    VK_F10 = 0x79,
    VK_F11 = 0x7A,
    VK_F12 = 0x7B,
    VK_F13 = 0x7C,
    VK_F14 = 0x7D,
    VK_F15 = 0x7E,
    VK_F16 = 0x7F,
    VK_F17 = 0x80,
    VK_F18 = 0x81,
    VK_F19 = 0x82,
    VK_F20 = 0x83,
    VK_F21 = 0x84,
    VK_F22 = 0x85,
    VK_F23 = 0x86,
    VK_F24 = 0x87,
    VK_NUMLOCK = 0x90,
    VK_SCROLL = 0x91,
    VK_OEM_NEC_EQUAL = 0x92,        
    VK_OEM_FJ_JISHO = 0x92,     
    VK_OEM_FJ_MASSHOU = 0x93,          
    VK_OEM_FJ_TOUROKU = 0x94,      
    VK_OEM_FJ_LOYA = 0x95,      
    VK_OEM_FJ_ROYA = 0x96,      
    VK_LSHIFT = 0xA0,
    VK_RSHIFT = 0xA1,
    VK_LCONTROL = 0xA2,
    VK_RCONTROL = 0xA3,
    VK_LMENU = 0xA4,
    VK_RMENU = 0xA5,
    VK_BROWSER_BACK = 0xA6,
    VK_BROWSER_FORWARD = 0xA7,
    VK_BROWSER_REFRESH = 0xA8,
    VK_BROWSER_STOP = 0xA9,
    VK_BROWSER_SEARCH = 0xAA,
    VK_BROWSER_FAVORITES = 0xAB,
    VK_BROWSER_HOME = 0xAC,
    VK_VOLUME_MUTE = 0xAD,
    VK_VOLUME_DOWN = 0xAE,
    VK_VOLUME_UP = 0xAF,
    VK_MEDIA_NEXT_TRACK = 0xB0,
    VK_MEDIA_PREV_TRACK = 0xB1,
    VK_MEDIA_STOP = 0xB2,
    VK_MEDIA_PLAY_PAUSE = 0xB3,
    VK_LAUNCH_MAIL = 0xB4,
    VK_LAUNCH_MEDIA_SELECT = 0xB5,
    VK_LAUNCH_APP1 = 0xB6,
    VK_LAUNCH_APP2 = 0xB7,
    VK_OEM_1 = 0xBA,      
    VK_OEM_PLUS = 0xBB,      
    VK_OEM_COMMA = 0xBC,      
    VK_OEM_MINUS = 0xBD,      
    VK_OEM_PERIOD = 0xBE,      
    VK_OEM_2 = 0xBF,      
    VK_OEM_3 = 0xC0,      
    VK_OEM_4 = 0xDB,      
    VK_OEM_5 = 0xDC,      
    VK_OEM_6 = 0xDD,      
    VK_OEM_7 = 0xDE,      
    VK_OEM_8 = 0xDF,
    VK_OEM_AX = 0xE1,         
    VK_OEM_102 = 0xE2,          
    VK_ICO_HELP = 0xE3,       
    VK_ICO_00 = 0xE4,       
    VK_PROCESSKEY = 0xE5,
    VK_ICO_CLEAR = 0xE6,
    VK_PACKET = 0xE7,
    VK_OEM_RESET = 0xE9,
    VK_OEM_JUMP = 0xEA,
    VK_OEM_PA1 = 0xEB,
    VK_OEM_PA2 = 0xEC,
    VK_OEM_PA3 = 0xED,
    VK_OEM_WSCTRL = 0xEE,
    VK_OEM_CUSEL = 0xEF,
    VK_OEM_ATTN = 0xF0,
    VK_OEM_FINISH = 0xF1,
    VK_OEM_COPY = 0xF2,
    VK_OEM_AUTO = 0xF3,
    VK_OEM_ENLW = 0xF4,
    VK_OEM_BACKTAB = 0xF5,
    VK_ATTN = 0xF6,
    VK_CRSEL = 0xF7,
    VK_EXSEL = 0xF8,
    VK_EREOF = 0xF9,
    VK_PLAY = 0xFA,
    VK_ZOOM = 0xFB,
    VK_NONAME = 0xFC,
    VK_PA1 = 0xFD,
    VK_OEM_CLEAR = 0xFE
}

Wie auch immer, dies ist nur als Referenz, so ist es nicht so viel zu raten geht.

HTH,

Colby

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top