Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.06.2015, 18:30   #1
andrey_abc
 
Регистрация: 04.06.2015
Сообщений: 4
По умолчанию Аналог punto switcher

Хочу сделать так, если я выделю текст(в любом приложении) и нажму какую-нибудь клавишу то он перевернется с английский букв в русские. Вопрос как отлавливать эту кнопку с других приложений?
Код:
#include <iostream>
using namespace std;
void main()
{  

CString fromClipboard;
char source[256]={"/0"};
if ( OpenClipboard(NULL) )
{
   HANDLE hData = GetClipboardData(CF_TEXT); буфера обмена
   char* chBuffer= (char*)GlobalLock(hData);//блокируем память
   fromClipboard = chBuffer;
   GlobalUnlock(hData);//разблокируем память
   CloseClipboard();//закрываем буфер обмена
}
map<CString,char> autoswitch;
autoswitch.insert (pair<CString,char>('Q','Й'));
autoswitch.insert (pair<CString,char>('q','й'));
autoswitch.insert (pair<CString,char>('W','Ц'));
autoswitch.insert (pair<CString,char>('w','ц'));
autoswitch.insert (pair<CString,char>('E','У'));
autoswitch.insert (pair<CString,char>('e','у'));
autoswitch.insert (pair<CString,char>('R','К'));
autoswitch.insert (pair<CString,char>('r','к'));
autoswitch.insert (pair<CString,char>('T','Е'));
autoswitch.insert (pair<CString,char>('t','е'));
autoswitch.insert (pair<CString,char>('Y','Н'));
autoswitch.insert (pair<CString,char>('y','н'));
autoswitch.insert (pair<CString,char>('U','Г'));
autoswitch.insert (pair<CString,char>('u','г'));
autoswitch.insert (pair<CString,char>('I','Ш'));
autoswitch.insert (pair<CString,char>('i','ш'));
autoswitch.insert (pair<CString,char>('O','Щ'));
autoswitch.insert (pair<CString,char>('o','щ'));
autoswitch.insert (pair<CString,char>('P','З'));
autoswitch.insert (pair<CString,char>('p','з'));
autoswitch.insert (pair<CString,char>('{','Х'));
autoswitch.insert (pair<CString,char>('[','х'));
autoswitch.insert (pair<CString,char>('}','ъ'));
autoswitch.insert (pair<CString,char>(']','ъ'));
autoswitch.insert (pair<CString,char>('A','Ф'));
autoswitch.insert (pair<CString,char>('a','ф'));
autoswitch.insert (pair<CString,char>('S','Ы'));
autoswitch.insert (pair<CString,char>('s','ы'));
autoswitch.insert (pair<CString,char>('D','В'));
autoswitch.insert (pair<CString,char>('d','в'));
autoswitch.insert (pair<CString,char>('F','А'));
autoswitch.insert (pair<CString,char>('f','а'));
autoswitch.insert (pair<CString,char>('G','П'));
autoswitch.insert (pair<CString,char>('g','п'));
autoswitch.insert (pair<CString,char>('H','Р'));
autoswitch.insert (pair<CString,char>('h','р'));
autoswitch.insert (pair<CString,char>('J','О'));
autoswitch.insert (pair<CString,char>('j','о'));
autoswitch.insert (pair<CString,char>('K','Л'));
autoswitch.insert (pair<CString,char>('k','л'));
autoswitch.insert (pair<CString,char>('L','Д'));
autoswitch.insert (pair<CString,char>('l','д'));
autoswitch.insert (pair<CString,char>(':','Ж'));
autoswitch.insert (pair<CString,char>(';','ж'));
autoswitch.insert (pair<CString,char>('"','Э'));
autoswitch.insert (pair<CString,char>('Z','Я'));
autoswitch.insert (pair<CString,char>('z','я'));
autoswitch.insert (pair<CString,char>('X','Ч'));
autoswitch.insert (pair<CString,char>('x','ч'));
autoswitch.insert (pair<CString,char>('C','С'));
autoswitch.insert (pair<CString,char>('c','с'));
autoswitch.insert (pair<CString,char>('V','М'));
autoswitch.insert (pair<CString,char>('v','м'));
autoswitch.insert (pair<CString,char>('B','И'));
autoswitch.insert (pair<CString,char>('b','и'));
autoswitch.insert (pair<CString,char>('N','Т'));
autoswitch.insert (pair<CString,char>('n','т'));
autoswitch.insert (pair<CString,char>('M','ь'));
autoswitch.insert (pair<CString,char>('m','ь'));
autoswitch.insert (pair<CString,char>('<','Б'));
autoswitch.insert (pair<CString,char>(',','б'));
autoswitch.insert (pair<CString,char>('>','Ю'));
autoswitch.insert (pair<CString,char>('.','ю'));
for(i=0;i<fromClipboard.GetLength();i++)
    for(auto it=autoswitch.begin(); it!=autoswitch.end();it++)
        if(fromClipboard[i]==it->first)
        {source[i]=it->second;break;}
        else source[i]=fromClipboard[i];
        //CString source; 
//запись текста в буфер обмена
        CString sourcelast;
        sourcelast=source;
    DWORD CodePage=0x419;
if(OpenClipboard(NULL))//открываем буфер обмена
{
   HGLOBAL hgBuffer;
   char* chBuffer;
   EmptyClipboard(); //очищаем буфер
   hgBuffer= GlobalAlloc(GMEM_DDESHARE, sourcelast.GetLength()+1);//выделяем память
   chBuffer= (char*)GlobalLock(hgBuffer); //блокируем память
   strcpy(chBuffer, LPCSTR(sourcelast));
   HGLOBAL Data=GlobalAlloc(GMEM_MOVEABLE+GMEM_DDESHARE,4);
   char* DataPtr=(char*)GlobalLock(Data);
   memcpy(DataPtr,(const VOID*)&CodePage,4);
   GlobalUnlock(Data);//разблокируем память
   SetClipboardData(CF_LOCALE,Data);//помещаем текст в буфер обмена
   GlobalUnlock(hgBuffer);
   SetClipboardData(CF_TEXT, hgBuffer);
   CloseClipboard(); //закрываем буфер обмена
}
andrey_abc вне форума Ответить с цитированием
Старый 04.06.2015, 18:35   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Ну наверное придется ставить клавиатурный хук на WH_KEYBOARD.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 04.06.2015, 18:42   #3
andrey_abc
 
Регистрация: 04.06.2015
Сообщений: 4
По умолчанию

Можно пример Допустим если я хочу по нажатию клавиши home выполнить какое-то действие?
andrey_abc вне форума Ответить с цитированием
Старый 04.06.2015, 21:05   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

У меня примера точно нет, я Делфиец. Но пример есть тут: https://msdn.microsoft.com/en-us/lib...=vs.85%29.aspx
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 04.06.2015, 21:22   #5
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,493
По умолчанию

Еще можно вот так:
https://msdn.microsoft.com/en-us/lib...(v=vs.85).aspx
waleri вне форума Ответить с цитированием
Старый 04.06.2015, 21:25   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Цитата:
Еще можно вот так:
Да, если одну клавишу или пару то это получается проще. Иначе хук.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 04.06.2015, 22:47   #7
andrey_abc
 
Регистрация: 04.06.2015
Сообщений: 4
По умолчанию

waleri и Stilet спасибо
andrey_abc вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
прочитать файл replace.dat из Punto Switcher Ципихович Эндрю Свободное общение 10 12.03.2012 05:51
Свой Punto Switcher Ципихович Эндрю Фриланс 38 08.02.2012 06:00
Аналог wp-плагина theme switcher только для Drupal Alexei91 WordPress и другие CMS 0 29.04.2011 13:06
Макрос для word типа punto switcher user100 Microsoft Office Word 1 20.04.2011 17:26
Как нарисовать картинку сбоку в меню как в Punto Switcher Crazyman Win Api 4 26.09.2008 18:13