स्क्रीन पर वर्तमान माउस समन्वय कैसे प्राप्त करें? मुझे केवल Mouse.GetPosition()
पता है जो तत्व का माउसपोजिशन प्राप्त करते हैं, लेकिन मैं तत्व का उपयोग किए बिना समन्वय प्राप्त करना चाहता हूं।मैं WPF में वर्तमान माउस स्क्रीन निर्देशांक कैसे प्राप्त करूं?
उत्तर
रेचेल के जवाब पर अनुवर्ती कार्रवाई करने के लिए।
यहां दो तरीके हैं जिनमें आप WPF में माउस स्क्रीन समन्वय प्राप्त कर सकते हैं।
1. विंडोज फॉर्म का उपयोग करना। System.Windows.Forms
के लिए एक संदर्भ जोड़ेंpublic static Point GetMousePositionWindowsForms()
{
System.Drawing.Point point = Control.MousePosition;
return new Point(point.X, point.Y);
}
2.Using Win32
[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
internal static extern bool GetCursorPos(ref Win32Point pt);
[StructLayout(LayoutKind.Sequential)]
internal struct Win32Point
{
public Int32 X;
public Int32 Y;
};
public static Point GetMousePosition()
{
Win32Point w32Mouse = new Win32Point();
GetCursorPos(ref w32Mouse);
return new Point(w32Mouse.X, w32Mouse.Y);
}
सही होने पर, यदि आप कच्चे एक्स और वाई निर्देशांक लेते हैं और उनका उपयोग करके विंडो का स्थान सेट करते हैं, तो यह आपकी डीपीआई सेटिंग्स कुछ भी नहीं होने पर ठीक से काम नहीं करेगा लेकिन 100% (96dpi)। प्रश्न का अंतिम उत्तर यह सही है! – user195275
आपकी टिप्पणी पूरी तरह से सच है और इसे इस प्रश्न के सही उत्तर के रूप में चिह्नित नहीं किया जाना चाहिए! – Arash
क्या आप स्क्रीन या एप्लिकेशन से संबंधित निर्देशांक चाहते हैं?
यदि यह आवेदन के भीतर बस का उपयोग करें:
Mouse.GetPosition(Application.Current.MainWindow);
यदि नहीं, तो मेरा मानना है कि आप System.Windows.Forms
और उपयोग के लिए एक संदर्भ जोड़ सकते हैं:
System.Windows.Forms.Control.MousePosition;
यह सिस्टम होना चाहिए। Windows.Forms.Control.MousePosition –
या शुद्ध WPF में PointToScreen का उपयोग करें।
यह। अच्छा और साफ। –
"एक बिंदु को परिवर्तित करता है जो स्क्रीन निर्देशांक में एक बिंदु में दृश्य की वर्तमान समन्वय प्रणाली का प्रतिनिधित्व करता है।" माउस की स्थिति के साथ इसका क्या संबंध है? –
माउस। गेटपोजिशन एक प्वाइंट देता है, और प्वाइंट टॉस्क्रीन बिंदु को स्क्रीन समन्वय में परिवर्तित करता है। – erikH
यदि आप विभिन्न संकल्पों पर कई उत्तरों का प्रयास करते हैं, तो एकाधिक मॉनीटर वाले कंप्यूटर आदि। आप पाते हैं कि वे विश्वसनीय रूप से काम नहीं करते हैं। ऐसा इसलिए है क्योंकि आपको वर्तमान स्क्रीन से संबंधित माउस स्थिति प्राप्त करने के लिए एक ट्रांसफॉर्म का उपयोग करने की आवश्यकता है, न कि पूरे देखने वाले क्षेत्र में जो आपके सभी मॉनीटर होते हैं। ऐसा कुछ ... (जहां "यह" एक WPF विंडो है)।
var transform = PresentationSource.FromVisual(this).CompositionTarget.TransformFromDevice;
var mouse = transform.Transform(GetMousePosition());
public System.Windows.Point GetMousePosition()
{
System.Drawing.Point point = System.Windows.Forms.Control.MousePosition;
return new System.Windows.Point(point.X, point.Y);
}
ग्रेट धन्यवाद! मुझे उच्च संकल्प स्क्रीन के साथ समस्याएं थीं और परिवर्तन आश्चर्यजनक रूप से काम कर रहा है। – mdiehl13
@ mdiehl13 कोई चिंता नहीं :) खुशी है कि आपने मेरे ट्रांसफॉर्म को काम पर ठीक पाया – Alexandru
@ mdiehl13 स्पष्ट रूप से, बहुत से लोग केवल बेस केस का परीक्षण करते हैं। विभिन्न संकल्पों और इस तरह के परीक्षण के लिए +1। :) – Alexandru
यह रूपों का उपयोग या किसी DLLs आयात करने के लिए बिना काम करता है:
using System.Windows;
using System.Windows.Input;
/// <summary>
/// Gets the current mouse position on screen
/// </summary>
private Point GetMousePosition()
{
// Position of the mouse relative to the window
var position = Mouse.GetPosition(Window);
// Add the window position
return new Point(position.X + Window.Left, position.Y + Window.Top);
}
आप परिचालन प्रणाली से कर्सर की स्थिति को पकड़ने के लिए TimerDispatcher (WPF टाइमर अनुरूप) और Windows "हुक" के संयोजन का उपयोग कर सकते हैं।
[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool GetCursorPos(out POINT pPoint);
प्वाइंट एक प्रकाश struct
है। इसमें केवल एक्स, वाई फ़ील्ड हैं।
public MainWindow()
{
InitializeComponent();
DispatcherTimer dt = new System.Windows.Threading.DispatcherTimer();
dt.Tick += new EventHandler(timer_tick);
dt.Interval = new TimeSpan(0,0,0,0, 50);
dt.Start();
}
private void timer_tick(object sender, EventArgs e)
{
POINT pnt;
GetCursorPos(out pnt);
current_x_box.Text = (pnt.X).ToString();
current_y_box.Text = (pnt.Y).ToString();
}
public struct POINT
{
public int X;
public int Y;
public POINT(int x, int y)
{
this.X = x;
this.Y = y;
}
}
यह समाधान भी अक्सर या बहुत कम पैरामीटर पढ़ने के साथ समस्या का समाधान कर रहा है ताकि आप इसे स्वयं समायोजित कर सकें। लेकिन एक तर्क के साथ डब्ल्यूपीएफ विधि अधिभार के बारे में याद रखें जो ticks
milliseconds
का प्रतिनिधित्व नहीं कर रहा है।
TimeSpan(50); //ticks
- 1. कोको: स्क्रीन पर वर्तमान माउस स्थिति प्राप्त करना
- 2. मैं वर्तमान स्क्रीन कर्सर स्थिति कैसे प्राप्त करूं?
- 3. JFreeChart माउस निर्देशांक प्राप्त करें
- 4. माउस निर्देशांक से कार्डिनल माउस दिशा कैसे प्राप्त करें
- 5. MATLAB माउस को निर्देशांक कैसे प्राप्त करें
- 6. मैं स्क्रीन पर अक्षांश/देशांतर निर्देशांक कैसे प्लॉट करूं?
- 7. मैं विशिष्ट निर्देशांक के साथ WPF/C# में माउस ईवेंट कैसे बढ़ा सकता हूं?
- 8. नियंत्रण पर क्लिक होने पर मैं माउस के निर्देशांक कैसे प्राप्त करूं?
- 9. स्क्रीन गतिविधि पर वर्तमान कैसे प्राप्त करें?
- 10. मैं एक कस्टम UIButton पर टैप निर्देशांक कैसे प्राप्त करूं?
- 11. मैं वर्तमान श्रेणी आईडी कैसे प्राप्त करूं?
- 12. मैं वर्तमान कैरेट स्थिति कैसे प्राप्त करूं?
- 13. मैं प्रोग्रामेटिक रूप से एक WPF FrameworkElement के वर्तमान दृश्य स्थिति को कैसे प्राप्त करूं?
- 14. एक्सेसिबिलिटी एपीआई के माध्यम से वर्तमान में चयनित टेक्स्ट के वैश्विक स्क्रीन निर्देशांक कैसे प्राप्त करें।
- 15. jquery पृष्ठ की वर्तमान स्क्रीन शीर्ष स्थिति कैसे प्राप्त करें?
- 16. मैं cocos2d में स्क्रीन का केंद्र कैसे प्राप्त करूं?
- 17. बैश: मैं स्क्रीन सत्र में कमांड इतिहास कैसे प्राप्त करूं?
- 18. WPF टैब नियंत्रण: मैं वर्तमान में चयनित टैब कैसे प्राप्त करूं?
- 19. मैं वर्तमान स्क्रीन अभिविन्यास कैसे प्राप्त कर सकता हूं?
- 20. पायथन में, मैं वर्तमान फ्रेम कैसे प्राप्त करूं?
- 21. सी #: मैं वर्तमान समय को स्ट्रिंग में कैसे प्राप्त करूं?
- 22. क्यूटी: मैं वर्तमान में चल रही विंडो कैसे प्राप्त करूं?
- 23. मैं वेब सेवा में वर्तमान निर्देशिका कैसे प्राप्त करूं
- 24. मैं एंड्रॉइड मीडियाप्लेयर में वर्तमान वॉल्यूम/आयाम कैसे प्राप्त करूं?
- 25. मैं रेक में वर्तमान नेमस्पेस कैसे प्राप्त करूं?
- 26. मैं WPF में कॉम्बोबॉक्स से टेक्स्ट मान कैसे प्राप्त करूं?
- 27. मैं अक्षांश और देशांतर में निर्देशांक कैसे परिवर्तित करूं?
- 28. स्क्रीन में NSPoint कन्वर्ट खिड़की के निर्देशांक निर्देशांक
- 29. एक निश्चित UITableViewCell के स्क्रीन निर्देशांक प्राप्त करें?
- 30. वर्तमान माउस कर्सर प्रकार
माउस के साथ समन्वय क्या है? खिड़की के सापेक्ष स्क्रीन समन्वय? –
मेरा मतलब स्क्रीन पर माउस की स्थिति है। –