是否可以使用PInvoke(或其他某種方法)更改另一個進程擁有的對話框上的文本框的值?在其他應用程序對話框上設置文本框值PInvoke
在.NET中進行開發。我認爲像SetWindowText這樣的調用的可用性表明可以對文本框執行相同的操作。我寧願不使用SendKeys。
是否可以使用PInvoke(或其他某種方法)更改另一個進程擁有的對話框上的文本框的值?在其他應用程序對話框上設置文本框值PInvoke
在.NET中進行開發。我認爲像SetWindowText這樣的調用的可用性表明可以對文本框執行相同的操作。我寧願不使用SendKeys。
當然可以這樣做。您可以查看源代碼,我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解決方案中包含的測試項目以獲取更多示例。
不錯的lib。我可以讓它起作用,但是我並沒有指望無法識別我之後編輯的「窗口」,除了迭代並在適當的編輯窗口之前找到靜態窗口。 Spy ++列出了一個似乎沒有改變的控件ID,但我不知道如何通過這個庫來獲取。 – Kyle
只要文本框是一個窗口控件,就可以使用SetWindowText完成此操作。否則,你可能需要使用UIAutomation。 –