![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Сигнал в "мозг" [D7, XP]
Nija © (2007-03-04 18:17:00)Привет всем, помогите пожалуйста сделать следующее: нужно что бы программа с эмулировала нажатие кнопки "S" на клавиатуре.
(с эмулировала значит компьютер подумал что она была нажата)
sniknik (2007-03-06 17:18:00) [1]> ... имя второй программы Project2.
>...
> h := FindWindow(nil, ' Project2');
>...
> И не работает, вопрос почему?
имя программы <> имени окна. обычно не равно, не, бывает конечно, но не часто.
окно просто не найдет.
Сергей М. (2007-03-06 17:07:00) [2]Потому что кроме KEYDOWN существует еще и KEYUP.
Nija (2007-03-06 16:22:00) [3]У меня не работает этот код, я создал 2 программы одну которая отсылает сообщение, а вторую которая это сообщение должна получить. Во второй я создаю TActionList, в нём добавляю действие и ставлю горячию клавишу(Insert), имя второй программы Project2.
Код стал таким
procedure TForm1.Button1Click(Sender: TObject);
var
h: THandle;
begin
h := FindWindow(nil, 'Project2');
if h <> 0 then
begin
PostMessage(h, WM_KEYDOWN, vk_insert, 0);
end;
И не работает, вопрос почему?
end;
Belorus (2007-03-06 00:10:00) [4]> Это заголовок окна. Определить можно с помощью программ
> SPY++ или Winsight32, тебе уже говорили это два раза.
И если я не ошибаюсь, то часто с помощью глаз сфокусированых на таскбар, когда игра свёрнута. Обычно не трудно найти название.
DVM (2007-03-05 20:27:00) [5]
> Народ. чего вы его сбиваете??
> На*** ему 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, тебе уже говорили это два раза.
Nija (2007-03-05 19:31:00) [6]> FindWindow(nil, 'Winamp 5.3');
Второй параметр в этом коде, что это, и где его взять.
@!!ex (2007-03-05 19:23:00) [7]Тваю *****.
Народ. чего вы его сбиваете??
На*** ему FindWindow??? Пускай тупо отсыает активномуокну.
Не находите, что это эффективнее? :))
PostMessage(GetFocus, WM_KEYDOWN, ord('S'), 0);
Хотя я все равно предпочитаю SendMessage. :))
Nija (2007-03-05 19:10:00) [8]> http://www.hostmake.ru/articles/delphi/352/
Помогите разобраться в этой статье, а то у меня этот код не комплиируется.
DVM (2007-03-05 18:45:00) [9]
> 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;
_RusLAN (2007-03-05 15:03:00) [10]я когда-то пользовалься этим модулем:
http://www.hostmake.ru/articles/delphi/352/
имитирует нажатия клавиш на клавиатуре.
насколько помню - работало.
Leonid Troyanovsky (2007-03-05 00:01:00) [11]
> Romm (04.03.07 22:32) [32]
> естейственно не работает - полюбому в функции неправиньно
> параметры указал.
Дык, укажи правильные.
Winsight32.exe тебе в руки.
--
Regards, LVT.
Romm (2007-03-04 22:32:00) [12]
> 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;
естейственно не работает - полюбому в функции неправиньно параметры указал.
Romm (2007-03-04 21:49:00) [13]
> Я так понял, что он хочет управлять чужим приложением -
> игрой. Ни о каких формах там речи идти не может. Только
> классы окон, заголовки окон и хэндлы окон.
смысл тот же..
DVM (2007-03-04 21:46:00) [14]
> Romm (04.03.07 21:43) [28]
> Form1 - это имя формы. Оно у всех разное :)
Я так понял, что он хочет управлять чужим приложением - игрой. Ни о каких формах там речи идти не может. Только классы окон, заголовки окон и хэндлы окон.
> Nija (04.03.07 21:37) [27]
> И как мне сообщить это действие игре?
Ты вообще читаешь ответы?
Nija (2007-03-04 21:46:00) [15]Да, это я уже исправил.
Romm (2007-03-04 21:43:00) [16]
> 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:37:00) [17]И как мне сообщить это действие игре?
Джойстик работает так:
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:33:00) [18]Ты говорил, что с Джойстиком разобрался. Поэтому это пропустим.
Дальше кидаешь на форму компонент TActionList. Пишешь действия и назначаешь горячие клавиши (ShortCut). Например Action1 - бег назад. Назначаешь ShortCut:='S';
После чего:
procedure {тут нажатие кнопы джойстика}(Sender: TObject);
begin
postmessage(Form1.Handle, wm_keydown, ord('S'), 0);
end;
Че тут сложного?
Правильный Вася (2007-03-04 21:31:00) [19]
> Сигнал в "мозг"
лучше в попу
Nija (2007-03-04 21:21:00) [20]Вообщем так нужна программа, которая бы отслежывала нажатия кнопок на джойстике и если нажата нужна кнопка, то послать сигнал одной игре.
Тоесть, пользователь запускает игру и управляет ей джойстиком если нажата нужная кнопка, в игре должно произойте кое-что.