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


Автор: zoiberg111 5.8.2008, 17:48
Нужно нажать кнопку W в приложении Counter - Strike
Пытался с помощью:
http://delphiworld.narod.ru/base/send_keys_comp.html
Ничего не выходит,в блакноте печатает а в игре не нажимает


Ещё пытался
Код

  w : HWND;
    begin
 w := FindWindow(nil, 'Counter - Strike');


   sleep(2222) ;
  SendMessage(w, WM_CHAR, world(w), 0) ; HE работает


Подскажите пожалуйста как отправить Клавишу W в приложение Counter-Strike

п.с поиск юзал пробовал ,то что находил не работает с CS

Автор: VICTAR 6.8.2008, 02:00
Еще один читер?  smile 

Автор: Qu1nt 6.8.2008, 08:54
Вот, набросал:
Код

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms;

const
  HotKey = VK_F10;

type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure WMHotKey(var Msg: TWMHotKey); message WM_HOTKEY;
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  Pressed: Boolean = False;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  RegisterHotKey(Self.Handle, HotKey, 0, HotKey);
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  UnRegisterHotKey(Self.Handle, HotKey);
end;

procedure TForm1.WMHotKey(var Msg: TWMHotKey);
begin
  Pressed := not Pressed;
  if Pressed then
    keybd_event(Ord('W'), MapVirtualKey(Ord('W'), 0), 0, 0)
  else
    keybd_event(Ord('W'), MapVirtualKey(Ord('W'), 0), KEYEVENTF_KEYUP, 0);
end;

end.

F10 - включить/выключить бег.

Автор: zoiberg111 6.8.2008, 10:26
это для формы я попытался подменить под себя:

Код

unit Unit1;

interface

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

const
  HotKey = VK_F10;

type
  TForm1 = class(TForm)
    Timer1: TTimer;
    Button1: TButton;
    Button2: TButton;
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);

  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
   w : HWND;
  Pressed: Boolean = False;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
 w := FindWindow(nil, 'Counter - Strike');
  RegisterHotKey(w, HotKey, 0, HotKey);
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  UnRegisterHotKey(w, HotKey);
end;



procedure TForm1.Timer1Timer(Sender: TObject);
begin
  Pressed := not Pressed;
  if Pressed then
    keybd_event(Ord('F'), MapVirtualKey(Ord('F'), 0), 0, 0)
  else
    keybd_event(Ord('F'), MapVirtualKey(Ord('F'), 0), KEYEVENTF_KEYUP, 0);

end;

procedure TForm1.Button1Click(Sender: TObject);
begin
Pressed:=true;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
Pressed:=false;
end;

end.


но f10 не останавливает кнопку

Автор: Qu1nt 6.8.2008, 10:37
Зачем таймер? Чем не устраивает моя реализация? Что ты вообще хочешь сделать?!

Автор: zoiberg111 6.8.2008, 11:00
Я хочу сделать прогу чтобы она отправляла быстро и много раз нажатие кнорпки F тоесть чтобы  фанарик мигал
Запустил твою программу ,тыкал на F10 в форме и кс - ничего не происходило ,потом поставил
w := FindWindow(nil, 'Counter - Strike');
заменил все Self.Handle  на W
Поставил таймер с интервалом 1 мсек  а в него функцию отправки кнопки...
Кнопка нажимаеться только бесконечно)

Нужно сделать чтобы из КС можно было управлять программой,тоесть останавливать отправку сообщение\включать
ф10 что-то не работает



Автор: Qu1nt 6.8.2008, 11:24
Код

unit Unit1;

interface

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

const
  HotKey = VK_F10;  

type
  TForm1 = class(TForm)
    Timer1: TTimer;
    procedure Timer1Timer(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure WMHotKey(var Msg: TWMHotKey); message WM_HOTKEY;
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  RegisterHotKey(Self.Handle, HotKey, 0, HotKey);
  with Timer1 do
  begin
    Enabled := False;
    Interval := 250;
  end;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  UnRegisterHotKey(Self.Handle, HotKey);
end;

procedure TForm1.WMHotKey(var Msg: TWMHotKey);
begin
  Timer1.Enabled := not Timer1.Enabled;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  keybd_event(Ord('F'), MapVirtualKey(Ord('F'), 0), 0, 0);
  keybd_event(Ord('F'), MapVirtualKey(Ord('F'), 0), KEYEVENTF_KEYUP, 0);
end;

end.

F10 - включить/выключить мигание фонарика = )

Автор: zoiberg111 6.8.2008, 11:42
Все работае кроме f10 
В блакноте печатает быквы нажимаю ф10 - продолжает печатать
В кс мигает фанариком,нажимаю a10 - продолжает маргать
даже заменял  HotKey = VK_F10;   на другие кнопки,всяравно не срабатыват,в чем может быть проблемма?
:((

Автор: Qu1nt 6.8.2008, 11:44
Что за народ пошел?! Даже скопипастить не может правильно!
Показывай свою реализацию моего кода smile 

Автор: zoiberg111 6.8.2008, 11:47
Код

Показывай свою реализацию моего кода

Твоя мне больше нравиться)
Копировать то я умею smile 
Ладно придеться вручную выключать
Спс за код
А ты тестил у себя? у тебя все выключаеться\включаеться

Автор: Qu1nt 6.8.2008, 11:50
Ну-ну = ) На здоровье.
Конечно тестировал. Покажи какой у тебя сейчас код = )

Автор: zoiberg111 6.8.2008, 14:09
Код

nit Unit1;

interface

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

const
  HotKey = VK_F10;  

type
  TForm1 = class(TForm)
    Timer1: TTimer;
    procedure Timer1Timer(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure WMHotKey(var Msg: TWMHotKey); message WM_HOTKEY;
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  RegisterHotKey(Self.Handle, HotKey, 0, HotKey);
  with Timer1 do
  begin
    Enabled := False;
    Interval := 250;
  end;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  UnRegisterHotKey(Self.Handle, HotKey);
end;

procedure TForm1.WMHotKey(var Msg: TWMHotKey);
begin
  Timer1.Enabled := not Timer1.Enabled;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  keybd_event(Ord('F'), MapVirtualKey(Ord('F'), 0), 0, 0);
  keybd_event(Ord('F'), MapVirtualKey(Ord('F'), 0), KEYEVENTF_KEYUP, 0);
end;

end.


вот такой))  


мне сказали что можно сделать хук и им палить нажатие кнопки в определенном приложении
Нету случайно примера работающего с хуками?) а то те что в нете - не работают smile)

Автор: Qu1nt 6.8.2008, 14:33
Напиши мне в ICQ.

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