Keybd_event

Тема в разделе "Delphi - FAQ", создана пользователем Vadik(R), 29 июл 2008.

  1. Vadik(R)

    Vadik(R) Well-Known Member

    Регистрация:
    12 дек 2007
    Сообщения:
    483
    Симпатии:
    0
    Не пойму, что за фигня с Делфи твориться! Раньше всегда работал keybd_event, а теперь только цифры. Пишу код
    Код (Text):
    procedure TForm1.Button1Click(Sender: TObject);
    begin
    sleep(3000);
    keybd_event(Ord('D'), 0, 0, 0);
    keybd_event(Ord('D'), 0, KEYEVENTF_KEYUP, 0);
    end;
    За 3 секунды перевожу курсор в блокнот. Пишет не латинскую большую D, а маленькую русскую в.
    Раньше все прекрасно работало. Не могли ли повлиять какие-либо из программ на это: Apache, MySQL, php, notepad++, Landscaping & deck designer 7.07a, silverlight, плюс то, что я поставил себе японскую раскладку клавиатуры? Уже два часа долблюсь над проблемой, в Интернете ничего пока не нашел.
    Вот, уже кое-что надыбал, но все равно не полное решение моей проблемы:
    Правда Windows у меня XP SP 2, но уже при посылке большой латинской D печатается маленькая латинская d.
    Придумал! Можно включить программно Shift перед этим и потом напечатать. Вот только вопрос: как быть, если в тексте будут и русские символы и английские? Как программно переключить язык?
    Вот пока что получилось:
    Код (Text):
    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;
    Но все равно не работает. В блокноте опять пишет вместо D маленькую в.
     
  2. FBUS

    FBUS Well-Known Member

    Регистрация:
    12 мар 2008
    Сообщения:
    57
    Симпатии:
    0
    гугл те поможет. раскладка клавы переключается одной строчкой. я так делал но не помню точно оператор, ищи.
     
  3. Vadik(R)

    Vadik(R) Well-Known Member

    Регистрация:
    12 дек 2007
    Сообщения:
    483
    Симпатии:
    0
    Да то, что он предлагает - это я и так написал (LoadKeyboardLayout('00000419', KLF_ACTIVATE)), но почему-то в моем примере это не работает :)
     
  4. Yason

    Yason Гость

Поделиться этой страницей