Форум: "Начинающим";
Текущий архив: 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