मुझे यह पता लगाने में सक्षम होना चाहिए कि शिफ्ट कुंजी आयोजित की जा रही है, लेकिन मैं इसे निर्धारित करने के लिए ईवेंट या वैश्विक चर का उपयोग नहीं करना चाहता हूं। क्या सी # में कोई एपीआई है जो आपको यह पूछने देती है कि ईवेंट का उपयोग करने के बजाए वर्तमान में कौन सी कुंजी दबाई जाती है?विंडोज़ फॉर्म में ईवेंट का उपयोग किये बिना Shift कुंजी दबाया जाता है?
उत्तर
यह सुनिश्चित नहीं है कि यह सी # में उपलब्ध है लेकिन आप GetAsyncKeyState पर कॉल कर सकते हैं। विधि विधि कहने पर यह विधि एक कुंजी की स्थिति लौटाती है।
इसे सी # से कॉल करने के लिए आपको किसी अन्य Win32 API की तरह इंटरऑप का उपयोग करने की आवश्यकता होगी।
Form.ModifierKeys
(स्थिर संपत्ति)
आप एक low-level keyboard hook स्थापित कर सकते हैं।
using System;
using System.Diagnostics;
using System.Windows.Forms;
using System.Runtime.InteropServices;
class InterceptKeys
{
private const int WH_KEYBOARD_LL = 13;
private const int WM_KEYDOWN = 0x0100;
private static LowLevelKeyboardProc _proc = HookCallback;
private static IntPtr _hookID = IntPtr.Zero;
public static void Main()
{
_hookID = SetHook(_proc);
Application.Run();
UnhookWindowsHookEx(_hookID);
}
private static IntPtr SetHook(LowLevelKeyboardProc proc)
{
using (Process curProcess = Process.GetCurrentProcess())
using (ProcessModule curModule = curProcess.MainModule)
{
return SetWindowsHookEx(WH_KEYBOARD_LL, proc,
GetModuleHandle(curModule.ModuleName), 0);
}
}
private delegate IntPtr LowLevelKeyboardProc(
int nCode, IntPtr wParam, IntPtr lParam);
private static IntPtr HookCallback(
int nCode, IntPtr wParam, IntPtr lParam)
{
if (nCode >= 0 && wParam == (IntPtr)WM_KEYDOWN)
{
int vkCode = Marshal.ReadInt32(lParam);
Console.WriteLine((Keys)vkCode);
}
return CallNextHookEx(_hookID, nCode, wParam, lParam);
}
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
private static extern IntPtr SetWindowsHookEx(int idHook,
LowLevelKeyboardProc lpfn, IntPtr hMod, uint dwThreadId);
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
private static extern bool UnhookWindowsHookEx(IntPtr hhk);
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
private static extern IntPtr CallNextHookEx(IntPtr hhk, int nCode,
IntPtr wParam, IntPtr lParam);
[DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
private static extern IntPtr GetModuleHandle(string lpModuleName);
}
if ((Control.ModifierKeys & Keys.Shift) != 0)
यह भी true
हो सकता है अगर एक और संशोधक कुंजी भी नीचे है (जैसे, Ctrl + Shift)। आप चाहे अकेले शिफ्ट किसी अन्य बिना संशोधक दबाया जाता है की जाँच करना चाहते हैं, का उपयोग
if (Control.ModifierKeys == Keys.Shift)
ध्यान दें कि इस true
हो सकता है अगर एक और गैर संशोधक नीचे है (उदाहरण के लिए, Shift + A)। यदि आप यह जांचना चाहते हैं कि शिफ्ट और केवल Shift दबाया गया है, तो आपको एक एपीआई कॉल का उपयोग करना होगा।
आप एक वर्ग है कि Control
(जैसे कि एक फार्म के रूप में) विरासत में हैं, तो आप Control
क्वालीफायर निकाल सकते हैं। (static
गुणों को विरासत कक्षाओं में क्वालिफायर की आवश्यकता नहीं है)
- 1. कैसे बताएं कि माउसडाउन ईवेंट में Shift दबाया जा रहा है या नहीं?
- 2. अपने विचारों का उपयोग किये बिना सुरक्षित सेवाओं का उपयोग
- 3. मार्गों का उपयोग किये बिना Ember.js में राज्य?
- 4. जब कोई कुंजी दबाया जाता है तो ध्वनि चलाएं
- 5. सामग्री प्रदाताओं का उपयोग किये बिना किसी अन्य एपीके में संसाधनों का उपयोग करना संभव है?
- 6. jQuery का उपयोग किये बिना एक अच्छा क्रॉस-ब्राउज़र "तैयार" ईवेंट?
- 7. WinMain का उपयोग किये बिना मैं विंडोज़ एप्लिकेशन कैसे लिख सकता हूं?
- 8. विंडोज़ फॉर्म
- 9. सी # - यह पता लगाना कि कोई संदर्भ मेनू खोलते समय SHIFT कुंजी आयोजित की जाती है
- 10. क्या 'Ctrl' कुंजी दबाया गया है?
- 11. ऑपरेटरों का उपयोग किये बिना दो नंबर जोड़ना
- 12. ग्राफ़िक्स ऑब्जेक्ट का उपयोग किये बिना स्ट्रिंग को मापें?
- 13. मुझे कैसे पता चलेगा कि RawInput का उपयोग करके शिफ्ट दबाया जाता है या नहीं?
- 14. फ्लैश ऑथरिंग टूल का उपयोग किये बिना .fla फ़ाइल खोलें
- 15. क्या विंडोज़ फॉर्म पर डब्ल्यूपीएफ का उपयोग करना बेहतर है?
- 16. विंडोज़ फॉर्म का आकार सहेजें
- 17. क्या UINavigationController का उपयोग किये बिना आईओएस में दृश्य बदलने का कोई तरीका है?
- 18. विंडोज़ फॉर्म एप्लिकेशन में फॉर्म लोड के दौरान चयनित वैल्यू चेंज() ईवेंट फायरिंग
- 19. जावा माउस दबाया गया - घटनाओं के बिना
- 20. लूप का उपयोग किये बिना पर्ल में दो हैंश में कैसे शामिल हो सकता है?
- 21. विंडोज़ फॉर्म ऐप में फ्लिकरिंग
- 22. विंडोज़ फॉर्म में सामग्री बदलें
- 23. विंडोज़ फॉर्म में एंटर दबाकर सबमिट करें
- 24. FileSystemWatcher.SynchronizingObject बिना किसी फॉर्म के
- 25. क्या ऑफसेट का उपयोग किये बिना साझा मेमोरी में पॉइंटर्स स्टोर करना संभव है?
- 26. जीआईटी और एसएसएच, किस कुंजी का उपयोग किया जाता है?
- 27. बटन कैसे दिखाना है जैसे इसे दबाया जाता है?
- 28. जब बच्चे के नियंत्रण पर ध्यान केंद्रित किया जाता है तो फॉर्म पर कैप्चर कीप ईवेंट
- 29. क्या UITableViewDelegate का उपयोग किये बिना UITableViewCell का आकार बदलना संभव है?
- 30. क्या भंडार का उपयोग किये बिना परियोजनाओं पर सोनार चलाने का कोई तरीका है?
यह काम करता है, लेकिन संपत्ति को नियंत्रण फॉर्म से विरासत में नहीं मिला है –