Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.93/15: Рейтинг темы: голосов - 15, средняя оценка - 4.93
10 / 10 / 1
Регистрация: 26.11.2012
Сообщений: 43

Отправка виртуальных клавиш непосредственно виндоус

23.01.2013, 18:11. Показов 3149. Ответов 30
Метки нет (Все метки)

Ставлю такой код:
C++
1
2
3
4
5
6
keybd_event(VK_CONTROL, 0, 0, 0);
keybd_event(18, 0, 0, 0);
keybd_event(67, 0, 0, 0);
keybd_event(67, 0, KEYEVENTF_KEYUP, 0);
keybd_event(18, 0, KEYEVENTF_KEYUP, 0);
keybd_event(VK_CONTROL, 0, KEYEVENTF_KEYUP, 0);
Но коды отправляются только активному приложению. Как мне отправить данную комбинацию виртуальных клавиш непосредственно в винду а не в активное приложение?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
23.01.2013, 18:11
Ответы с готовыми решениями:

Константы виртуальных клавиш
Помогите, пожалуйста. Все константы вируальных клавиш хранятся на компьютере в виде таблицы. Подскажите, где именно, в каком файле?! Я...

Перевод виртуальных кодов клавиш в машинные
С помощью такой штуки можно узнать виртуальный код клавиши: for(int i =0; i < 256; i++) { if((GetAsyncKeyState(i) & 0x8000) !=...

Отправка письма непосредственно из программы
Добрый вечер, как можно организовать отправку письма из программы?

30
10 / 10 / 1
Регистрация: 26.11.2012
Сообщений: 43
24.01.2013, 02:26  [ТС]
Почему же у меня оно не работает ни через BroadCast ни через keybd_event и SendInput?
Комбинация правильная и приложение шлет все как положено, проверял на перехватчике хоткеев но команда мультимедиа не срабатывает... Походу оно шлет гдето в винду я так понял... Вот бы узнать куда...

Добавлено через 2 минуты
Кстати толькочто пробовал повторить вручную комбинацию на клавиатуре "Ctrl+Alt+B" должна была увеличится громкость но ничего не менялось...
0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
24.01.2013, 02:48
Цитата Сообщение от зукс Посмотреть сообщение
но команда мультимедиа не срабатывает..
Какая конкретно команда ?

Добавлено через 1 минуту
Цитата Сообщение от зукс Посмотреть сообщение
Кстати толькочто пробовал повторить вручную комбинацию на клавиатуре "Ctrl+Alt+B" должна была увеличится громкость но ничего не менялось...
Вот оно на ... намотано... приехали...

Изменяйте громкость программно нафига эмулировать ?
0
10 / 10 / 1
Регистрация: 26.11.2012
Сообщений: 43
24.01.2013, 02:53  [ТС]
Цитата Сообщение от Avazart Посмотреть сообщение
Изменяйте громкость программно нафига эмулировать ?
В том то и дело что изначально так и думал но все мои попытки добратся до микшера закончились печально... в 7-ке не так просто менять громкость программно.
Сочетание клавиш должно означть "громкость +" но теперь я уже чтото сомневаюсь что та программка мне выдала правильное сочетание... А таблицу сочетаний мультимедийных клавиш не нашел...

Добавлено через 1 минуту
А семерка при любой попытке сделать чтото с микшером создает отдельный канал для моего приложения и получается я меняю только его...
0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
24.01.2013, 03:07
Цитата Сообщение от зукс Посмотреть сообщение
В том то и дело что изначально так и думал но все мои попытки добратся до микшера закончились печально... в 7-ке не так просто менять громкость программно.
По моему все просто... а это - изврат...
0
10 / 10 / 1
Регистрация: 26.11.2012
Сообщений: 43
24.01.2013, 03:08  [ТС]
Цитата Сообщение от Avazart Посмотреть сообщение
По моему все просто...
Как?
0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
24.01.2013, 03:08
Цитата Сообщение от зукс Посмотреть сообщение
А семерка при любой попытке сделать чтото с микшером создает отдельный канал для моего приложения и получается я меняю только его...
С этим и нужно разбираться...
0
10 / 10 / 1
Регистрация: 26.11.2012
Сообщений: 43
24.01.2013, 03:10  [ТС]
Я создавал тему по этому поводу но никто ничего нормального не ответил
тема микшера
0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
24.01.2013, 03:27
И там вам ответили
Цитата Сообщение от UI Посмотреть сообщение
Vista и выше - уровень звука меняется через интерфейс IAudioEndpointVolume. Пример есть у Ларри Остермана
Что не нормально ?

То что не на блюдечке с каЁмочкой?

Добавлено через 3 минуты
Вот каЁмочка при первом же вбивании в google c другого форума
Вот, нарыл. Мож кому пригодтися. Решение работает от винды висты и выше (на XP не проверял - не должно по идее работать)
Может и коряво, но работает. Номер канала нуна подбирать, у меня центральный номер 2 оказался, первые два Left Right
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
float getvol(void)
{
 double newVolume;
 
 CoInitialize(NULL);
 IMMDeviceEnumerator *deviceEnumerator = NULL;
 CoCreateInstance(__uuidof(MMDeviceEnumerator), NULL, CLSCTX_INPROC_SERVER, __uuidof(IMMDeviceEnumerator), (LPVOID *)&deviceEnumerator);
 IMMDevice *defaultDevice = NULL;
 
 deviceEnumerator->GetDefaultAudioEndpoint(eRender, eConsole, &defaultDevice);
 deviceEnumerator->Release();
 deviceEnumerator = NULL;
 
 IAudioEndpointVolume *endpointVolume = NULL;
 defaultDevice->Activate(__uuidof(IAudioEndpointVolume), CLSCTX_INPROC_SERVER, NULL, (LPVOID *)&endpointVolume);
 defaultDevice->Release();
 defaultDevice = NULL;
 
 // -------------------------
 float currentVolume = 0;
 endpointVolume->GetMasterVolumeLevelScalar(&currentVolume);
 
 //  endpointVolume->SetMasterVolumeLevelScalar((float)newVolume, NULL);
 endpointVolume->Release();
 CoUninitialize();
 return (currentVolume);
}
 
void setvol(double newVolume)
{
 
 CoInitialize(NULL);
 IMMDeviceEnumerator *deviceEnumerator = NULL;
 CoCreateInstance(__uuidof(MMDeviceEnumerator), NULL, CLSCTX_INPROC_SERVER, __uuidof(IMMDeviceEnumerator), (LPVOID *)&deviceEnumerator);
 IMMDevice *defaultDevice = NULL;
 
 deviceEnumerator->GetDefaultAudioEndpoint(eRender, eConsole, &defaultDevice);
 deviceEnumerator->Release();
 deviceEnumerator = NULL;
 
 IAudioEndpointVolume *endpointVolume = NULL;
 defaultDevice->Activate(__uuidof(IAudioEndpointVolume), CLSCTX_INPROC_SERVER, NULL, (LPVOID *)&endpointVolume);
 defaultDevice->Release();
 defaultDevice = NULL;
 
 // -------------------------
 endpointVolume->SetMasterVolumeLevelScalar((float)newVolume, NULL);
 endpointVolume->Release();
 CoUninitialize();
}
 
float getchvol(unsigned int cnl)
{
 double newVolume;
 
 CoInitialize(NULL);
 IMMDeviceEnumerator *deviceEnumerator = NULL;
 CoCreateInstance(__uuidof(MMDeviceEnumerator), NULL, CLSCTX_INPROC_SERVER, __uuidof(IMMDeviceEnumerator), (LPVOID *)&deviceEnumerator);
 IMMDevice *defaultDevice = NULL;
 
 deviceEnumerator->GetDefaultAudioEndpoint(eRender, eConsole, &defaultDevice);
 deviceEnumerator->Release();
 deviceEnumerator = NULL;
 
 IAudioEndpointVolume *endpointVolume = NULL;
 defaultDevice->Activate(__uuidof(IAudioEndpointVolume), CLSCTX_INPROC_SERVER, NULL, (LPVOID *)&endpointVolume);
 defaultDevice->Release();
 defaultDevice = NULL;
 
 // -------------------------
 float currentVolume = 0;
 endpointVolume->GetChannelVolumeLevelScalar(cnl,&currentVolume);
 //  endpointVolume->SetMasterVolumeLevelScalar((float)newVolume, NULL);
 endpointVolume->Release();
 CoUninitialize();
 return (currentVolume);
}
 
void setchvol(unsigned int cnl, double newVolume)
{
 
 CoInitialize(NULL);
 IMMDeviceEnumerator *deviceEnumerator = NULL;
 CoCreateInstance(__uuidof(MMDeviceEnumerator), NULL, CLSCTX_INPROC_SERVER, __uuidof(IMMDeviceEnumerator), (LPVOID *)&deviceEnumerator);
 IMMDevice *defaultDevice = NULL;
 
 deviceEnumerator->GetDefaultAudioEndpoint(eRender, eConsole, &defaultDevice);
 deviceEnumerator->Release();
 deviceEnumerator = NULL;
 
 IAudioEndpointVolume *endpointVolume = NULL;
 defaultDevice->Activate(__uuidof(IAudioEndpointVolume), CLSCTX_INPROC_SERVER, NULL, (LPVOID *)&endpointVolume);
 defaultDevice->Release();
 defaultDevice = NULL;
 
 // -------------------------
 endpointVolume->SetChannelVolumeLevelScalar(cnl, (float)newVolume, NULL);
 endpointVolume->Release();
 CoUninitialize();
}
 
 
 
bool getmute(void)
{
 CoInitialize(NULL);
 IMMDeviceEnumerator *deviceEnumerator = NULL;
 CoCreateInstance(__uuidof(MMDeviceEnumerator), NULL, CLSCTX_INPROC_SERVER, __uuidof(IMMDeviceEnumerator), (LPVOID *)&deviceEnumerator);
 IMMDevice *defaultDevice = NULL;
 
 deviceEnumerator->GetDefaultAudioEndpoint(eRender, eConsole, &defaultDevice);
 deviceEnumerator->Release();
 deviceEnumerator = NULL;
 
 IAudioEndpointVolume *endpointVolume = NULL;
 defaultDevice->Activate(__uuidof(IAudioEndpointVolume), CLSCTX_INPROC_SERVER, NULL, (LPVOID *)&endpointVolume);
 defaultDevice->Release();
 defaultDevice = NULL;
 
 // -------------------------
 int mute;
 endpointVolume->GetMute(&mute);
//  endpointVolume->SetMasterVolumeLevelScalar((float)newVolume, NULL);
 endpointVolume->Release();
 CoUninitialize();
 if (mute) return true; else return false;
}
 
void setmute(bool mute)
{
 CoInitialize(NULL);
 IMMDeviceEnumerator *deviceEnumerator = NULL;
 CoCreateInstance(__uuidof(MMDeviceEnumerator), NULL, CLSCTX_INPROC_SERVER, __uuidof(IMMDeviceEnumerator), (LPVOID *)&deviceEnumerator);
 IMMDevice *defaultDevice = NULL;
 
 deviceEnumerator->GetDefaultAudioEndpoint(eRender, eConsole, &defaultDevice);
 deviceEnumerator->Release();
 deviceEnumerator = NULL;
 
 IAudioEndpointVolume *endpointVolume = NULL;
 defaultDevice->Activate(__uuidof(IAudioEndpointVolume), CLSCTX_INPROC_SERVER, NULL, (LPVOID *)&endpointVolume);
 defaultDevice->Release();
 defaultDevice = NULL;
 
 // -------------------------
 endpointVolume->SetMute(mute,NULL);
//  endpointVolume->SetMasterVolumeLevelScalar((float)newVolume, NULL);
 endpointVolume->Release();
 CoUninitialize();
}
Добавлено через 2 минуты
Там же речь о компоненте AMixer
1
24.01.2013, 03:38
 Комментарий модератора 
Название темы: Отправка виртуальных клавиш.
Если вопрос с клавишами решен, а треп о звуках - от нечего делать, тема будет закрыта.
0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
24.01.2013, 03:45
Ха нашел действительно проще

Понижает громкость
C++
1
2
keybd_event(0xAE, MapVirtualKey(0xAE,0), 0, 0);
keybd_event(0xAE, MapVirtualKey(0xAE,0), KEYEVENTF_KEYUP, 0);
Только тут еще с магическими числами надо разобраться...

Добавлено через 4 минуты
Всего то стоило поискать

VK_VOLUME_MUTE AD Volume Mute key
VK_VOLUME_DOWN AE Volume Down key
VK_VOLUME_UP AF Volume Up key
http://api.farmanager.com/ru/w... codes.html
2
10 / 10 / 1
Регистрация: 26.11.2012
Сообщений: 43
24.01.2013, 03:53  [ТС]
Цитата Сообщение от Avazart Посмотреть сообщение
VK_VOLUME_MUTE AD Volume Mute key
VK_VOLUME_DOWN AE Volume Down key
VK_VOLUME_UP AF Volume Up key
Опа-па... Заработало! Спасибище тебе огромное!!!
Завтра попробую вариант с микшером а пока так пусть поработает)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
24.01.2013, 03:53

Обработка нажатий клавиш громкости непосредственно Service (Activity уже закрыто)
Уважаемые форумчане! Буду благодарен за любую помощь. Написал добрую часть приложения для Android, состоящего из Активности и...

Сеть между компом(виндоус 7) с интернетом и ноутом(виндоус хр)
Хочу подключиться ко второму компьютеру(виндоус 7) в котором есть интернет дом.ру чтобы им пользоваться(интернетом). сеть м\у компами...

Отправка гор. клавиш блокноту
Всем привет! Есть блокнот, как отправить на него гор. клавишу Ctrl+F? 1 вариант (предполагается, что форма блокнота свернута) 2...

Отправка нажатия клавиш окну ВИНАПИ
Добрый день. Возникла проблема с имитацией нажатия клавиш в свернутом окне. Использовав sky++, определил, что при нажатии клавиши...

Отправка нажатия клавиш в другое приложение
Нужно чтобы когда человек нажимал на кнопку, в другом приложении , допустим в игре Rust , прожимались клавиши F1-F12 , End, Inser , Home...


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

Или воспользуйтесь поиском по форуму:
31
Ответ Создать тему
Новые блоги и статьи
[golang] Конкурентный fetcher с ограничением максимального количества одновременных HTTP запросов.
alhaos 10.06.2026
Задача Реализовать конкурентный fetcher с ограничением максимального количества одновременных HTTP запросов. Сигнатура func Fetch(urls string, maxConcurrent int) Result Пример urls :=. . .
[golang] Состояние гонки (race condition)
alhaos 10.06.2026
Состояние гонки (race condition) Состояние гонки (Race Condition) — это ошибка, возникающая при одновременном доступе нескольких горутин к одним и тем же данным без должной синхронизации. При этом. . .
Взрослые отношения, и почему они не получаются
kumehtar 09.06.2026
Когда в детстве ребёнок не получает от родителей чего-то важного, он лишается не просто приятных переживаний, а основы для формирования определённых внутренних качеств и навыков. Если ребёнок не. . .
[golang] Worker Pool
alhaos 09.06.2026
Worker Pool Worker Pool — паттерн конкурентной обработки задач в Go. Суть: фиксированное количество горутин-воркеров читают задачи из общего канала и пишут результаты в общий канал результатов. . . .
[golang] Pipeline
alhaos 08.06.2026
Pipeline Pipeline — паттерн конкурентной обработки данных в Go. Суть: данные проходят через цепочку независимых стадий, каждая из которых работает в своей горутине и общается с соседями через. . .
Свет внутри себя
kumehtar 07.06.2026
Пусть это будет здесь lIs4oanZS9Y
Программа для com-порта
Uhbif79 05.06.2026
Всем привет, давно хотел изучить Qt, начинал, бросал, потом снова начинал. И сейчас вот смог написать свою первую программу. До этого имел опыт программирования микроконтроллеров, писал прошивки на. . .
Транскрипция 55-минутного видео через Whisper: WhisperDesktop облажался, спас Google Colab[
anaschu 01.06.2026
Понадобилось получить текст из свежезагруженного видео на YouTube. Казалось бы, задача на пять минут. Заняла полтора часа. Делюсь опытом — может кому пригодится последовательность решений. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru