Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.10.2011, 10:13   #1
tred
чайник
Пользователь
 
Аватар для tred
 
Регистрация: 24.06.2010
Сообщений: 44
По умолчанию опять клавиатура

Код:
 keybd_event(Ord('1'), 0, 0, 0);
  keybd_event(Ord('1'), 0, KEYEVENTF_KEYUP, 0);
Здравствуйте код выше отправляет код символа а мне надо чтобы была имитация нажатия клавиши может знает кто-нибудь как это зделать ?
Может быть с аппаратной очередью сообщений намудрить если кто знает ))

Последний раз редактировалось tred; 23.10.2011 в 10:35.
tred вне форума Ответить с цитированием
Старый 23.10.2011, 11:10   #2
Somebody
Участник клуба
 
Регистрация: 08.10.2007
Сообщений: 1,185
По умолчанию

Не отправляет код символа, а как раз имитирует нажатие клавиши. Что не устраивает?
Somebody вне форума Ответить с цитированием
Старый 23.10.2011, 11:15   #3
tred
чайник
Пользователь
 
Аватар для tred
 
Регистрация: 24.06.2010
Сообщений: 44
По умолчанию

он в чат пишет а в активном окне никакой реакции нету хотя должна быть на нажатия клавиши
тоесть код символа отправляет я так понял а клавишу программно не нажимает

Последний раз редактировалось tred; 23.10.2011 в 11:26.
tred вне форума Ответить с цитированием
Старый 23.10.2011, 11:30   #4
Somebody
Участник клуба
 
Регистрация: 08.10.2007
Сообщений: 1,185
По умолчанию

Цитата:
Сообщение от tred Посмотреть сообщение
он в чат пишет а в активном окне никакой реакции нету хотя должна быть на нажатия клавиши
Так если он пишет в чат, значит, чат - это и есть активное окно.
Somebody вне форума Ответить с цитированием
Старый 23.10.2011, 11:34   #5
tred
чайник
Пользователь
 
Аватар для tred
 
Регистрация: 24.06.2010
Сообщений: 44
По умолчанию

нет чат это форма в окне наверно
в общем в чат пишет а кнопка как управляющая в окне не работает
хотя нажимаю пальцами работает )
tred вне форума Ответить с цитированием
Старый 23.10.2011, 11:34   #6
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

а активное окно это чат?
или что?
ибо получает то именно фокусное окно.

можете попробовать SendInput, она более рекомендумая и лучше.

если и она не поможет, то приложение видимо использует DirectInput.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 23.10.2011, 11:39   #7
tred
чайник
Пользователь
 
Аватар для tred
 
Регистрация: 24.06.2010
Сообщений: 44
По умолчанию

там в окне есть чат само окно не реагирует на код а когда фокус на чат делаю то печатает
Код:
unit Main;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, jpeg, StdCtrls, Buttons;

type
  TForm1 = class(TForm)
    Image1: TImage;
      Label1: TLabel;
        Label2: TLabel;
          Label3: TLabel;
    procedure FormCreate(Sender: TObject);
      procedure TimePause(dwMilliseconds: Longint);
  private
    { Private declarations }
    procedure WM_HotKeyHandler (var Message: TMessage);
      message WM_HOTKEY;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
    keyid: integer;
      keyid1: integer;
        iStart: DWORD;
          iStop: DWORD;
            flag: integer=0;
implementation

{$R *.dfm}
//////////////////////////////////////////////////////////////////
procedure TForm1.WM_HotKeyHandler (var Message: TMessage);
  var
    idHotKey: integer; //идентификатор, но об этом - позже
      fuModifiers: word; //модификатор MOD_XX
        uVirtKey: word; //код виртуальной клавиши VK_XX
begin
  // параметры сообщения получаем так:
  idHotkey:= Message.wParam;
    fuModifiers:= LOWORD(Message.lParam);
      uVirtKey:= HIWORD(Message.lParam);

  //теперь - небольшая проверочка:
  if (fuModifiers = MOD_ALT) AND (uVirtKey = VK_NUMPAD1) then
  begin
    repeat
      TimePause(3000);
        keybd_event(49, 0, 0, 0);
          TimePause(100);
            keybd_event(49, 0, KEYEVENTF_KEYUP, 0);
              TimePause(250);
                keybd_event(50, 0, 0, 0);
                  TimePause(100);
                    keybd_event(50, 0, KEYEVENTF_KEYUP, 0);
    until flag<>0;
     UnregisterHotKey(handle, keyid);
        GlobalDeleteAtom(keyid);
          UnregisterHotKey(handle, keyid1);
            GlobalDeleteAtom(keyid1);
              //Form1.Close();
  end
  else if (fuModifiers = MOD_ALT) AND (uVirtKey = VK_NUMPAD9) then
    flag:=1;
  inherited;
end;
//////////////////////////////////////////////////////////////////
// процедура  создания горячих клавиш при создании формы
procedure TForm1.FormCreate(Sender: TObject);
begin
  keyid:=GlobalAddAtom('My Hotkey'); //создаем атом
  keyid1:=GlobalAddAtom('My Hotkey1');
    RegisterHotKey(handle,// сообщение о HotKey будет получать форма
      keyid, // регистрируем атом как id
        MOD_ALT,// модификатор у нас - клавиша Alt
          VK_NUMPAD1); // вирт. клавиша - F10

    RegisterHotKey(handle,// сообщение о HotKey будет получать форма
      keyid1, // регистрируем атом как id
        MOD_ALT,// модификатор у нас - клавиша Alt
          VK_NUMPAD9); // вирт. клавиша - F10

end;
//////////////////////////////////////////////////////////////////
//         процедура типа таймер задержки
procedure TForm1.TimePause(dwMilliseconds: Longint);
begin
  iStart := GetTickCount;
  repeat
    iStop := GetTickCount;
      Application.ProcessMessages;
  until (iStop - iStart) >= DWORD(dwMilliseconds);
end;

end.
вот листинг проги
как мне туда функцию SendInput воткнуть подскажите пожалуйста

Последний раз редактировалось tred; 23.10.2011 в 16:27.
tred вне форума Ответить с цитированием
Старый 23.10.2011, 11:40   #8
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Если у кнопки есть горячая клавиша, можно ее попробовать послать. Иначе добиться того, чтобы курсор на кнопке был и имитировать нажатие и отпускание левой клавиши мыши. Подобных тем на форуме полно
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 23.10.2011, 17:08   #9
tred
чайник
Пользователь
 
Аватар для tred
 
Регистрация: 24.06.2010
Сообщений: 44
По умолчанию

подскажите как заюзать SendInput
как правильно параметры для этой функции вычислить
tred вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
опять я опять мемо nyasha2013 Помощь студентам 2 19.05.2011 21:09
клавиатура kaljan775 Общие вопросы C/C++ 2 23.11.2010 01:48
клавиатура и си itwaswritten Помощь студентам 1 19.05.2010 14:47
И опять мэйлы.. Опять... Pusher PHP 6 28.06.2008 03:08