f
24 ноября 2018 г. 19:54

Запуск программы по нажатию клавиши

Здравствуйте!

Прошу у вас помощи. Дело в том, что хотелось бы запускать приложение не только через автозапуск, но и по нажатию какой-то клавиши или их комбинации. Здесь смог найти код для добавления в автозапуск через QSettings.

Хотелось бы узнать, возможно ли подобным образом назначить hot key для программы?

Рекомендуем хостинг TIMEWEB
Рекомендуем хостинг TIMEWEB
Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.
4

Добрый день.

Маловероятно. Нужно смотреть API целевой операционной системы. Если система позволяет что-то такое, то через настройки системы это можно будет сделать. Но QSettings к этому имеет довольно посредственное отношение.

В случае с Windows, нужно будет изучать, как работает регистр. В случае с Linux здесь наверняка средствами QSettings ничего сделать не получится.

Единственное, что можно сделать, это вызывать уже запущенное приложение, если оно будет слушать глобанльные хоткеи.

У меня есть библиотека для этого.

0
f

Нужно делать по Windows. Суть в том, что по курсачу мне нужно написать эмулятор мыши, то есть при нажатии клавиш двигать курсор вне зависимости от наличия фокуса у окна программы. Эту часть я написал, но меня это направление зацепило и поэтому захотел сделать так, чтобы можно было приложение добавить в автозапуск, а также запуск приложения вне зависимости от того, добавлено ли оно в автозапуск.

В автозапуск благодаря одной из ваших статей добавил, а с автозапуском были проблемы. Решил их с помощью создания ярлыка программы в папке C:/Users/<username>/AppData/Roaming/Microsoft/Windows/Start Menu/Programs/.

WORD wHotKey = MAKEWORD(0x77, 0);
    CoInitialize(NULL);
    IShellLink * pSL;
    IPersistFile * pPF;
       HRESULT hRes;
       // Получение экземпляра компонента "Ярлык"
       hRes = CoCreateInstance(CLSID_ShellLink,
                               0,
                               CLSCTX_INPROC_SERVER,
                               IID_IShellLink,
                               (LPVOID *)&pSL);
       if( SUCCEEDED(hRes) ) {
          hRes = pSL->SetPath(QDir::toNativeSeparators(QApplication::applicationFilePath()).toStdWString().c_str());
          if( SUCCEEDED(hRes) ) {
              qDebug() << "SetPath";
                   hRes = pSL->SetArguments(L"");
          if( SUCCEEDED(hRes) ) {
            qDebug() << "SetArguments";
                //hRes = pSL->SetWorkingDirectory(QDir::toNativeSeparators(QApplication::applicationDirPath()).toStdWString().c_str());
                //if( SUCCEEDED(hRes) ) {
                     qDebug() << "SetWorkingDirectory";
                   hRes = pSL->SetIconLocation(QDir::toNativeSeparators(QApplication::applicationFilePath()).toStdWString().c_str(), 0);
                   if( SUCCEEDED(hRes) ) {
                       qDebug() << "SetIconLocation";
                      hRes = pSL->SetHotkey(wHotKey);
                      if( SUCCEEDED(hRes) ) {
                          qDebug() << "SetHotkey";
                         hRes = pSL->SetShowCmd(SW_SHOWNORMAL);
                         if( SUCCEEDED(hRes) ) {
                             qDebug() << "SetShowCmd";
                            // Получение компонента хранилища параметров
                            hRes = pSL->QueryInterface(IID_IPersistFile,(LPVOID *)&pPF);
                            if( SUCCEEDED(hRes) ) {
                                qDebug() << "QueryInterface";
                               // Сохранение созданного ярлыка
                                QProcessEnvironment env(QProcessEnvironment::systemEnvironment());

                               hRes = pPF->Save(QDir::toNativeSeparators(/*env.value("USERPROFILE") + */"C:/Users/Евгений/AppData/Roaming/Microsoft/Windows/Start Menu/Programs/Mouse Emulator Pro.lnk").toStdWString().c_str(),TRUE);
                               qDebug() << hRes;
                               if( SUCCEEDED(hRes) )
                                   qDebug() << "save";
                               pPF->Release();
                            }

                      }
                   }
                }
             }
          }
          pSL->Release();
       }
CoUninitialize();


Код не отформатировал, нет времени просто. При создании ярлыка ему устанавливается "горячая клавиша". Используется WinApi. Чтобы такой способ работал, нужно ярлык создать или на рабочем столе, или по указанному ранее пути, или

C:\ProgramData\Microsoft\Windows\Start Menu\Programs 
1

Очень интересно, я не знал о наличии хоткея при создании ярлыка в Windows.

0
f

Я про поле "Быстрый вызов"

1

Комментарии

Только авторизованные пользователи могут публиковать комментарии.
Пожалуйста, авторизуйтесь или зарегистрируйтесь
22 июля 2019 г. 7:26
Pavel K.

Qt - Тест 001. Сигналы и слоты

  • Результат:68баллов,
  • Очки рейтинга-1
o
22 июля 2019 г. 6:26
oksik193

C++ - Тест 001. Первая программа и типы данных

  • Результат:80баллов,
  • Очки рейтинга4
ВД
21 июля 2019 г. 23:33
Влад Долгов

C++ - Тест 001. Первая программа и типы данных

  • Результат:40баллов,
  • Очки рейтинга-8
Последние комментарии
21 июля 2019 г. 6:03
Евгений Легоцкой

да, наверное, 32-х разрядную поддержку уже давно поа было выкинуть. К слову, у вас много проектов под Android? Часто много где вижу вопросы о том, пишет ли кто-то вообще на Qt под мобильные сист…
20 июля 2019 г. 14:41
Андрей Янкович

Очень полезная информация, увы уже выкинул поддержку 32 битных бедняг.
20 июля 2019 г. 9:31
Михаиллл

Вот так qDebug()<<"position:"<<event->scenePos();
20 июля 2019 г. 8:49
Михаиллл

Добрый день. Как можно узнать координату на графической сцене при отпускании клавиши мыши?
Сейчас обсуждают на форуме
22 июля 2019 г. 8:41
BlinCT

Вот только что нашел в инете, у человека такая же ошибка. Вроде бы таже самая проблема https://stackoverflow.com/questions/37633709/how-to-create-qtquick-window-outside-the-main-thread…
22 июля 2019 г. 3:58
Евгений Легоцкой

Добрый день! Нужен совет сообщества по разработке функционала проверки орфографии. Одна из идей - добавить проверку орфографии при наборе текста статей. Полагаю, что наиболее аде…
22 июля 2019 г. 3:01
Евгений Легоцкой

Возможно, если при сохранении файла установить права доступа на файл. Что-то такое должно быть у QFile
22 июля 2019 г. 3:01
Евгений Легоцкой

Я отрисовываю квадрат в его локальной системе координат от верхнего левого угла (-30,-30) до его правого нижнего угла (30,30). Поэтому мне нужно указать размеры объекта через boundingRect()…
20 июля 2019 г. 11:04
Михаиллл

Так и с ресурсами работает QImage image(":/Images/Images/1.png");
Ищу работу?
5,000.00 руб. - 15,000.00 руб.
Дизайнер
Moskovskiy, Moscow, Russia
25,000.00 руб. - 30,000.00 руб.
Разработчик Qt/C++
Barnaul, Altai Krai, Russia

Для зарегистрированных пользователей на сайте присутствует минимальное количество рекламы

EVILEG
О нас
Услуги
Присоединяйтесь к нам
© EVILEG 2015-2019
Рекомендует хостинг TIMEWEB