1 - найти окно, получить хендл (дубль ответа коллеги, тем не менее)
[DllImport("USER32.DLL", CharSet = CharSet.Auto)]
internal static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
2 - послать "энтрер"... а тут все может быть просто, или не совсем
просто
SendKeys мне не подошел (долгая история, но можете с него и начать ))
3 - как вышло у меня, для типовых виндовых диалогов "открыть файл"/"сохранить файл" - надо "класс" приемник сообщения, и всю его иерархиею, начиная с хендла (диалога, в моем случае) (понадобится тула
https://social.msdn.microsoft.com/Forums/vstudio/e... пример для сохранения
"Save Table".hWndByTitle().setTitle(csvDlg).waitForIdle().sendString(
new string[] {
"DUIViewWndClassName",
"DirectUIHWND",
"FloatNotifySink",
"ComboBox",
"Edit" },
csv);
реализация sendString
internal static IntPtr sendString(this IntPtr hWnd, string[] classNames, string msg, bool verb = false)
{
var hCtrl = hWnd;
if (classNames != null && classNames.Count() > 0)
{
Thread.Sleep(to[toFileStdDlg]);
foreach (var c in classNames)
{
Thread.Sleep(to[toFileStdDlg]);
hCtrl = user32.FindWindowEx(hCtrl, IntPtr.Zero, c, null);
if (hCtrl.Equals(IntPtr.Zero))
{
$"\tERROR :: sendString not found class {c}".log();
return hWnd;
}
else
hCtrl.waitForIdle();
}
}
for (int i = 0; i < msg.Length; i++)
user32.PostMessage(hCtrl, WM_CHAR, msg[i], 0);
Thread.Sleep(to[toFileStdDlg]);
user32.PostMessage(hWnd, WM_KEYDOWN, user32.VkKeyScan('\r'), 0);
user32.PostMessage(hWnd, WM_KEYUP, user32.VkKeyScan('\r'), 0);
return hWnd;
}