2011-04-12 14 views
6

के साथ एक एप्लिकेशन कीस्ट्रोक भेजना अब तक, मेरे पास सभी हैंडल कैप्चरिंग और गुई सेट अप हैं। मैं वास्तविक कदम को निष्पादित करने के तरीके के रूप में फंस गया हूँ।"SendMessage" (vb.net)

SendMessage(New IntPtr(CurrentHandle), WHAT,GOES,HERE?) 

मैं को देखकर किया गया है:

मैं इस कोड है http://msdn.microsoft.com/en-us/library/ms644950(VS.85).aspx और http://msdn.microsoft.com/en-us/library/ms644927(v=VS.85).aspx#system_defined

हालांकि, इनमें से कोई भी "कोड उदाहरण" विधि की ज्यादा दे रहे हैं कि मैं सीखने की जरूरत है कि इसे कैसे करें। मुझे बस "/" या "w" दबाकर महत्वपूर्ण घटनाएं भेजने की आवश्यकता है, नहीं, मैं इसके लिए प्रेषक का उपयोग नहीं कर सकता।

धन्यवाद अगर आप मदद कर सकते हैं!

+0

आप कीस्ट्रोक्स SendMessage() के साथ नहीं भेज सकते हैं, तो आप संशोधक कुंजियों की स्थिति नियंत्रित नहीं कर सकते। उदाहरण के लिए Ctrl कुंजी दबाए रखें। SendInput आवश्यक है। –

उत्तर

8

एक कीप्रेस को अनुकरण करने के लिए, आपको एक कीडाउन और कीप अप ईवेंट अनुकरण करना होगा, जो कि आप संदेश क्षेत्र में निर्दिष्ट करेंगे। (कीडाउन के लिए 256 और कीप के लिए 257 का उपयोग करें)। wParam और lParam संदेश-विशिष्ट हैं, इसलिए कीप और कीडाउन के लिए, wParam हेक्साडेसिमल कोड के लिए कुंजी कोड (See this page) होगा और एलपीराम में अन्य विविध जानकारी (see this page) शामिल है। Vb.net में आप lParam के लिए int32 का उपयोग कर सकते हैं। उदाहरण के लिए, आप कीप के लिए 0 का उपयोग कर सकते हैं और कीप के लिए 65539।

पूर्व:

SendMessage(New IntPtr(CurrentHandle), 256, KEYCODE, 0) - Keydown 
SendMessage(New IntPtr(CurrentHandle), 257, KEYCODE, 65539) - Keyup 
+2

इस साइट को देखें: [लिंक] (http://www.remkoweijnen.nl/blog/2009/03/30/sending-wm_keydown-or-wm_keyup/) – GregoryComer

+0

वाह, बहुत बहुत धन्यवाद। (प्रतिष्ठा पर लग रहा है) Stackoverflow में आपका स्वागत है! मुझे आशा है आपको साइट अच्छी लगेगी! – FreeSnow

1

http://msdn.microsoft.com/en-us/library/ms644950(v=vs.85).aspx

LRESULT WINAPI SendMessage(
    __in HWND hWnd, 
    __in UINT Msg, 
    __in WPARAM wParam, 
    __in LPARAM lParam 
); 

hWnd - खिड़की के हैंडल संदेश भेजने के लिए है। संदेश - संदेश भेजने के लिए संदेश है। WParam और lParam अनिवार्य रूप से 'जानकारी' हैं। सटीक उपयोग आपके द्वारा भेजे जा रहे संदेश पर निर्भर करेगा।

आपको क्या स्थिति है कि आपको Sendpresses के बजाय SendMeyage का उपयोग करने की आवश्यकता है? मैंने पहले SendMessage का उपयोग किया है, लेकिन यह हमेशा माउस आंदोलनों के लिए किया गया है। .SendKeys() को जो भी कीस्ट्रोक भेजना चाहिए उसे सक्रिय विंडो में बताएं।

Public Shared Sub ActivateWin() 
    Dim Win As Process = Process.GetProcessesByName("myWindow").First 
    AppActivate(Win.Id) 
End Sub 

मैंने उपरोक्त का उपयोग SendKeys() से पहले किया है और यह हमेशा काम करता है।

यदि यह काम नहीं करता है, या आप SendMessage का उपयोग करने के लिए SendMessage का उपयोग करना चाहते हैं; WM_KEYDOWN संदेश के लिए प्रलेखन आपको चाहिए। http://msdn.microsoft.com/en-us/library/ms646280(v=vs.85).aspx

आप सही एलपीएआर मूल्य बनाने के लिए बिट्स में हेरफेर करेंगे।

+0

यह सब पृष्ठभूमि में चलाना है ताकि ऐप को सक्रिय रूप से सेट करना मेरे कार्यक्रम के उद्देश्य को हरा देगा। क्लाइंट को यह करने के दौरान चीजों को करने की अनुमति दी जानी चाहिए। इसके अलावा, विशेष ऐप के लिए, किसी कारण से, प्रेषक से इनपुट प्राप्त नहीं होता है। – FreeSnow

+0

आपका लिंक वास्तव में मेरी मदद नहीं करता है। मुझे यकीन नहीं है कि मैंने जो फ़ंक्शन प्रदान किया है उसके लिए इनपुट के रूप में उपयोग करना है। क्या आप संभवतः मुझे एक सामान्य चरित्र भेजने का एक उदाहरण दे सकते हैं? (जैसे की')? – FreeSnow