Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: WinAPI и системное программирование > Не работает эмуляция клавиш в другой программе!


Автор: at0104 22.4.2006, 14:57
Необходимо активизировать чужое приложение, нажать функц. клавишу и, в почвившемся новом окне нажать Enter.  
Сделал все, как написано в
http://vingrad.ru/DELPHI-DLP-000797

Прекрасно работает в режиме отладки, exe не работает. Проверял в 2000 и XP.
Вот упрощенный пример - он тоже не работает! Помогите!

Код

unit Unit8_1;

interface

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

type
  TForm1 = class(TForm)
    Button1: TButton;
    Timer1: TTimer;
    Edit1: TEdit;
    procedure Button1Click(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

uses sndkey32;

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  Timer1.Interval :=0;
  if   AppActivate('Безымянный') then begin
    SendKeys_F('{F1}',true);
    Timer1.Interval :=100;
  end
  else ShowMessage('Запустите Блокнот');
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  Timer1.Interval :=0;
  AppActivate('Блокнот') ;
  SendKeys_F('{ENTER}',true);
  SendKeys_F('{TAB}',true);
  SendKeys_F('{TAB}',true);
end;


procedure TForm1.FormCreate(Sender: TObject);
begin
  Timer1.Interval :=0;
end;

end.


P.S. Пробовал и по другому. Результат один и тот же. 

Автор: Wing 22.4.2006, 18:30
Цитата(at0104 @ 22.4.2006,  14:57)
Код
  AppActivate('Блокнот');

Ну вообще-то у окна заголовок 'Безымянный - Блокнот'.
А что за функция SendKeys_F? Там вроде просто SendKeys было. 

Автор: at0104 24.4.2006, 08:17
1. Следует указывать начало заголовка
2. В процессе экспериментов переименовал.

А у вас, уважаемый Girder  работает exe? 

Автор: at0104 24.4.2006, 08:47
Поблема решена - помогли на другом форуме.
НЕ надо было при вызове SEND... указывать "True" - это родилось при экспериментах.
Но почему при отладке все работает?
 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)