Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2007.04.01;
Скачать: [xml.tar.bz2];

Вниз

Сигнал в "мозг"   Найти похожие ветки 

 
Nija   (2007-03-04 18:17) [0]

Привет всем, помогите пожалуйста сделать следующее: нужно что бы программа с эмулировала нажатие кнопки "S" на клавиатуре.
(с эмулировала значит компьютер подумал что она была нажата)


 
Palladin ©   (2007-03-04 18:18) [1]

спамишь?


 
DVM ©   (2007-03-04 18:18) [2]

Чья программа?


 
Nija   (2007-03-04 18:19) [3]

DVM ©   (04.03.07 18:18) [2]
В смычли чья?


 
DVM ©   (2007-03-04 18:39) [4]


> В смычли чья?

Эмулировать нажатие надо в чужой программе? В своей эта эмуляция лишена смысла.


 
GrayFace ©   (2007-03-04 18:43) [5]

http://delphimaster.net/view/15-1173008148/
Не надо дублировать темы


 
Nija   (2007-03-04 18:53) [6]

Извеняюсь, но это тема не должна юыть в разделе прочее.
DVM ©   (04.03.07 18:39) [4]

Почему эмуляция лишена смысла? Мне нужно заменить нажатие кнопки на клавиатуре нажатием кнопки на джойстике.


 
DVM ©   (2007-03-04 19:17) [7]


> Мне нужно заменить нажатие кнопки на клавиатуре нажатием
> кнопки на джойстике.

В своей программе ты просто одну и ту же процедуру можешь вызвать для кнопки джойстика и нажатия нужной клавиши. Тут мудрить ничего не надо с эмуляцией.


 
Nija   (2007-03-04 19:23) [8]

Может вы и правы, мне нужно вот что: при нажатие на кнопку джойстика компьютер должен думать что была нажата кнопка на клавиатуре, подскажите как это сделать.


 
DVM ©   (2007-03-04 19:29) [9]


> при нажатие на кнопку джойстика компьютер должен думать
> что была нажата кнопка на клавиатуре

WM_KEYDOWN, WM_CHAR + PostMessage();


 
Nija   (2007-03-04 19:32) [10]

Можно по подробнее обьяснить как послать сигнал компьютеру, с джойстиком я вроде разобрался.


 
DVM ©   (2007-03-04 19:38) [11]


> Можно по подробнее обьяснить как послать сигнал компьютеру

Компьютеру сигнал не послать, а вот послать сообщение активному окну о нажатии клавиши можно.

Справка на что дана?

procedure TForm1.Button1Click(Sender: TObject);
begin
 postmessage(edit1.Handle, wm_char, ord("s"), 0);
end;


 
Nija   (2007-03-04 20:02) [12]

Теперь мне понятно как послать сообщение компоненту мне на форму но мне нужно послать сообщение запущенной игре, подскажите как это сделать


 
DVM ©   (2007-03-04 20:10) [13]


> мне нужно послать сообщение запущенной игре, подскажите
> как это сделать

У игры есть окно, у окна класс и название, по классу и названию находишь хэндл окна - далее аналогично. Хотя тут все не так просто, но все же попробуй.


 
Nija   (2007-03-04 20:14) [14]

А откудо мне знать какой класс и какое название у окна.
А может можно послать сообщенио нажатие кнопки компьютеру?


 
Romm   (2007-03-04 20:15) [15]


> У игры есть окно, у окна класс и название, по классу и названию
> находишь хэндл окна - далее аналогично. Хотя тут все не
> так просто, но все же попробуй.


procedure TForm1.Action1Execute(Sender: TObject);
begin
 Close;
 //SortCut=S
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
postmessage(Form1.Handle, wm_char, ord("S"), 0);
end;

не получается :)


 
DVM ©   (2007-03-04 20:27) [16]


> Romm   (04.03.07 20:15) [15]

postmessage(Form1.Handle, wm_keydown, ord("S"), 0);


 
DVM ©   (2007-03-04 20:29) [17]


> А откудо мне знать какой класс и какое название у окна.

Запускаешь игру - сворачиваешь, смотришь, например с помощью  SPY++ какие окна имеются.

Поиск хэндла - FindWindow();


 
Romm   (2007-03-04 20:37) [18]


> postmessage(Form1.Handle, wm_keydown, ord("S"), 0);

точно ))


 
Nija   (2007-03-04 21:00) [19]

Давайте поступим так, я готов заплатить за работоспособную программу рублей 200(больше нету), но она нужна в ближащие время, если есть желание пишите.


 
Romm   (2007-03-04 21:02) [20]

ящик от дай )


 
Romm   (2007-03-04 21:03) [21]

всмысли дай )


 
Nija   (2007-03-04 21:10) [22]

не понял, что отдать?


 
Romm   (2007-03-04 21:12) [23]

да ниче.. что написать-то нужно?


 
Nija   (2007-03-04 21:21) [24]

Вообщем так нужна программа, которая бы отслежывала нажатия кнопок на джойстике и если нажата нужна кнопка, то послать сигнал одной игре.
Тоесть, пользователь запускает игру и управляет ей джойстиком если нажата нужная кнопка, в игре должно произойте кое-что.


 
Правильный Вася   (2007-03-04 21:31) [25]


> Сигнал в "мозг"

лучше в попу


 
Romm   (2007-03-04 21:33) [26]

Ты говорил, что с Джойстиком разобрался. Поэтому это пропустим.
Дальше кидаешь на форму компонент TActionList. Пишешь действия и назначаешь горячие клавиши (ShortCut). Например Action1 - бег назад. Назначаешь ShortCut:="S";
После чего:
procedure {тут нажатие кнопы джойстика}(Sender: TObject);
begin
postmessage(Form1.Handle, wm_keydown, ord("S"), 0);
end;

Че тут сложного?


 
Nija   (2007-03-04 21:37) [27]

И как мне сообщить это действие игре?

Джойстик работает так:
Uses mmsystem
var
j:TJoyInfo;
begin
joyGetPos(0,@j);
if (j.wButtons and JOY_BUTTON1)<>0 then    begin;

postmessage(edit1.Handle, wm_char, ord("s"), 0);

end;


 
Romm   (2007-03-04 21:43) [28]


> Uses mmsystem
> var
> j:TJoyInfo;
> begin
> joyGetPos(0,@j);
> if (j.wButtons and JOY_BUTTON1)<>0 then    begin;
>
> postmessage(edit1.Handle, wm_char, ord("s"), 0);
>
> end;


Глаза открой :)
var
j:TJoyInfo;
begin
  joyGetPos(0,@j);
  if (j.wButtons and JOY_BUTTON1)<>0 then
     begin
        postmessage(Form1.Handle, wm_keydown, ord("S"), 0);
     end;
end;
//Form1 - это имя формы. Оно у всех разное :) например MainForm.Handle


 
Nija   (2007-03-04 21:46) [29]

Да, это я уже исправил.


 
DVM ©   (2007-03-04 21:46) [30]


> Romm   (04.03.07 21:43) [28]


> Form1 - это имя формы. Оно у всех разное :)

Я так понял, что он хочет управлять чужим приложением - игрой. Ни о каких формах там речи идти не может. Только классы окон, заголовки окон и хэндлы окон.


> Nija   (04.03.07 21:37) [27]
> И как мне сообщить это действие игре?

Ты вообще читаешь ответы?


 
Romm   (2007-03-04 21:49) [31]


> Я так понял, что он хочет управлять чужим приложением -
> игрой. Ни о каких формах там речи идти не может. Только
> классы окон, заголовки окон и хэндлы окон.

смысл тот же..


 
Romm   (2007-03-04 22:32) [32]


> DVM ©   (04.03.07 21:46) [30]

помоги плз разобраться с FindWindow()
Первый параметр - имя класса окна, второй имя окна - это я понял.
Давай разберем пример, в котором нужно проигрывателю winamp послать сообщение о нажатии клавиши С.

procedure TForm1.Button1Click(Sender: TObject);
var
 hw:hwnd;
begin
 hw:=FindWindow("TAplication","winamp.exe");
 postmessage(hw, wm_keydown, ord("c"), 0);
end;

естейственно не работает - полюбому в функции неправиньно параметры указал.


 
Leonid Troyanovsky ©   (2007-03-05 00:01) [33]


> Romm   (04.03.07 22:32) [32]

> естейственно не работает - полюбому в функции неправиньно
> параметры указал.

Дык, укажи правильные.
Winsight32.exe тебе в руки.

--
Regards, LVT.


 
_RusLAN ©   (2007-03-05 15:03) [34]

я когда-то пользовалься этим модулем:

http://www.hostmake.ru/articles/delphi/352/

имитирует нажатия клавиш на клавиатуре.

насколько помню - работало.


 
DVM ©   (2007-03-05 18:45) [35]


> Romm   (04.03.07 22:32) [32]
>
> > DVM ©   (04.03.07 21:46) [30]
>
> помоги плз разобраться с FindWindow()


> hw:=FindWindow("TAplication","winamp.exe");

Какой нахрен TApplication?

Для моей версии WinAmp (все работает):

procedure TForm1.Button1Click(Sender: TObject);
var
 h: THandle;
begin
 h := FindWindow(nil, "Winamp 5.3");
 if h <> 0 then
   begin
     PostMessage(h, WM_KEYDOWN, ord("S"), 0);
   end;
end;


 
Nija   (2007-03-05 19:10) [36]

>http://www.hostmake.ru/articles/delphi/352/

Помогите разобраться в этой статье, а то у меня этот код не комплиируется.


 
@!!ex ©   (2007-03-05 19:23) [37]

Тваю *****.
Народ. чего вы его сбиваете??
На*** ему FindWindow??? Пускай тупо отсыает активному окну.
Не находите, что это эффективнее? :))
PostMessage(GetFocus, WM_KEYDOWN, ord("S"), 0);
Хотя я все равно предпочитаю SendMessage. :))


 
Nija   (2007-03-05 19:31) [38]

> FindWindow(nil, "Winamp 5.3");
Второй параметр в этом коде, что это, и где его взять.


 
DVM ©   (2007-03-05 20:27) [39]


> Народ. чего вы его сбиваете??
> На*** ему FindWindow??? Пускай тупо отсыает активному окну.
>
> Не находите, что это эффективнее? :))
> PostMessage(GetFocus, WM_KEYDOWN, ord("S"), 0);

Не нахожу. Потому, что:
1) Читай справку по функции GetFocus:
The GetFocus function retrieves the handle of the window that has the keyboard focus, if the window is associated with the calling thread"s message queue.

2) Если ему требуется управлять Винампом, находясь в игре, то активным будет окно игры, а не оконо винампа.


> Хотя я все равно предпочитаю SendMessage. :))

Аргументируй, если не трудно.


> Nija   (05.03.07 19:31) [38]
> > FindWindow(nil, "Winamp 5.3");
> Второй параметр в этом коде, что это, и где его взять.

Это заголовок окна. Определить можно с помощью программ SPY++ или Winsight32, тебе уже говорили это два раза.


 
Belorus ©   (2007-03-06 00:10) [40]

> Это заголовок окна. Определить можно с помощью программ
> SPY++ или Winsight32, тебе уже говорили это два раза.

И если я не ошибаюсь, то часто с помощью глаз сфокусированых на таскбар, когда игра свёрнута. Обычно не трудно найти название.



Страницы: 1 2 вся ветка

Форум: "Начинающим";
Текущий архив: 2007.04.01;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.54 MB
Время: 0.038 c
2-1173447779
Provodnick
2007-03-09 16:42
2007.04.01
Ошибка при завершении консольного приложения


2-1173549871
Washington
2007-03-10 21:04
2007.04.01
Создание объектов


2-1173121982
Roman_S
2007-03-05 22:13
2007.04.01
Как проверить: "если Copy(SearchRP.Name, i, 1)=цифра, тогда ..."


15-1173178219
Ega23
2007-03-06 13:50
2007.04.01
Так сколько раз будет вычеслено условие цикла???


15-1173171766
vajo
2007-03-06 12:02
2007.04.01
The Bat





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский