2011-08-31 14 views
1

是否可以使用PInvoke(或其他某種方法)更改另一個進程擁有的對話框上的文本框的值?在其他應用程序對話框上設置文本框值PInvoke

在.NET中進行開發。我認爲像SetWindowText這樣的調用的可用性表明可以對文本框執行相同的操作。我寧願不使用SendKeys。

+0

只要文本框是一個窗口控件,就可以使用SetWindowText完成此操作。否則,你可能需要使用UIAutomation。 –

回答

4

當然可以這樣做。您可以查看源代碼,我LinqToWindows庫:https://github.com/Eskat0n/linqtowindows

此庫使用的PInvoke獲得通過LINQ指定的where子句窗口的句柄,獲取子窗口的實例,並改變它的Text屬性類似以下的所有編輯元素(改變文本打開文件對話窗口):

var shell = new Shell(); 

var openDialog = shell.Windows 
    .Where(x => x.Text.Contains("Open")) 
    .SingleOrDefault() 
    .Cast<OpenFileDialog>(); 

var edits = openDialog.OfType<Edit>(); 
foreach (var edit in edits) 
    edit.Text = "Hello Word!"; 

代碼未經測試,但應該工作。請查看LinqToWindows解決方案中包含的測試項目以獲取更多示例。

+0

不錯的lib。我可以讓它起作用,但是我並沒有指望無法識別我之後編輯的「窗口」,除了迭代並在適當的編輯窗口之前找到靜態窗口。 Spy ++列出了一個似乎沒有改變的控件ID,但我不知道如何通過這個庫來獲取。 – Kyle

相關問題