2011-03-02 18 views
13

मैं Win32 API का उपयोग कर माउस ईवेंट अनुकरण करना चाहता हूं; मैं यह कैसे कर सकता हूं?मैं कोड से माउस इवेंट कैसे अनुकरण कर सकता हूं?

मैं जो करना चाहता हूं वह सबसे बुनियादी स्तर पर इस कार्यक्रम को अनुकरण करता है, जिस स्तर पर सिस्टम के पास ईवेंट प्रकार और समन्वय होता है और अभी तक यह नहीं पता लगाया गया है कि उसे किस विंडो को रिले करना होगा।

मुझे नहीं पता कि यह कैसे काम करता है। किसी भी तरह से, मुझे इसे करने में मदद चाहिए। क्या मुझे ड्राइवर स्तर पर दखल देना होगा ?!

मेरी आवश्यकताओं को स्पष्ट करने के लिए, मैं किसी भी विंडो को लक्षित नहीं करना चाहता, मैं सिर्फ सिस्टम को लगता हूं कि माउस को क्लिक किया गया था या उपयोगकर्ता द्वारा स्थानांतरित किया गया था। और मैं सी

उत्तर

21

में कोडिंग की जाएगी आप SendInput function है, जो आप के इनपुट ईवेंट के लिए इसी INPUT structures की एक सरणी को निर्दिष्ट करके माउस अपने कोड में आंदोलनों और बटन क्लिक के संश्लेषण के लिए अनुमति देता है के लिए देख रहे हैं।

UINT WINAPI SendInput(
    __in UINT nInputs,  // number of structures in the pInputs array 
    __in LPINPUT pInputs, // an array of INPUT structures, representing an event 
    __in int cbSize  // the size, in bytes, of an INPUT structure 
); 

ध्यान दें, तथापि, इस समारोह User Interface Privilege Isolation (UIPI), के अधीन है कि जिसका अर्थ है कि आपके आवेदन ही नहीं एक समान या कम अखंडता के स्तर पर चल रहे हैं अनुप्रयोगों के लिए इनपुट इंजेक्षन करने की अनुमति है।

+0

धन्यवाद के अनुसार मेरे लिए है कि समस्या हल हो :) – Micka

5

mouse_event (winuser.h) का उपयोग करें। निम्नलिखित कोड माउस को ले जाएगा, फिर नए स्थान पर एक क्लिक करें। आप इसे दो पंक्तियों में कर सकते हैं लेकिन यह अधिक verbose है।

ध्यान दें कि एक्स और वाई mickeys, 0 से 65535 में निर्दिष्ट हैं। इसके बाद वर्तमान रिज़ॉल्यूशन पर मैप किया गया है, यानी 0,0 शीर्ष बाएं कोने होगा और 65535,65535 निचले दाएं कोने होंगे। अपने आवेदन व्यवस्थापक अधिकार देने level` `अखंडता उल्लेख के लिए

mouse_event(MOUSEEVENTF_MOVE | MOUSEEVENTF_ABSOLUTE, x, y, 0, 0); 
mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0); 
mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0); 
+3

[MSDN के डॉक्स] (http://msdn.microsoft.com/en-us/library/ ms646260.aspx), mouse_event को SendInput द्वारा हटा दिया गया है। वे इसके बजाय SendInput का उपयोग करने की सलाह देते हैं। –

संबंधित मुद्दे