Здравствуйте, newhere, Вы писали:
N>Dll для W98 SE Rus с экспортируемой функцией MySendString() — разбирает строку, состоящую из символов и шорткатов (Ctrl+O, Shift+Tab,...) и посылает их SendInput'om.
N>Например такая строка: "[Ctrl+O]test.txt[Enter]" должна открыть OpenDialog вызывающей программы, "набрать" test.txt и "нажать" кнопку.
N>Делаю:
N>SendInput'om генерирую комбинацию клавиш Ctrl+O, дальше SendInput'om генерирую побуквенно текст test.txt дальше SendInput'om генерирую нажатие Enter.
N>Получается:
N>иногда test.txt посылается быстрее чем открывается OpenDialog
N>Хочется:
N>дождаться создания окна или смены окна (если был шорткат Alt+Tab) — как-то узнать, было ли создание нового окна или переход на новое окно.
N>Пока перебиваюсь Sleep'om — но это неправильно.
N>Впервые спрашиваю форум, заранее благодарен.
N>Псевдокод:
N>N>::BlockInput(TRUE);
N>for(i=0; i < strlen(givenString); i++)
N>{
N> if ("обычный" символ)
N> ::SendInput('символ');
N> if ("шорткат")
N> ::SendInput("шорткат");
N> ::Sleep(1000);
N>}
N>::BlockInput(FALSE);
N>
код на д7 держи
и замени Sleep на Delay. по идее станет легче. Но ненамного
procedure Delay(MSecs: Cardinal);
var FirstTick: Cardinal;
begin
FirstTick := GetTickCount;
repeat
Application.ProcessMessages;
until
GetTickCount — FirstTick >= MSecs;
end;
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>