2015-09-19 30 views
0

我有一個程序需要發送文本文件的每一行到應用程序,同時最小化。我能夠將文本發送到應用程序,但這會導致它被打開。有沒有辦法在應用程序最小化時執行此操作?我讀過,我可以使用postmessage或sendmessage,但我不確定如何做到這一點。如何模擬最小化應用程序中的按鍵而不打開它?

public partial class Form1 : Form 
{ 
    [DllImport("user32.dll", EntryPoint = "FindWindow")] 
    private static extern IntPtr FindWindow(string lp1, string lp2); 

    [DllImport("user32.dll", ExactSpelling = true, CharSet = CharSet.Auto)] 
    [return: MarshalAs(UnmanagedType.Bool)] 
    private static extern bool SetForegroundWindow(IntPtr hWnd); 

    public Form1() 
    { 
     InitializeComponent(); 
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     IntPtr handle = FindWindow(null, "Application"); 
     if (!handle.Equals(IntPtr.Zero)) 
     { 
      if (SetForegroundWindow(handle)) 
      { 
       string[] dic = System.IO.File.ReadAllLines(@"text file name"); 
       foreach (string a in dic) 
       { 
        SendKeys.Send(a); 
       } 
      } 
     } 
    } 
} 
+0

你可以改變其他應用程序的代碼?或者它是黑匣子,你不能改變它? –

+0

你能解釋一下你試圖實現什麼,是否有你使用sendkeys來傳遞文本的理由? (例如,你是否試圖複製某人在窗口中輸入內容)? – ajg

+0

是的,我試圖模擬鍵入應用程序,而它是最小化 – Allofthem

回答

1

從問題中不清楚「發送文本」的含義。但是,如果您想在目標應用程序的文本框中設置文本,那麼您很幸運。

你可以得到一個句柄來做文本框控件你想要的文本去目標應用程序。這將是最困難的部分,因爲您必須找出一種方法來區分文本框與應用程序可能具有的其他文本框(可能使用Spy++和試驗錯誤的組合)。

一旦你想出了要發送文本的文本控件,剩下的只是sending a WM_SETTEXT消息給其他應用程序的文本框控件。

這裏是另一個SO相關的問題,供你參考:SetText of textbox in external app. Win32 API

相關問題