Политика конфиденциальностиКонтактыО сайтеОтзывыGitHubDonate
© EVILEG 2015-2018
Рекомендует хостинг
TIMEWEB
25 ноября 2018 г. 0:54

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

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

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

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

4

Добрый день.

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

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

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

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

Для Django рекомендую VDS-хостинг TIMEWEB

0

Нужно делать по 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.

Для Django рекомендую VDS-хостинг TIMEWEB

0

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

1

Ответы

Только авторизованные пользователи могут отвечать на форуме.
Пожалуйста, авторизуйтесь или зарегистрируйтесь
9 декабря 2018 г. 22:00
Yura Gajdar

C++ - Тест 004. Указатели, Массивы и Циклы

  • Результат:70баллов,
  • Очки рейтинга1
9 декабря 2018 г. 2:33
anat_home@ukr.net

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

  • Результат:100баллов,
  • Очки рейтинга10
9 декабря 2018 г. 2:29
anat_home@ukr.net

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

  • Результат:60баллов,
  • Очки рейтинга-1
Последние комментарии
9 декабря 2018 г. 8:14
Евгений Легоцкой

Вы можете в QSettings записать откуда угодно bool переменную без всяких чекбоксов. def save_check_box_settings(self): settings = QSettings() settings.setValue(SETTINGS_TRAY,...
8 декабря 2018 г. 13:02
Жасулан Нургожинов

а как можно это сделать без чек бокса
5 декабря 2018 г. 13:25
Евгений Легоцкой

Значит всё-таки в переменных окружения была проблема. Полагаю, что Qt Creator берёт информацию сначала из переменных PATH, либо записывает её из  своего конфига, а потом берёт уже из PATH при ...
5 декабря 2018 г. 13:21
IscanderChe

В переменной PATH путь к CMake был указан как G:\soft\CMake\bin, в реальности же каталог называется Cmake. Причём после изменения в переменной PATH всё заработало, а в Qt Creator путь ос...
5 декабря 2018 г. 10:53
Евгений Легоцкой

Под linux как правило проще, там всё по свои каталогам и полочкам разложено сразу. Думается мне, что проблема все-таки где-то в путях переменных...
Сейчас обсуждают на форуме
9 декабря 2018 г. 18:55
Игорь Максимов

Доброго времени суток. Нашел приложение для конвертации видео + celery что очень радует. Не радует только то что оно отказывается работать под python3 Трейсбек прикладываю: File "/ho...
9 декабря 2018 г. 15:14
Евгений Легоцкой

Непонятно, вы драйвер скачали или собирали? Сдаётся мне, что возможно более правильный вариант собрать своим компилятором вначале его, а потом уже подключать.
8 декабря 2018 г. 18:30
Жасулан Нургожинов

может так будет понятнее# -*- coding: utf-8 -*-# Form implementation generated from reading ui file 'C:\Users\hallgato\PycharmProjects\workers.ui'## Created by: PyQt5 UI code generator 5.11...
8 декабря 2018 г. 10:51
Даниил Тетерин

Но если серьезно, то действительно помощь нужна. Мне по-хорошему нужно сдать это в понедельник
Присоединяйтесь к нам в социальных сетях

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