V
Vadik(R)
Не пойму, что за фигня с Делфи твориться! Раньше всегда работал keybd_event, а теперь только цифры. Пишу код
За 3 секунды перевожу курсор в блокнот. Пишет не латинскую большую D, а маленькую русскую в.
Раньше все прекрасно работало. Не могли ли повлиять какие-либо из программ на это: Apache, MySQL, php, notepad++, Landscaping & deck designer 7.07a, silverlight, плюс то, что я поставил себе японскую раскладку клавиатуры? Уже два часа долблюсь над проблемой, в Интернете ничего пока не нашел.
Вот, уже кое-что надыбал, но все равно не полное решение моей проблемы:
Придумал! Можно включить программно Shift перед этим и потом напечатать. Вот только вопрос: как быть, если в тексте будут и русские символы и английские? Как программно переключить язык?
Вот пока что получилось:
Но все равно не работает. В блокноте опять пишет вместо D маленькую в.
Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
sleep(3000);
keybd_event(Ord('D'), 0, 0, 0);
keybd_event(Ord('D'), 0, KEYEVENTF_KEYUP, 0);
end;
Раньше все прекрасно работало. Не могли ли повлиять какие-либо из программ на это: Apache, MySQL, php, notepad++, Landscaping & deck designer 7.07a, silverlight, плюс то, что я поставил себе японскую раскладку клавиатуры? Уже два часа долблюсь над проблемой, в Интернете ничего пока не нашел.
Вот, уже кое-что надыбал, но все равно не полное решение моей проблемы:
Правда Windows у меня XP SP 2, но уже при посылке большой латинской D печатается маленькая латинская d.Нет. Все дело в том, что в Windows XP 2008 надо указать какой вид языка посылаешь и какой вид языка у программы которая принимает. т.е. Если принимающая программа имеет язык EN, то посылающая прорамма должна посылать англиские символы при этом изменив язык приложения на EN. И на оборот - если принимающее преложение имеет RU, то посылающая программа должна посылать руские символы при этом изменив язык приложения на RU. И зачем они это сделали ? все было гораздо лучше.
Придумал! Можно включить программно Shift перед этим и потом напечатать. Вот только вопрос: как быть, если в тексте будут и русские символы и английские? Как программно переключить язык?
Вот пока что получилось:
Код:
procedure TForm1.Button1Click(Sender: TObject);
const
rus : Set of Char = ['а'..'я']+['А'..'Я'];
var
i : Integer;
begin
for i:=1 to Length(Edit1.Text) do
begin
if Edit1.Text[i] in rus then LoadKeyboardLayout('00000419', KLF_ACTIVATE) else LoadKeyboardLayout('00000409', KLF_ACTIVATE);
keybd_event(Ord(Edit1.Text[i]), 0, 0, 0);
keybd_event(Ord(Edit1.Text[i]), 0, KEYEVENTF_KEYUP, 0);
end;
end;