"Save Table".hWndByTitle().setActive().waitForIdle();
Clipboard.SetText(file_path_name);
SendKeys.SendWait("^V{Enter}");
Thread.Sleep(timeOuts[toSendKeys]);
"Save Table".hWndByTitle().setActive().waitForIdle();
SendKeys.SendWait(file_path_name);
SendKeys.SendWait("{Enter}");
Thread.Sleep(timeOuts[toSendKeys]);
Чисто теоретически:я знаком с теорией, просил отозваться именно знающих готовые решения, может есть примеры в MSDN или Stack Overflow но с позабытым английским и длинной формулировкой вопроса - я быстрее сам выпилю, чем нагуглю пример ))
С "непредсказуемыми сбоями" нужно разбиратьсяв операции с клипбоардом, как оказалось, могут вмешиваться и антивирусы (проверено - касперский один из факторов резко понижающих стабильность, родной авирь МС НЕ ухудшает стабильность) и гипервизоры (в ВМ тоже все резко хуже) и клиенты RDP, тоже все резко ухудшается
internal static IntPtr sendString(this IntPtr hWnd, string msg, bool verb = false)
{
// string[] classNames,
//hWnd.waitForIdle();
hWnd.ToString().log();
Thread.Sleep(50);
IntPtr hCombo = FindWindowEx(hWnd, IntPtr.Zero, "ComboBox", null);
Thread.Sleep(50);
IntPtr hEdit = FindWindowEx(hWnd, hCombo, "Edit", null);
Thread.Sleep(50);
//foreach(var c in classNames)
//{
// hCtrl = FindWindowEx(hParent, hCtrl, c, null);
// c.log();
// hCtrl.ToString().log();
// hParent = hCtrl;
//}
if (!hEdit.Equals(IntPtr.Zero))
{
for (int i = 0; i < msg.Length; i++)
{
PostMessage(hEdit, WM_CHAR, msg[i], 0);
//SendMessage(hWnd, WM_KEYDOWN, VkKeyScan(msg[i]), 0);
//Thread.Sleep(5);
//SendMessage(hWnd, WM_KEYUP, VkKeyScan(msg[i]), 0);
$@".. try send '{msg[i]}'/{VkKeyScan(msg[i])}".log();
}
//PostMessage(hCtrl, WM_KEYDOWN, VK_BACK, 0);
//PostMessage(hCtrl, WM_KEYDOWN, VK_BACK, 0);
////PostMessage(editWnd, WM_SYSKEYDOWN, VkKeyScan('F'), 1 << 29);
//PostMessage(hCtrl, WM_KEYDOWN, VK_F5, 0);
//PostMessage(hCtrl, WM_KEYUP, VK_F5, 0);
////PostMessage(editWnd, WM_KEYUP, VK_F, 0);
}
else
$"\tERROR :: sendString not found class".log();
return hWnd;
}
internal static IntPtr sendString(this IntPtr hWnd, string[] classNames, string msg, bool verb = false)
{
Thread.Sleep(to[toFileStdDlg]);
var hCtrl = hWnd;
if (classNames != null && classNames.Count() > 0)
{
foreach (var c in classNames)
{
hCtrl = user32.FindWindowEx(hCtrl, IntPtr.Zero, c, null);
if (hCtrl.Equals(IntPtr.Zero))
{
$"\tERROR :: sendString not found class {c}".log();
return hWnd;
}
}
#if DEBUG
Thread.Sleep(to[toFileStdDlg]);
#endif
}
for (int i = 0; i < msg.Length; i++)
user32.PostMessage(hCtrl, WM_CHAR, msg[i], 0);
user32.PostMessage(hCtrl, WM_KEYDOWN, user32.VkKeyScan('\r'), 0);
user32.PostMessage(hCtrl, WM_KEYUP, user32.VkKeyScan('\r'), 0);
return hWnd;
}