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

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

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

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

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

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

Комментарии

Только авторизованные пользователи могут публиковать комментарии.
Пожалуйста, авторизуйтесь или зарегистрируйтесь
НБ
15 февраля 2019 г. 13:09
Николай Булахтин

C++ - Тест 003. Условия и циклы

  • Результат:50баллов,
  • Очки рейтинга-4
НБ
15 февраля 2019 г. 13:03
Николай Булахтин

C++ - Тест 002. Константы

  • Результат:25баллов,
  • Очки рейтинга-10
НБ
15 февраля 2019 г. 13:01
Николай Булахтин

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

  • Результат:73баллов,
  • Очки рейтинга1
Последние комментарии
V
14 февраля 2019 г. 18:41
Vlad15007

Спасибо огромное! Заработало!
А
12 февраля 2019 г. 9:26
Александр90

Сам разборался, спасибо.
А
12 февраля 2019 г. 8:19
Александр90

День добрый! Можешь выложить форму mainwindow.ui от урока? Заранее спасибо
11 февраля 2019 г. 10:51
Евгений Легоцкой

Нет, у меня проблема с жёстким диском случилась, занимался восстановлением ПК, ещё пару вечеров придётся этим заниматься, увы.
Сейчас обсуждают на форуме
15 февраля 2019 г. 21:22
IscanderChe

Доброй ночи.Скромно напоминаю о своём вопросе...
15 февраля 2019 г. 15:36
Евгений Легоцкой

Ну я тут нашёл одно решение, но сам его не проверял. Вам нужно помещать фамилии скорее всего в ячейки заголовка, и потом просто перерисовывать их QHeaderView * header = m_ui->tableWidget...
15 февраля 2019 г. 7:53
Евгений Легоцкой

Добрый день! Не работал с remoteobjects, поэтому глянул документацию, чтобы рассмотреть, что это за зверь. После просмотра документации сложилось стойкой впечатление, что это вполне возм...
m
14 февраля 2019 г. 18:28
mr_roman

Нашел решение на Java. Удалось интегрировать в проект сервиса на Qt, теперь из Qt запускаю Java-код акселерометра.
14 февраля 2019 г. 11:00
Евгений Легоцкой

ok. I see. You changed related name Try this {% if goal.joined.all|user_in:request.user %}
Присоединяйтесь к нам в социальных сетях

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