Форум программистов, компьютерный форум, киберфорум
Наши страницы
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.96/23: Рейтинг темы: голосов - 23, средняя оценка - 4.96
megostudent
4 / 4 / 2
Регистрация: 15.02.2011
Сообщений: 78
#1

Программное нажатие клавиши на клавиатуре

23.09.2011, 17:26. Просмотров 4120. Ответов 42
Метки нет (Все метки)

подскажите как программно нажать клавишу на клавиатуре, например "1"???

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.09.2011, 17:26
Ответы с готовыми решениями:

Перемещение обьекта по нажатию клавиши на клавиатуре
Допустим у меня есть компонент Image на форме, мне нужно чтобы по нажатию...

Программное нажатие mouse1
Можно ли как-то программно нажать mouse1? P.s. Mouse_Event не подходит!

Программное нажатие пробела
Как сделать,чтобы при нажатии на определенную кнопку программа делала несколько...

Как запретить нажатие определенных клавиш на клавиатуре в зависимости от нажатых до этого?
На форме расположено поле Edit и туда вводится некий текст. но при нажатии...

Программное нажатие кнопки backspace
Как программно нажать кнопку backspace?

42
megostudent
4 / 4 / 2
Регистрация: 15.02.2011
Сообщений: 78
25.09.2011, 14:46  [ТС] #21
[ArenaOnline3D] [ArenaOnline3D] (Допустимое окно) (Не скрыто) *[68086]**
вот что показало второй раз

и я не понял что сделать надо
0
deathNC
1891 / 1004 / 123
Регистрация: 08.12.2009
Сообщений: 2,792
Записей в блоге: 2
25.09.2011, 14:49 #22
Цитата Сообщение от megostudent Посмотреть сообщение
*[68086]**
Это число - я так полагаю, это и есть Handle нужного окна (будь то форма или её контрол).

Добавлено через 49 секунд
Пробуй на этот получаемый хэндл и отсылать свой PostMessage...
0
megostudent
4 / 4 / 2
Регистрация: 15.02.2011
Сообщений: 78
25.09.2011, 14:49  [ТС] #23
так первый раз когда я снимал эти значения цифры другие были

так а что ему не нрав если я название введу?
0
igoriy
871 / 542 / 117
Регистрация: 24.11.2009
Сообщений: 1,329
25.09.2011, 14:51 #24
Ничего в природе не постоянно - и хэндл то же - это число не постоянное - оно смениться если перезапустишь прогу
1
deathNC
1891 / 1004 / 123
Регистрация: 08.12.2009
Сообщений: 2,792
Записей в блоге: 2
25.09.2011, 14:55 #25
Цитата Сообщение от megostudent Посмотреть сообщение
так первый раз когда я снимал эти значения цифры другие были
При создании формы берётся любой незанятый хэндл. Не обязательно, который был в прошлый раз. Тем более не знаю, как даже и определить, какой был в прошлый раз (если самому не записывать)...

Цитата Сообщение от megostudent Посмотреть сообщение
ак а что ему не нрав если я название введу?
А ты за одну и ту же сессию сравни - совпадает ли получаемый хэндл через название (FindWIndow) с тем, который через код Igoriy получется...
0
megostudent
4 / 4 / 2
Регистрация: 15.02.2011
Сообщений: 78
25.09.2011, 15:00  [ТС] #26
Delphi
1
2
3
4
5
6
7
8
9
var h:HWND; //Переменная для окон
begin
h:=FindWindow(nil,'Мой компьютер');  //Ищем нужную программу , точне окна
if h<>0 then //Если она найдено то....
begin
SendMessage(h,WM_KEYDOWN,VK_F1,0);  
SendMessage(h,WM_KEYUP,VK_F1,0);  
end;
end;
пришла мысль попробовать на чем-то простом) и решил вызвать справку у моего компьютера, печально, это не вышло(
0
deathNC
1891 / 1004 / 123
Регистрация: 08.12.2009
Сообщений: 2,792
Записей в блоге: 2
25.09.2011, 15:05 #27
megostudent, дело не в хэндле. Попробуй так:
Delphi
1
SendMessage(FindWindow(nil, 'Мой компьютер'), WM_Close, 0, 1);
0
megostudent
4 / 4 / 2
Регистрация: 15.02.2011
Сообщений: 78
25.09.2011, 15:29  [ТС] #28
не сработало, ток звучки дын, дын, дын ))
0
deathNC
1891 / 1004 / 123
Регистрация: 08.12.2009
Сообщений: 2,792
Записей в блоге: 2
25.09.2011, 15:37 #29
Ну так хотя бы сработает поди:
Delphi
1
2
3
4
5
6
7
8
9
var
  hWindow: HWND;
begin
  hWindow := FindWindow(nil, PWideChar(Self.Caption));
  If hWindow <> Invalid_Handle_Value then
    PostMessage(hWindow, WM_Close, 0, 1)
  else
    MessageBox(Handle, 'Окно не нейдено!', 'Ошибочка!', mb_IconError);
end;
Просто возможно "Мой компьютер" в win7 не так называется, или никак не называется (там же на проводнике вообще надписей нет). Если у тебя не 7 и не Vista, то не знаю, почему не сработало...

Если на PWideChar заругается, то замени его на PAnsiChar!
0
megostudent
4 / 4 / 2
Регистрация: 15.02.2011
Сообщений: 78
25.09.2011, 15:47  [ТС] #30
Delphi
1
hWindow := FindWindow(nil, PWideChar(Self.Caption));
[Error] Unit1.pas(30): Incompatible types: 'WideChar' and 'Char'
ошибка в строке

у меня ХР
0
deathNC
1891 / 1004 / 123
Регистрация: 08.12.2009
Сообщений: 2,792
Записей в блоге: 2
25.09.2011, 15:51 #31
Цитата Сообщение от megostudent Посмотреть сообщение
[Error] Unit1.pas(30): Incompatible types: 'WideChar' and 'Char'
ошибка в строке
Я же написал тебе:
Цитата Сообщение от deathNC Посмотреть сообщение
Если на PWideChar заругается, то замени его на PAnsiChar!
Сделай так:
Delphi
1
hWindow := FindWindow(nil, PAnsiChar(Self.Caption));
И заработает

Добавлено через 1 минуту
Просто где-то в 2007 году WideChar и AnsiChar в дельфях немного поменялись местами, или как это сказать.

Не по теме:

Кароч, у меня Delphi 2009, у тебя, полагаю, Delphi 7...

0
spydark91
86 / 86 / 13
Регистрация: 03.03.2011
Сообщений: 1,873
25.09.2011, 16:00 #32
у меня такая же проблема с окном нарисованным в дериктХ,надло послать строку чату,например, фокус получают чат если нажать ентер(те сначала окну надо послать ентер). посылаю на хендл окна через пост,но ничего не происходит
п.с.игра perfect world
0
megostudent
4 / 4 / 2
Регистрация: 15.02.2011
Сообщений: 78
25.09.2011, 16:03  [ТС] #33
да теперь заработало) какой из этого вывод то?)) как мне это воплотить в нажатие клавиш моих?)))
юзаю дельфу7
0
deathNC
1891 / 1004 / 123
Регистрация: 08.12.2009
Сообщений: 2,792
Записей в блоге: 2
25.09.2011, 16:06 #34
Вывод их этого такой - когда ты пытался закрыть "мой компьютер", заголовок был введён тобою не правильно. Я тоже его ввёл неправильно. Поэтому FindWindow не нашла хэндл "Моего Компьютера".
Ещё можно сделать вывод, что надо всё таки всем контролам посылать сообщение...
А как это сделать, сейчас повспоминаю...
0
megostudent
4 / 4 / 2
Регистрация: 15.02.2011
Сообщений: 78
25.09.2011, 16:22  [ТС] #35
прикольно но я менял хендл моего компьютера,
Delphi
1
2
SetWindowText(FindWindow(nil, 'Мой компьютер'),
    'НЕ мой компьютер');
и менялося все четко. друзья говорили что есть такая прога которая клацает 1,2,3 и т.д. знач как-то можно...
0
deathNC
1891 / 1004 / 123
Регистрация: 08.12.2009
Сообщений: 2,792
Записей в блоге: 2
25.09.2011, 19:10 #36
Цитата Сообщение от megostudent Посмотреть сообщение
но я менял хендл моего компьютера
Может, надпись окна "Мой компьютер"?

И тут странный вывод можно сделать - окошко не закрылось. То есть ты хочешь сказать, что его хэндл всё таки нашёлся, а вот почему-то оно не закрылось...
Ну, я ещё гляну, в чём проблема. Если не забуду, отпишусь..
0
megostudent
4 / 4 / 2
Регистрация: 15.02.2011
Сообщений: 78
26.09.2011, 10:36  [ТС] #37
блин реально просто название поменял. А можно окно по названию словить и "наказать" ему чтобы он принял нажатие клавиши ?

Добавлено через 11 часов 20 минут
может надо как-то узнать дескриптор окна?
0
deathNC
1891 / 1004 / 123
Регистрация: 08.12.2009
Сообщений: 2,792
Записей в блоге: 2
26.09.2011, 11:53 #38
Хэндл (Handle: THandle) или (Handle: HWND) - это и есть дескриптор окна...
0
megostudent
4 / 4 / 2
Регистрация: 15.02.2011
Сообщений: 78
26.09.2011, 21:38  [ТС] #39
deathNC ну что не нашел чего по теме?)

Добавлено через 1 час 58 минут
Delphi
1
2
3
4
5
6
7
8
9
var
  h : thandle;
begin
h:=null;
    h := findwindow('ArenaOnline3D', nil);
    SetForegroundWindow(h);
    sendMessage(h,WM_KEYDOWN,$31,0);
    sendMessage(h,WM_KEYUP,$31,0);
end;
вот че подыскал SetForegroundWindow(h); окно уже как-то реагирует, но нажатия не идет. Мож на какую мыслю натолкнет
0
deathNC
1891 / 1004 / 123
Регистрация: 08.12.2009
Сообщений: 2,792
Записей в блоге: 2
26.09.2011, 21:53 #40
Delphi
1
2
3
4
5
6
var
  handle: HWND;
begin
  handle := FindWindow(nil, 'Корзина');
  PostMessage(Handle, WM_Close, 1, 1);
end;
Всё сработало
0
26.09.2011, 21:53
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.09.2011, 21:53

Программное нажатие клавиш мыши
Уже 3 день думаю как сотворить сие)) Хочу в игре нажимать программно мышь через...

Перемещение картинки по форме при нажатии на клавиши стрелок на клавиатуре
Хочу, чтобы при нажатии на клавиши стрелок на клавиатуре картинка двигалась....

Нажатие клавиши
Здравствуйте уважаемые мною проффессионалы программирования! 8-) Мне нужны ваши...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru