Почему все комбинации клавиш работают, а эта нет?? C++, WinApi UP
RegisterHotKey возвращает 1, потому проблема не в этом!
Написал прогу чтобы делать "макросы". (Типо буфер обмена в который можно засунуть хоть 20 текстов). Всё эта реализовано так: Создаёшь макрос, задаешь ему комбинацию клавиш, и потом можешь по нажатию комбинации засунуть в буфер обмена что тебе нужно.
Проблема: В функции main есть регистрация комбинаций клавиш. Но когда я в цикле проверяю значения wparam комбинация с идентификатором HOT_CREATE никак не хочет там появляться, но при этом другие клавиши работают. Код ниже, помогите пожалуйста! (Писал всё на быструю руку)
#pragma once
#include <conio.h>
#include <stdio.h>
#include <cstdlib>
#include <fstream>
#include "Windows.h"
#include "winuser.h"
#include <cmath>
#include <iostream>
#include <iomanip>
#include <complex>
#include <string>
#include <vector>
using namespace ::std;
#define infinity true
void setcurCONSOLE(int x, int y)
{
COORD position = {x, y};
HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleCursorPosition(hConsole, position);
}
void toClipboard(HWND hwnd, const std::string& s) {
OpenClipboard(hwnd);
EmptyClipboard();
HGLOBAL hg = GlobalAlloc(GMEM_MOVEABLE, s.size() + 1);
if (!hg) {
CloseClipboard();
return;
}
memcpy(GlobalLock(hg), s.c_str(), s.size() + 1);
GlobalUnlock(hg);
SetClipboardData(CF_TEXT, hg);
CloseClipboard();
GlobalFree(hg);
}
void hidewin()
{
ShowWindow(GetConsoleWindow(), SW_HIDE);
}
void showwin()
{
ShowWindow(GetConsoleWindow(), SW_SHOWNORMAL);
}
struct bmacro_elemdat
{
string name;
string txt;
string key;
size_t id;
};
#define in_bmac ifstream infile ("bmacro.bin");
#define out_bmac ofstream outfile ("bmacro.bin", ios::app);
#define bin_clear ofstream _______CLEAR ("bmacro.bin");
class bmacro_dat
{
public:
vector<bmacro_elemdat>data;
size_t nextid = 0;
void update();
void pushrecord(bmacro_elemdat bmacroelem);
size_t num_records();
void delete_record(size_t id);
void writedata();
};
void bmacro_dat::writedata()
{
bin_clear;
for (size_t x = 0; x < data.size(); x++)
{
pushrecord(data[x]);
}
}
void bmacro_dat::delete_record(size_t real_index)
{
data.erase(data.begin() + real_index);
writedata();
}
size_t bmacro_dat::num_records()
{
bmacro_elemdat elem;
in_bmac;
size_t SIZE = 0;
while (infinity)
{
getline(infile, elem.name, (char)1);
getline(infile, elem.txt, (char)1);
getline(infile, elem.key, (char)1);
if (elem.key.size() == 0)
{
break;
}
SIZE++;
}
return SIZE;
}
void bmacro_dat::update()
{
nextid = 0;
for (size_t x = 0; x < data.size(); x++)
{
UnregisterHotKey(NULL, data[x].id);
}
data.clear();
in_bmac
while (infinity)
{
bmacro_elemdat tmpdat;
getline(infile, tmpdat.name, (char)1);
getline(infile, tmpdat.txt, (char)1);
getline(infile, tmpdat.key, (char)1);
if (tmpdat.name.size() == 0)
{
break;
}
tmpdat.id = nextid;
RegisterHotKey(NULL, tmpdat.id, MOD_CONTROL, tmpdat.key[0]);
nextid++;
data.push_back(tmpdat);
}
infile.close();
return;
}
void bmacro_dat::pushrecord(bmacro_elemdat bmacroelem)
{
out_bmac;
outfile << bmacroelem.name << (char)1;
outfile << bmacroelem.txt << (char)1;
outfile << bmacroelem.key << (char)1;
}
#define toindex(__arg)__arg - 1
string bfill(string str, size_t range, char sym = ' ')
{
string tmp;
if (str.size() > range)
{
for (size_t x = 0; x < range; x++)
{
tmp.push_back(str[x]);
}
if (tmp[toindex(range)] != ' ')
{
tmp[toindex(range)] = '.';
tmp[toindex(range) - 1] = '.';
tmp[toindex(range) - 2] = '.';
}
return tmp;
}
else
{
for (size_t x = 0; x < str.size(); x++)
{
tmp.push_back(str[x]);
}
for (size_t x = 0; x < range - str.size(); x++)
{
tmp.push_back(sym);
}
return tmp;
}
}
#define showtable cout << '\t' << bfill("Счёт", 6) << bfill("Имя макроса", 32) << bfill("Клавиша", 9) << bfill("Текст", 48) << endl;for (size_t x = 1; x <= db.data.size(); x++){ string creat; creat += "Ctrl + "; creat += db.data[x].key; cout << '\t' << bfill(to_string(x), 6) << bfill(db.data[x].name, 32) << bfill(creat, 9) << bfill(db.data[x].txt, 48) << endl;}
int main()
{
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
auto hWnd = GetConsoleWindow();
bmacro_dat db;
hidewin();
#define HOT_DOCS 8975496
#define HOT_CREATE 94204
#define HOT_EXIT 6445643
#define HOT_DEL 564564
RegisterHotKey(0, HOT_DOCS, MOD_CONTROL | MOD_SHIFT, VK_F5);
RegisterHotKey(0, HOT_CREATE, MOD_CONTROL | MOD_SHIFT, VK_F6);
RegisterHotKey(0, HOT_DEL, MOD_CONTROL | MOD_SHIFT, VK_F7);
RegisterHotKey(0, HOT_EXIT, MOD_CONTROL | MOD_SHIFT, VK_F8);
MSG msg;
while (infinity)
{
GetMessage(&msg, NULL, NULL, NULL);
db.update();
if (msg.message == WM_HOTKEY)
{
if (msg.wParam == HOT_DOCS) // Docs
{
showwin();
cout << "!!!+++++| Bmacro |+++++!!!" << endl;
cout << " CTRL + SHIFT + F8 - Выход" << endl;
cout << " CTRL + SHIFT + F5 - Документация" << endl;
cout << " CTRL + SHIFT + F6 - Создать макрос" << endl;
cout << " CTRL + SHIFT + F7 - Удалить макрос" << endl;
cout << "$$$-----| Macros |-----$$$" << endl;
showtable;
Sleep(1500);
system("PAUSE");
system("cls");
hidewin();
}
if (msg.wParam == HOT_CREATE) // Create
{
showwin();
bmacro_elemdat elem;
cout << "!!!+++++| Bmacro |+++++!!!" << endl;
cout << " Введите имя макроса" << endl;
getline(cin, elem.name);
system("cls");
cout << "!!!+++++| Bmacro |+++++!!!" << endl;
cout << " Введите текст макроса, и завершите его клавишей TAB" << endl;
stringstream creatortxt;
while (GetAsyncKeyState(VK_TAB) != -32767)
{
string tmp;
getline(cin, tmp);
creatortxt << tmp;
}
elem.txt = creatortxt.str();
system("cls");
cout << "!!!+++++| Bmacro |+++++!!!" << endl;
cout << " Нажмите клавишу которой активируется макрос" << endl;
bool notexitwhile = true;
while (notexitwhile)
{
for (int x = 8; x <= 190; x++)
{
if (GetAsyncKeyState(x) == -32767)
{
elem.key = (char)x;
notexitwhile = false;
break;
}
}
}
db.pushrecord(elem);
hidewin();
system("cls");
//msg = Emptymsg;
}
if (msg.wParam == HOT_EXIT)
{
break;
}
if (msg.wParam == HOT_DEL)
{
showwin();
cout << "!!!+++++| Bmacro |+++++!!!" << endl;
cout << " Напечатайте имя макроса который хотите удалить: " << endl;
showtable;
string id;
getline(cin, id);
for (size_t x = 0; x < db.data.size(); x++)
{
if (db.data[x].name == id)
{
db.delete_record(db.data[x].id);
}
}
system("cls");
hidewin();
//msg = Emptymsg;
}
for (size_t x = 0; x < db.data.size(); x++)
{
if (msg.wParam == db.data[x].id)
{
toClipboard(hWnd, db.data[x].txt);
//msg = Emptymsg;
break;
}
}
}
Sleep(50);
}
return EXIT_SUCCESS;
}