crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )


  Ответ в RegisterHotKey
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
jim1406 Дата 3.5.2009, 14:31
 
Цитата(jim1406 @ 30.4.2009, 15:04) *
Правда теперь Runtime Error на этапе
globalShortcut = new QxtGlobalShortcut(this);
:(

Ларчик просто открывался. Вместо QApplication использовать QxtApplication.
DmP Дата 30.4.2009, 11:32
 
Цитата(jim1406 @ 30.4.2009, 12:04) *
а насчет сборки qxt не просвятишь?

ни когда не собирал. :unknw:
jim1406 Дата 30.4.2009, 11:04
 
Цитата(DmP @ 30.4.2009, 14:45) *
Вот сделано на основе libqxt, может не очень красиво но работает:
#include <qt_windows.h>

а я windows.h подключал, похоже поэтому и WM_HOTKEY, и MSG оставались "не знакомыми"...
спасибо!
насчет сборки qxt... похоже победил, установив все (qt sdk, qxt) с нуля. Правда теперь Runtime Error на этапе
globalShortcut = new QxtGlobalShortcut(this);
:(

DialogConsole::DialogConsole(QWidget *parent)
    : QDialog(parent), ui(new Ui::DialogConsole)
{
    ui->setupUi(this);
    globalShortcut = new QxtGlobalShortcut(this);
    globalShortcut->setShortcut(QKeySequence("Ctrl+Alt+A"));
    connect(globalShortcut, SIGNAL(activated()), this, SLOT(specialShow()));
}
DmP Дата 30.4.2009, 10:45
  Вот сделано на основе libqxt, может не очень красиво но работает:
#include <qt_windows.h>

MyForm::MyForm()
    : QMainWindow()
{
    setupUi(this);

    m_hotKeyId1 = 0;
    m_hotKeyId2 = 0;

    registerHotKey();
}

MyForm::~MyForm()
{
    unregisterHotKey();
}

bool MyForm::winEvent(MSG* message, long* result)
{
    if (message->message == WM_HOTKEY)
    {
        const int virtualKeyCode = HIWORD(message->lParam);
        const int modifiers = LOWORD(message->lParam);
        const int CtrlMod = MOD_CONTROL;
        const int CtrlShiftMod = MOD_CONTROL | MOD_SHIFT;

        if ((virtualKeyCode == VK_F2) && (modifiers == CtrlMod))
        {
            if (!m_actXXXMode->isChecked())
            {
                m_actXXXMode->activate(QAction::Trigger);
            }
        }
        if ((virtualKeyCode == VK_F2) && (modifiers == CtrlShiftMod))
        {
            if (m_actXXXMode->isChecked())
            {
                m_actXXXMode->activate(QAction::Trigger);
            }
        }
    }
    return false;
}

inline void RegisterHotKeyPrivate(HWND winId, UINT modifiers, UINT vk, int& hotKeyId)
{
    int id = (modifiers << 8) | vk;
    BOOL res = ::RegisterHotKey(winId, id, modifiers, vk);

    if (res != FALSE)
        hotKeyId = id;
}

void MyForm::registerHotKey()
{
    if (m_hotKeyId1 || m_hotKeyId2)
        unregisterHotKey();

    UINT modifiers = MOD_CONTROL; // MOD_ALT, MOD_CONTROL, MOD_SHIFT, MOD_WIN
    UINT vk = VK_F2;
    RegisterHotKeyPrivate((HWND)winId(), modifiers, vk, m_hotKeyId1);

    modifiers = MOD_CONTROL | MOD_SHIFT;
    RegisterHotKeyPrivate((HWND)winId(), modifiers, vk, m_hotKeyId2);
}

void MyForm::unregisterHotKey()
{
    if ((m_hotKeyId1 == 0) && (m_hotKeyId2 == 0))
        return;

    ::UnregisterHotKey((HWND)winId(), m_hotKeyId1);
    m_hotKeyId1 = 0;
    ::UnregisterHotKey((HWND)winId(), m_hotKeyId2);
    m_hotKeyId2 = 0;
}
jim1406 Дата 30.4.2009, 9:34
 
Цитата
а чему ты сделал make install ?
обычно make -- собирает
make install -- копирует, переносит то что ты уже собрал. или в этом случае по другому?

сначала make, потом make install... а инсталл вот откуда взялся

Цитата
смотри MSDN -- больше выхода нет. только конечно я не уверен что этот метод все сообщения получает однако где то я читал что можно даже перхватить сигнал выключения компьютера и прервать сие действие.
кстати а не пробовал просто метод event(QEvent*) не получает ли совершенно случайно то событие которое тебя интересует?

и смотрел и пробовал... event пробовал - событие не ловилось, у меня по крайней мере не получилось. Можно, в принципе, код указанной библиотеки глянуть, как советовали, но...
...Вообще, с библиотекой даже лучше, вот только б руки мне кто выпрямил ))) .

Цитата(Litkevich Yuriy @ 29.4.2009, 16:11) *
jim1406, может просто подсмотреть как это делается в том же libqxt?

Посмотрел, спасибо - красиво делают :) А правильно собрать библиотеку не поможешь? :)
kwisp Дата 30.4.2009, 8:48
 
Цитата(jim1406 @ 30.4.2009, 9:33) *
Скачал версию 5, Qt у меня 4.5 (Qt Creator 1.0.0), ОС Windows. Распаковал в C:\libqxt . Дальше сделал qmake libqxt.pro. Запустил configure.bat. Запустил make install.

а чему ты сделал make install ?
обычно make -- собирает
make install -- копирует, переносит то что ты уже собрал. или в этом случае по другому?


Цитата(jim1406 @ 30.4.2009, 5:45) *
Да, только не понял тип MSG...

смотри MSDN -- больше выхода нет. только конечно я не уверен что этот метод все сообщения получает однако где то я читал что можно даже перхватить сигнал выключения компьютера и прервать сие действие.

кстати а не пробовал просто метод event(QEvent*) не получает ли совершенно случайно то событие которое тебя интересует?
jim1406 Дата 30.4.2009, 8:33
 
Цитата(sploid @ 29.4.2009, 15:06) *

Попытался использовать эту библиотеку...
Скачал версию 5, Qt у меня 4.5 (Qt Creator 1.0.0), ОС Windows. Распаковал в C:\libqxt . Дальше сделал qmake libqxt.pro. Запустил configure.bat. Запустил make install. Скопировал C:\libqxt\deploy\qt\qxt.prf в C:\Qt\2009.01\qt\mkspecs\features (This will also install qxt.prf to your qtdir/mkspecs/features directory - вручную). В проекте дорисовал
CONFIG  += qxt
QXT     += core gui

Итог при компиляции... collect 2: ld returned 1 exit status
Если qxt не использовать (только инклюд прописать), то лечится QXT += core gui т.е.
CONFIG  += qxt
# QXT     += core gui

Я так понимаю, что не правильно собрал... Где накосячил-то?!
jim1406 Дата 30.4.2009, 4:45
 
Цитата(kwisp @ 29.4.2009, 14:30) *
jim1406,
что пробовал делать для того чтобы перхватывать?
QWidget::winEvent(MSG*,long*)[virtual protected] -- смотрел?

Да, только не понял тип MSG...
Litkevich Yuriy Дата 29.4.2009, 12:11
  jim1406, может просто подсмотреть как это делается в том же libqxt?
sploid Дата 29.4.2009, 11:06
  посмотри это:
http://doc.libqxt.org/0.4.0/classQxtGlobalShortcut.html
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 28.3.2024, 14:14