2011-12-22 29 views
8

मैं एक प्रोग्राम लिखने की कोशिश कर रहा हूं जो डेटा की एक पंक्ति लेगा और इसे दूसरी विंडो/प्रक्रिया में पास करेगा।सी # कीबोर्ड विंडो को दूसरी विंडो/प्रक्रिया में भेजना

यह कोड मेरे पास अभी तक है, लेकिन मैं काम करने में सक्षम नहीं हूं कि मैं आउटपुट प्रक्रिया में कीबोर्ड कमांड कैसे भेजूंगा।

मैं टैब कमांड/कुंजी और एंटर कमांड/कुंजी का उपयोग करने में सक्षम होना चाहता हूं।

यह वही है मैं अब तक की कोशिश की है

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.IO; 
using System.Threading; 
using System.Runtime.InteropServices; 
using System.Diagnostics; 
using System.Windows.Forms; 

namespace Config 
{ 
    class Program 
    { 
     [STAThread] 
     static void Main(string[] args) 
     { 
      System.Threading.Thread.Sleep(30);//300000 
      TextReader tr = new StreamReader("config.txt"); 
      Clipboard.SetText(tr.ReadLine()); 
      tr.Close(); 

      var proc = Process.GetProcessesByName("OUTLOOK").FirstOrDefault(); 
      if (proc != null && proc.MainWindowHandle != IntPtr.Zero) 
      { 
       SetForegroundWindow(proc.MainWindowHandle); 
       //SendKeys.Send("{ENTER}"); 
       // Clipboard.GetText(); 
      } 
     } 

     [DllImport("user32")] 
     private static extern bool SetForegroundWindow(IntPtr hwnd); 
    } 
} 

उत्तर

6

SendMessage आप जो खोज रहे हैं है। हो सकता है कि आपके सवाल का पहले से ही यहाँ हल किया गया था: इस तरह How to send text to Notepad in C#/Win32?

+0

Ty लेकिन यह जहाँ तक एक कुंजीपटल आदेश नहीं भेजा जाता है के रूप में मैं इसे देख सकते हैं केवल पाठ अतीत – monkeylumps

+0

में आप कीस्ट्रोक के लिए ध्वज सेट कर सकते हैं। जैसे टैब कुंजी के लिए: 'SendMessage (hwnd, WM_KEYDOWN, VK_TAB, NULL) ' – arminb

1

यह देखते हुए कि आप जानते हैं जब और क्या कुंजीपटल आदेश तुम आउटलुक प्रक्रिया के लिए भेजते हैं, आप SendMessage Windows API फ़ंक्शन का उपयोग करने की जरूरत है।

बस एक sample

7
[DllImport("user32.dll")] 
private static extern IntPtr FindWindow(string lpClassName, string lpWindowName); 

[DllImport("user32.dll")] 
private static extern bool SetForegroundWindow(IntPtr hWnd); 

public void Start() 
{ 
    IntPtr zero = IntPtr.Zero; 
    for (int i = 0; (i < 60) && (zero == IntPtr.Zero); i++) 
    { 
     Thread.Sleep(500); 
     zero = FindWindow(null, "YourWindowName"); 
    } 
    if (zero != IntPtr.Zero) 
    { 
     SetForegroundWindow(zero); 
     SendKeys.SendWait("{TAB}"); 
     SendKeys.SendWait("{TAB}"); 
     SendKeys.SendWait("{ENTER}"); 
     SendKeys.Flush(); 
    } 
} 

कोशिश ख़ाली।

+4

' SendKeys' ठोस काम नहीं करता है। दूसरी खिड़की का बहाना अग्रभूमि में लाया जा रहा है। इस मामले में आप अपनी चाबियाँ गलत एप्लिकेशन पर भेजेंगे। – arminb

+1

यही कारण है कि यह SendWait के साथ किया जाता है और फिर फ्लश करता है। – Elastep

+0

पुनरुत्थान के लिए खेद है, लेकिन किसी भी विचार से मैं यह कैसे कर सकता हूं - इंटरनेट पर? मुझे अनिवार्य रूप से एक ही चीज़ करने की ज़रूरत है, लेकिन लक्ष्य मशीन/प्रक्रिया किसी अन्य मशीन पर चल रही है! – pookie

5

मैंने कुछ प्रोग्राम लिखे हैं जो पृष्ठभूमि विंडो में कीस्ट्रोक भेजते हैं, मैंने आम तौर पर पोस्टमेसेज/सेंड मैसेज लागू किया। मैंने अपने सभी निष्कर्षों को here दस्तावेज किया!

लेकिन आप मुख्य रूप से कुंजी प्रेस लेने के लिए एप्लिकेशन को अनुमति देने के लिए विंडोज संदेश कतार में संदेश डालने के लिए निम्न स्तर की कॉल का उपयोग करेंगे।

PostMessage

SendMessage

कृपया मुझे पता है कि तुम कोई प्रश्न हैं, मेरे पुस्तकालय सी # में लिखा है जाने और मैं इसे साझा करने के लिए खुशी होगी। इस विधि भी एक पृष्ठभूमि खिड़की :) में माउस के उपयोग के लिए अनुमति देता है

सभी कोड GitHub में जांच की गई: जवाब के लिए https://github.com/EasyAsABC123/Keyboard

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