0 / 0 / 0
Регистрация: 01.12.2013
Сообщений: 10
1

Аналог punto switcher

04.06.2015, 22:34. Показов 1787. Ответов 1
Метки нет (Все метки)

У меня есть горячая клавиша Alt+b по ее нажатия программа выполняется,а как имитировать нажатие ctrl+c и ctrl+v или как получить выделенный текст с другого окна(блокнота допустим). Допустим я открыл блокнот выделил текст "ghbdtn" нажал alt+b и он стал "привет"
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
151
#include <iostream>
#include <fstream>
#include <conio.h>
#include <windows.h>
#include <string.h>
#include <atlstr.h>
#include<locale.h>
#include<map>
#include<malloc.h>
#define NUMHOOKS 7
using namespace std;
 
void main()
{
        
    if (RegisterHotKey(
        NULL,
        1,
        MOD_ALT | MOD_NOREPEAT,
        0x42))  //0x42 is 'b'
    {
        printf("Hotkey 'ALT+b' registered, using MOD_NOREPEAT flag\n");
    }
 
    MSG msg = {0};
    while (GetMessage(&msg, NULL, 0, 0) != 0)
    {
        if (msg.message == WM_HOTKEY)
        {
            printf("WM_HOTKEY received\n");            
setlocale(LC_ALL,"Russian");
SetConsoleOutputCP(1251);
    
int i;
 
//вызов ctrl+c
 
//чтение текста из буфера обмена
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>('','э'));
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(); //закрываем буфер обмена
}
//вызов ctrl+v
        }
    } 
 
}
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.06.2015, 22:34
Ответы с готовыми решениями:

удалением punto switcher
Перестала работать программа Punto Switcher. При попытке её удалить и установить заново появляется...

Punto Switcher не сохраняет настройки
Столкнулась с проблемой. Два дня назад установила новую версию 3.2.8 программы. Мне стали приходить...

Punto Switcher - продуктивность и удобство
Вступление : Как то давно (лет 5 тому) бороздя просторы интернета и постоянно после написаного...

Необычное использование Punto Switcher
Приходилось ли вам вводить в какую-нибудь программу ограниченное множество значений? Или составлять...

1
шКодер самоучка
2155 / 1864 / 910
Регистрация: 09.10.2013
Сообщений: 4,088
Записей в блоге: 7
04.06.2015, 22:45 2
что-то подобное делал, только на на Delphi
использовался глобальный хук на клавиатуру, но по идее можно через RegisterHotKey
код прикрепил, но там тихий ужас)
Вложения
Тип файла: 7z cbc-2.3.2.7z (10.8 Кб, 16 просмотров)
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.06.2015, 22:45
Помогаю со студенческими работами здесь

Не работае punto switcher вместе со скайпом
Вчера обновил скайп, и тут же перестал работать пунто. Я перезапускал и скайп и пунто, перегружал...

Демонстрация программы, схожей с Punto Switcher
накидал как я его вижу можно платно

Запустить два процесса Punto Switcher
Punto при первом запуске стартует, а при последующих открывает настройки уже запущенной Punto. ...

Хочу написать Punto Switcher в части замен
Здравствуйте, всё же ВБА и ВБ6 родственники, но кое чего в ВБ6 не шарю хочу написать Punto...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru