दिलचस्प पोस्ट
कच्चे_इनपुट और टाइमआउट उदाहरण के लिए स्विच करें? निपटाना, इसे कब कहा जाता है? नकारात्मक संख्याओं के साथ मॉड्यूलो ऑपरेशन यूनिट टेस्टिंग: डेटटाइम.अब $ ($) के बजाए $ का उपयोग करता है क्या एक प्रदर्शन वृद्धि प्रदान करता है? लिंक को क्लिक करने के बाद फ़ाइल को सहेजने के लिए एक ब्राउज़र को बल दें स्लैश के साथ सीएसएस में फ़ॉन्ट का आकार जावा के साथ स्थानीय मशीन पर मैक पता प्राप्त करें डेटा के साथ एक्सेल में पंक्तियों की संख्या कैसे गिनेंगी? PHP – स्ट्रिंग में वैरिएबल सम्मिलित या सीधे सम्मिलित करें सीएसएस का इस्तेमाल करते हुए माता-पिता डीआईवी की तुलना में बाल DIV की चौड़ाई व्यापक बनाने का तरीका क्या है? जावा के माड्यूलस को नकारात्मक संख्याओं के साथ करना चाहिए जैसा व्यवहार करना सबसे अच्छा तरीका है? एक्सएमएल सीरियललाइज़ेशन और इनहेराईटेड टाइप एक ही मशीन पर इंटरनेट एक्सप्लोरर 6, इंटरनेट एक्सप्लोरर 7 और इंटरनेट एक्सप्लोरर 8 चल रहा है

मैं माउस चाल घटना कैसे कैप्चर कर सकता हूं

मैं अपने मुख्य रूप में माउस चाल घटना को कैप्चर करना चाहूंगा। यद्यपि मैं मुख्य प्रपत्र के लिए MouseEventHandler को तार करने में सक्षम हूं, लेकिन जब कोई कर्सर किसी यूज़रट्रॉंट या किसी अन्य नियंत्रण के ऊपर होता है तो ईवेंट अब आग नहीं हो जाता। मैं कैसे सुनिश्चित करूं कि मेरे पास हमेशा माउस की स्थिति है

वेब के समाधान से एकत्रित समाधान "मैं माउस चाल घटना कैसे कैप्चर कर सकता हूं"

आप निम्न स्तर के माउस हुक का उपयोग कर सकते हैं यह उदाहरण देखें और हुक कॉलबैक में WM_MOUSEMOVE मैसेज की जांच करें

आप माउस इवेंट्स को पकड़ने और स्थिति प्राप्त करने के लिए एक घटना को ट्रिगर करने के लिए आईमैसेफ़फ़िल्टर क्लास का उपयोग भी कर सकते हैं (ध्यान दें: यह केवल खिड़की पर ही स्थिति प्राप्त होगी, इसके बाहर नहीं):

 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; namespace GlobalMouseEvents { public partial class Form1 : Form { public Form1() { GlobalMouseHandler gmh = new GlobalMouseHandler(); gmh.TheMouseMoved += new MouseMovedEvent(gmh_TheMouseMoved); Application.AddMessageFilter(gmh); InitializeComponent(); } void gmh_TheMouseMoved() { Point cur_pos = System.Windows.Forms.Cursor.Position; System.Console.WriteLine(cur_pos); } } public delegate void MouseMovedEvent(); public class GlobalMouseHandler : IMessageFilter { private const int WM_MOUSEMOVE = 0x0200; public event MouseMovedEvent TheMouseMoved; #region IMessageFilter Members public bool PreFilterMessage(ref Message m) { if (m.Msg == WM_MOUSEMOVE) { if (TheMouseMoved != null) { TheMouseMoved(); } } // Always allow message to continue to the next filter control return false; } #endregion } } 

यहाँ समाधान है हालांकि मैं एक समान दृष्टिकोण के साथ एक और जवाब देख सकता हूं। लेकिन जब मैंने इसे लिखा था, मैं इसे पोस्ट करना चाहता हूं। यहां माउस मेसेजफ़िल्टर में एक स्थैतिक ईवेंट कॉल माउस माउव है, जिसे आप एप्लिकेशन के भीतर कहीं से भी सब्सक्राइब कर सकते हैं।

 static class Program { [STAThread] static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.AddMessageFilter(new MouseMessageFilter()); MouseMessageFilter.MouseMove += new MouseEventHandler(OnGlobalMouseMove); Application.Run(new MainForm()); } static void OnGlobalMouseMove(object sender, MouseEventArgs e) { Console.WriteLine(e.Location.ToString()); } } class MouseMessageFilter : IMessageFilter { public static event MouseEventHandler MouseMove = delegate { }; const int WM_MOUSEMOVE = 0x0200; public bool PreFilterMessage(ref Message m) { if (m.Msg == WM_MOUSEMOVE) { Point mousePosition = Control.MousePosition; MouseMove(null, new MouseEventArgs( MouseButtons.None, 0, mousePosition.X, mousePosition.Y,0)); } return false; } } 
 public partial class frmCaptureMouse : Form { [DllImport("user32.dll")] static extern IntPtr SetCapture(IntPtr hWnd); public frmCaptureMouse() { InitializeComponent(); } private void frmCaptureMouse_MouseMove(object sender, MouseEventArgs e) { try { lblCoords.Text = e.Location.X.ToString() + ", " + e.Location.Y.ToString(); } catch (Exception ex) { MessageBox.Show(ex.Message); } } private void btnCapture_Click(object sender, EventArgs e) { try { SetCapture(this.Handle); } catch (Exception ex) { MessageBox.Show(ex.Message); } } } 

मैंने @ SwDevMan81 द्वारा प्रदान किए गए उपरोक्त नमूनों की कोशिश की यद्यपि यह अच्छी तरह से काम किया था, रैंडी गैमगे के मुद्दे पर भी मुझे यह बताया गया था कि चूंकि माउस नहीं चल रहा है, चूंकि माउसमॉड फंक्शन को लगातार फोन किया जाता है। किसी भी मामले में मैं यही आया हूं:

फ़ॉर्म कन्स्ट्रक्टर में:

 GlobalMouseHandler.MouseMovedEvent += GlobalMouseHandler_MouseMovedEvent; Application.AddMessageFilter(new GlobalMouseHandler()); InitializeComponent(); 

ईवेंट हैंडलर:

 private void GlobalMouseHandler_MouseMovedEvent(object sender, MouseEventArgs e) { try { //Do whatever ... } catch { } } 

और मेरे थोड़ा बदलते ग्लोबलमाउसहैंडलर वर्ग:

 public class GlobalMouseHandler : IMessageFilter { private const int WM_MOUSEMOVE = 0x0200; private System.Drawing.Point previousMousePosition = new System.Drawing.Point(); public static event EventHandler<MouseEventArgs> MouseMovedEvent = delegate { }; #region IMessageFilter Members public bool PreFilterMessage(ref System.Windows.Forms.Message m) { if (m.Msg == WM_MOUSEMOVE) { System.Drawing.Point currentMousePoint = Control.MousePosition; if (previousMousePosition != currentMousePoint) { previousMousePosition = currentMousePoint; MouseMovedEvent(this, new MouseEventArgs(MouseButtons.None, 0, currentMousePoint.X, currentMousePoint.Y, 0)); } } // Always allow message to continue to the next filter control return false; } #endregion } 

मुझे उम्मीद है कि कोई इसे इस्तेमाल कर सकता है