Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
1 / 1 / 0
Регистрация: 15.03.2012
Сообщений: 113
1

Имитация нажатия маленькой буквы

07.09.2012, 14:09. Показов 1037. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Отловил клавишу проимитировал ее нажатия но проблема если имитировать нажатие любой клавиши+Shift (то есть большую букву ) то все нормально работает
Код
C++
1
2
3
4
  keybd_event(VK_SHIFT, 0, 0 ,0);            
               keybd_event(0x41, 0, 0 ,0);               
               keybd_event(VK_SHIFT, 0, KEYEVENTF_KEYUP,0);
               keybd_event(0x41, 0, KEYEVENTF_KEYUP,0);
Если же просто мальенькую букву проимитировать то ничего не получаеться прсто прога виснит очень сильно
КОД

C++
1
2
keybd_event(0x41, 0, 0 ,0);                
               keybd_event(0x41, 0, KEYEVENTF_KEYUP,0);
Помогите плиз
весть код вот


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
//---------------------------------------------------------------------------
 
#include <vcl.h>
#pragma hdrstop
 
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
#include <tlhelp32.hpp>
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
 
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::ApplicationEvents1Message(tagMSG &Msg,
      bool &Handled)
{
if (Msg.message == WM_HOTKEY)
        {
      
if(LOWORD((DWORD)GetKeyboardLayout(GetWindowThreadProcessId(GetForegroundWindow(), NULL)))==1049)   
               {
 
 
 
 
 
               if (Msg.wParam == 2)
                {
               keybd_event(VK_SHIFT, 0, 0 ,0);            
               keybd_event(0x41, 0, 0 ,0);                 
               keybd_event(VK_SHIFT, 0, KEYEVENTF_KEYUP,0);
               keybd_event(0x41, 0, KEYEVENTF_KEYUP,0);    
                 }
          
         }
     }
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::FormCreate(TObject *Sender)
{
   RegisterHotKey(Handle,2,0,'A');
 
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormActivate(TObject *Sender)
{
ShowWindow(Form1->Handle, SW_HIDE);
 
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{
UnregisterHotKey(Handle,0);
 
}
 
void __fastcall TForm1::FormShow(TObject *Sender)
{
//ShowWindow(Application->Handle, SW_HIDE);
}
Добавлено через 1 час 17 минут
понял почему зависает оно не хочет принимать вот эти значения клавиш
keybd_event(0x41, 0, 0 ,0);
можно как то клавиши (0x41) писать типо "VK_SHIFT"
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.09.2012, 14:09
Ответы с готовыми решениями:

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

Вывести слова, начинающиеся с маленькой буквы
Всем привет, помогите решить задачку на C++ билдер.. Не могу понять с чего начать . Из заданной...

Имитация нажатия сылки
Задача состоит в том - штобы из свого приложеня (по нажатию кнопки) в Браузере (Опера) нажималась...

Имитация нажатия кнопки
Подскажите пожалуйста как можно программно нажать кнопку. То есть например при открытии удаленного...

2
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32835 / 21172 / 8148
Регистрация: 22.10.2011
Сообщений: 36,431
Записей в блоге: 8
07.09.2012, 14:17 2
Цитата Сообщение от Rinof Посмотреть сообщение
Если же просто мальенькую букву проимитировать то ничего не получаеться прсто прога виснит очень сильно
Естественно, у тебя ж бесконечная рекурсяи получается. Посылаешь нажатие маленькой буквы, сам же его перехватываешь, как новый shortcut, и так далее. Положи на форму Memo, и выводи в него какое-нибудь сообщение, как только пришел в блок, где используешь kbd_event. Как только нажмешь "a" - у тебя Memo тут же начнет заполняться, причем не перестанет, пока программу не закроешь.

Кстати, не
C++
1
2
// UnregisterHotKey(Handle,0);
UnregisterHotKey(Handle,2);
Ты создавал ShortCut с ID =2, вот и удаляй с тем же ID.
0
1 / 1 / 0
Регистрация: 15.03.2012
Сообщений: 113
07.09.2012, 14:29  [ТС] 3
но как избежаить чтобы оно нЕ крутилось что то не могу придумать
0
07.09.2012, 14:29
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.09.2012, 14:29
Помогаю со студенческими работами здесь

Имитация нажатия CapsLock через реестр
Вот это так делается обычным способом: keybd_event(VK_CAPITAL, 0, 0 ,0); keybd_event(VK_CAPITAL,...

Имитация нажатия клавиш в неактивном браузере
Здравствуйте форумчане, очень нужна ваша помощь. Цель: программно нажать клавиши ctrl+a в...

Перехват и имитация нажатия клавиши клавиатуры в чужом приложении
Есть тема... Нужно, чтобы при нажатии на кнопку, например f1 . У меня последовательно с разными...

Имитация нажатия кнопкой мыши в определенном окне внешней программы
Нужна помощь вот в каков вопросе: как с имитировать нажатие мышкой в определенном окне(например в...

Имитация нажатия клавиш
как только и не пытался всё выводит одну и туже ошибку, помогите начинающему c++ юзеру #include...

Имитация нажатия клавиш С/С++
Задача такая: Программа должна имитировать нажатие клавиш в фоновом режиме. То-есть она должна...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru