From bd3de48558fdda96a209ef1ac2097b21a32e3429 Mon Sep 17 00:00:00 2001 From: Jonathan White Date: Mon, 7 Mar 2022 22:49:02 -0500 Subject: [PATCH 1/2] Remove unused/duplicate icons --- COPYING | 2 -- share/icons/application/scalable/actions/key-enter.svg | 1 - share/icons/application/scalable/actions/password-generate.svg | 1 - share/icons/icons.qrc | 2 -- src/gui/entry/EditEntryWidget.cpp | 2 +- 5 files changed, 1 insertion(+), 7 deletions(-) delete mode 100644 share/icons/application/scalable/actions/key-enter.svg delete mode 100644 share/icons/application/scalable/actions/password-generate.svg diff --git a/COPYING b/COPYING index 17dfe47553..35cfc1b1ee 100644 --- a/COPYING +++ b/COPYING @@ -175,14 +175,12 @@ Files: share/icons/application/scalable/actions/chevron-double-down.svg share/icons/application/scalable/actions/hammer-wrench.svg share/icons/application/scalable/actions/health.svg share/icons/application/scalable/actions/help-about.svg - share/icons/application/scalable/actions/key-enter.svg share/icons/application/scalable/actions/lock-question.svg share/icons/application/scalable/actions/message-close.svg share/icons/application/scalable/actions/move-down.svg share/icons/application/scalable/actions/move-up.svg share/icons/application/scalable/actions/paperclip.svg share/icons/application/scalable/actions/password-copy.svg - share/icons/application/scalable/actions/password-generate.svg share/icons/application/scalable/actions/password-generator.svg share/icons/application/scalable/actions/password-show-off.svg share/icons/application/scalable/actions/password-show-on.svg diff --git a/share/icons/application/scalable/actions/key-enter.svg b/share/icons/application/scalable/actions/key-enter.svg deleted file mode 100644 index 05126f2a36..0000000000 --- a/share/icons/application/scalable/actions/key-enter.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/share/icons/application/scalable/actions/password-generate.svg b/share/icons/application/scalable/actions/password-generate.svg deleted file mode 100644 index 7192714859..0000000000 --- a/share/icons/application/scalable/actions/password-generate.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/share/icons/icons.qrc b/share/icons/icons.qrc index 61cbc91033..209a1d35cc 100644 --- a/share/icons/icons.qrc +++ b/share/icons/icons.qrc @@ -50,7 +50,6 @@ application/scalable/actions/health.svg application/scalable/actions/help-about.svg application/scalable/actions/hibp.svg - application/scalable/actions/key-enter.svg application/scalable/actions/lock-question.svg application/scalable/actions/keyboard-shortcuts.svg application/scalable/actions/message-close.svg @@ -60,7 +59,6 @@ application/scalable/actions/object-unlocked.svg application/scalable/actions/paperclip.svg application/scalable/actions/password-copy.svg - application/scalable/actions/password-generate.svg application/scalable/actions/password-generator.svg application/scalable/actions/password-show-off.svg application/scalable/actions/password-show-on.svg diff --git a/src/gui/entry/EditEntryWidget.cpp b/src/gui/entry/EditEntryWidget.cpp index 32d0b82253..58ebdea6c8 100644 --- a/src/gui/entry/EditEntryWidget.cpp +++ b/src/gui/entry/EditEntryWidget.cpp @@ -220,7 +220,7 @@ void EditEntryWidget::openAutotypeHelp() void EditEntryWidget::setupAutoType() { m_autoTypeUi->setupUi(m_autoTypeWidget); - addPage(tr("Auto-Type"), icons()->icon("key-enter"), m_autoTypeWidget); + addPage(tr("Auto-Type"), icons()->icon("auto-type"), m_autoTypeWidget); m_autoTypeUi->openHelpButton->setIcon(icons()->icon("system-help")); From e6fb363f9e9cc90ded97e797a867ae1499e98239 Mon Sep 17 00:00:00 2001 From: Jonathan White Date: Mon, 7 Mar 2022 23:05:24 -0500 Subject: [PATCH 2/2] Several fixes for Auto-Type * On Windows, offer explicit methods to use the virtual keyboard style of typing. This partially reverts 1150b69836a9e999ebefa38e7fa608d4f07ee6fd by going back to the standard unicode method by default. However, uses can either add {MODE=VIRTUAL} to their sequence or choose "Use Virtual Keyboard" / CTRL+4 from the selection dialog. * Took this opportunity to clean up the signature of AutoType::performAutoType and AutoType::performAutoTypeWithSequence by removing the "hideWindow" attribute. * Show keyboard shortcuts on the selection dialog context menu * Fix selection dialog help icon color when in dark theme --- .../autotype_selection_dialog_type_menu.png | Bin 36766 -> 62892 bytes docs/topics/AutoType.adoc | 1 + share/translations/keepassxc_en.ts | 21 +-- src/autotype/AutoType.cpp | 65 +++++---- src/autotype/AutoType.h | 16 +-- src/autotype/AutoTypeAction.cpp | 11 ++ src/autotype/AutoTypeAction.h | 16 +++ src/autotype/AutoTypeSelectDialog.cpp | 36 ++++- src/autotype/AutoTypeSelectDialog.h | 3 +- src/autotype/AutoTypeSelectDialog.ui | 33 ++--- src/autotype/windows/AutoTypeWindows.cpp | 123 +++++++++--------- src/autotype/windows/AutoTypeWindows.h | 5 +- src/gui/DatabaseWidget.cpp | 4 +- tests/TestAutoType.cpp | 2 +- 14 files changed, 207 insertions(+), 129 deletions(-) diff --git a/docs/images/autotype_selection_dialog_type_menu.png b/docs/images/autotype_selection_dialog_type_menu.png index f0e83ee80fd985e4e49976a797b78ad01be02489..08fb0f9ee2dad5bc3a8ef9dd97026b1bea2b3065 100644 GIT binary patch literal 62892 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≪w}7^3NhTW{*;b((11&_ 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 GkN*VWz61>b literal 36766 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 diff --git a/docs/topics/AutoType.adoc b/docs/topics/AutoType.adoc index 6d54e34e30..8b60830d9c 100644 --- a/docs/topics/AutoType.adoc +++ b/docs/topics/AutoType.adoc @@ -60,6 +60,7 @@ image::autotype_entry_sequences.png[] |{DELAY X} |Pause typing for X milliseconds |{CLEARFIELD} |Clear the input field |{PICKCHARS} |Pick specific password characters from a dialog +|{MODE=VIRTUAL} |(Experimental) Use virtual key presses on Windows, useful for virtual machines |=== === Performing Global Auto-Type diff --git a/share/translations/keepassxc_en.ts b/share/translations/keepassxc_en.ts index 92d8de75de..155dfa2ff8 100644 --- a/share/translations/keepassxc_en.ts +++ b/share/translations/keepassxc_en.ts @@ -705,14 +705,6 @@ Double click a row to perform Auto-Type or find an entry using the search: - - <p>You can use advanced search queries to find any entry in your open databases. The following shortcuts are useful:<br/> -Ctrl+F - Toggle database search<br/> -Ctrl+1 - Type username<br/> -Ctrl+2 - Type password<br/> -Ctrl+3 - Type TOTP</p> - - Search all open databases @@ -753,6 +745,19 @@ Ctrl+3 - Type TOTP</p> Copy TOTP + + <p>You can use advanced search queries to find any entry in your open databases. The following shortcuts are useful:<br/> +Ctrl+F - Toggle database search<br/> +Ctrl+1 - Type username<br/> +Ctrl+2 - Type password<br/> +Ctrl+3 - Type TOTP<br/> +Ctrl+4 - Use Virtual Keyboard (Windows Only)</p> + + + + Use Virtual Keyboard + + BrowserAccessControlDialog diff --git a/src/autotype/AutoType.cpp b/src/autotype/AutoType.cpp index 6038960044..850863e916 100644 --- a/src/autotype/AutoType.cpp +++ b/src/autotype/AutoType.cpp @@ -254,7 +254,10 @@ void AutoType::unregisterGlobalShortcut() /** * Core Autotype function that will execute actions */ -void AutoType::executeAutoTypeActions(const Entry* entry, QWidget* hideWindow, const QString& sequence, WId window) +void AutoType::executeAutoTypeActions(const Entry* entry, + const QString& sequence, + WId window, + AutoTypeExecutor::Mode mode) { QString error; auto actions = parseSequence(sequence, entry, error); @@ -274,7 +277,8 @@ void AutoType::executeAutoTypeActions(const Entry* entry, QWidget* hideWindow, c return; } - if (hideWindow) { + // Explicitly hide the main window if no target window is specified + if (window == 0) { #if defined(Q_OS_MACOS) // Check for accessibility permission if (!macUtils()->enableAccessibility()) { @@ -289,20 +293,22 @@ void AutoType::executeAutoTypeActions(const Entry* entry, QWidget* hideWindow, c macUtils()->raiseLastActiveWindow(); m_plugin->hideOwnWindow(); #else - getMainWindow()->minimizeOrHide(); + if (getMainWindow()) { + getMainWindow()->minimizeOrHide(); + } #endif - } - - // Restore window state in case app stole focus - restoreWindowState(); - QCoreApplication::processEvents(); - m_plugin->raiseWindow(m_windowForGlobal); - - // Used only for selected entry auto-type - if (!window) { + QCoreApplication::processEvents(); window = m_plugin->activeWindow(); + } else { + // Restore window state (macOS only) then raise the target window + restoreWindowState(); + QCoreApplication::processEvents(); + m_plugin->raiseWindow(window); } + // Restore executor mode + m_executor->mode = mode; + int delay = qMax(100, config()->get(Config::AutoTypeStartDelay).toInt()); Tools::wait(delay); @@ -346,7 +352,7 @@ void AutoType::executeAutoTypeActions(const Entry* entry, QWidget* hideWindow, c * Single Autotype entry-point function * Look up the Auto-Type sequence for the given entry then perfom Auto-Type in the active window */ -void AutoType::performAutoType(const Entry* entry, QWidget* hideWindow) +void AutoType::performAutoType(const Entry* entry) { if (!m_plugin) { return; @@ -354,7 +360,7 @@ void AutoType::performAutoType(const Entry* entry, QWidget* hideWindow) auto sequences = entry->autoTypeSequences(); if (!sequences.isEmpty()) { - executeAutoTypeActions(entry, hideWindow, sequences.first()); + executeAutoTypeActions(entry, sequences.first()); } } @@ -362,13 +368,13 @@ void AutoType::performAutoType(const Entry* entry, QWidget* hideWindow) * Extra Autotype entry-point function * Perfom Auto-Type of the directly specified sequence in the active window */ -void AutoType::performAutoTypeWithSequence(const Entry* entry, const QString& sequence, QWidget* hideWindow) +void AutoType::performAutoTypeWithSequence(const Entry* entry, const QString& sequence) { if (!m_plugin) { return; } - executeAutoTypeActions(entry, hideWindow, sequence); + executeAutoTypeActions(entry, sequence); } void AutoType::startGlobalAutoType(const QString& search) @@ -467,12 +473,19 @@ void AutoType::performGlobalAutoType(const QList>& dbLi } connect(getMainWindow(), &MainWindow::databaseLocked, selectDialog, &AutoTypeSelectDialog::reject); - connect(selectDialog, &AutoTypeSelectDialog::matchActivated, this, [this](const AutoTypeMatch& match) { - m_lastMatch = match; - m_lastMatchRetypeTimer.start(config()->get(Config::GlobalAutoTypeRetypeTime).toInt() * 1000); - executeAutoTypeActions(match.first, nullptr, match.second, m_windowForGlobal); - resetAutoTypeState(); - }); + connect(selectDialog, + &AutoTypeSelectDialog::matchActivated, + this, + [this](const AutoTypeMatch& match, bool virtualMode) { + m_lastMatch = match; + m_lastMatchRetypeTimer.start(config()->get(Config::GlobalAutoTypeRetypeTime).toInt() * 1000); + executeAutoTypeActions(match.first, + match.second, + m_windowForGlobal, + virtualMode ? AutoTypeExecutor::Mode::VIRTUAL + : AutoTypeExecutor::Mode::NORMAL); + resetAutoTypeState(); + }); connect(selectDialog, &QDialog::rejected, this, [this] { restoreWindowState(); resetAutoTypeState(); @@ -488,7 +501,7 @@ void AutoType::performGlobalAutoType(const QList>& dbLi selectDialog->activateWindow(); } else if (!matchList.isEmpty()) { // Only one match and not asking, do it! - executeAutoTypeActions(matchList.first().first, nullptr, matchList.first().second, m_windowForGlobal); + executeAutoTypeActions(matchList.first().first, matchList.first().second, m_windowForGlobal); resetAutoTypeState(); } else { // We should never get here @@ -717,6 +730,12 @@ AutoType::parseSequence(const QString& entrySequence, const Entry* entry, QStrin error = tr("Invalid conversion syntax: %1").arg(fullPlaceholder); return {}; } + } else if (placeholder.startsWith("mode=")) { + auto mode = AutoTypeExecutor::Mode::NORMAL; + if (placeholder.endsWith("virtual")) { + mode = AutoTypeExecutor::Mode::VIRTUAL; + } + actions << QSharedPointer::create(mode); } else if (placeholder == "beep" || placeholder.startsWith("vkey") || placeholder.startsWith("appactivate") || placeholder.startsWith("c:")) { // Ignore these commands diff --git a/src/autotype/AutoType.h b/src/autotype/AutoType.h index 1e09adaf36..5fc07adab2 100644 --- a/src/autotype/AutoType.h +++ b/src/autotype/AutoType.h @@ -19,15 +19,15 @@ #ifndef KEEPASSX_AUTOTYPE_H #define KEEPASSX_AUTOTYPE_H +#include "AutoTypeAction.h" + #include -#include #include #include +#include "AutoTypeAction.h" #include "AutoTypeMatch.h" -class AutoTypeAction; -class AutoTypeExecutor; class AutoTypePlatformInterface; class Database; class Entry; @@ -41,8 +41,8 @@ class AutoType : public QObject QStringList windowTitles(); bool registerGlobalShortcut(Qt::Key key, Qt::KeyboardModifiers modifiers, QString* error = nullptr); void unregisterGlobalShortcut(); - void performAutoType(const Entry* entry, QWidget* hideWindow = nullptr); - void performAutoTypeWithSequence(const Entry* entry, const QString& sequence, QWidget* hideWindow = nullptr); + void performAutoType(const Entry* entry); + void performAutoTypeWithSequence(const Entry* entry, const QString& sequence); static bool verifyAutoTypeSyntax(const QString& sequence, const Entry* entry, QString& error); @@ -80,9 +80,9 @@ private slots: ~AutoType() override; void loadPlugin(const QString& pluginPath); void executeAutoTypeActions(const Entry* entry, - QWidget* hideWindow = nullptr, - const QString& customSequence = QString(), - WId window = 0); + const QString& sequence = QString(), + WId window = 0, + AutoTypeExecutor::Mode mode = AutoTypeExecutor::Mode::NORMAL); void restoreWindowState(); void resetAutoTypeState(); diff --git a/src/autotype/AutoTypeAction.cpp b/src/autotype/AutoTypeAction.cpp index d43ff70025..237d7743fe 100644 --- a/src/autotype/AutoTypeAction.cpp +++ b/src/autotype/AutoTypeAction.cpp @@ -65,3 +65,14 @@ AutoTypeAction::Result AutoTypeBegin::exec(AutoTypeExecutor* executor) const { return executor->execBegin(this); } + +AutoTypeMode::AutoTypeMode(AutoTypeExecutor::Mode mode) + : mode(mode) +{ +} + +AutoTypeAction::Result AutoTypeMode::exec(AutoTypeExecutor* executor) const +{ + executor->mode = mode; + return AutoTypeAction::Result::Ok(); +} diff --git a/src/autotype/AutoTypeAction.h b/src/autotype/AutoTypeAction.h index 48dd29cc9b..082d0aea7d 100644 --- a/src/autotype/AutoTypeAction.h +++ b/src/autotype/AutoTypeAction.h @@ -121,13 +121,29 @@ class KEEPASSXC_EXPORT AutoTypeBegin : public AutoTypeAction class KEEPASSXC_EXPORT AutoTypeExecutor { public: + enum class Mode + { + NORMAL, + VIRTUAL + }; + virtual ~AutoTypeExecutor() = default; virtual AutoTypeAction::Result execBegin(const AutoTypeBegin* action) = 0; virtual AutoTypeAction::Result execType(const AutoTypeKey* action) = 0; virtual AutoTypeAction::Result execClearField(const AutoTypeClearField* action) = 0; int execDelayMs = 25; + Mode mode = Mode::NORMAL; QString error; }; +class KEEPASSXC_EXPORT AutoTypeMode : public AutoTypeAction +{ +public: + AutoTypeMode(AutoTypeExecutor::Mode mode = AutoTypeExecutor::Mode::NORMAL); + Result exec(AutoTypeExecutor* executor) const override; + + const AutoTypeExecutor::Mode mode; +}; + #endif // KEEPASSX_AUTOTYPEACTION_H diff --git a/src/autotype/AutoTypeSelectDialog.cpp b/src/autotype/AutoTypeSelectDialog.cpp index d58e331510..0c8eefdc4a 100644 --- a/src/autotype/AutoTypeSelectDialog.cpp +++ b/src/autotype/AutoTypeSelectDialog.cpp @@ -58,6 +58,8 @@ AutoTypeSelectDialog::AutoTypeSelectDialog(QWidget* parent) } }); + m_ui->helpButton->setIcon(icons()->icon("system-help")); + m_ui->search->installEventFilter(this); m_searchTimer.setInterval(300); @@ -118,7 +120,7 @@ void AutoTypeSelectDialog::submitAutoTypeMatch(AutoTypeMatch match) if (match.first) { m_accepted = true; accept(); - emit matchActivated(std::move(match)); + emit matchActivated(std::move(match), m_virtualMode); } } @@ -274,34 +276,54 @@ void AutoTypeSelectDialog::buildActionMenu() m_actionMenu->addAction(typeUsernameAction); m_actionMenu->addAction(typePasswordAction); m_actionMenu->addAction(typeTotpAction); +#ifdef Q_OS_WIN + auto typeVirtualAction = new QAction(icons()->icon("auto-type"), tr("Use Virtual Keyboard")); + m_actionMenu->addAction(typeVirtualAction); +#endif m_actionMenu->addAction(copyUsernameAction); m_actionMenu->addAction(copyPasswordAction); m_actionMenu->addAction(copyTotpAction); - auto shortcut = new QShortcut(Qt::CTRL + Qt::Key_1, this); - connect(shortcut, &QShortcut::activated, typeUsernameAction, &QAction::trigger); + typeUsernameAction->setShortcut(Qt::CTRL + Qt::Key_1); connect(typeUsernameAction, &QAction::triggered, this, [&] { auto match = m_ui->view->currentMatch(); match.second = "{USERNAME}"; submitAutoTypeMatch(match); }); - shortcut = new QShortcut(Qt::CTRL + Qt::Key_2, this); - connect(shortcut, &QShortcut::activated, typePasswordAction, &QAction::trigger); + typePasswordAction->setShortcut(Qt::CTRL + Qt::Key_2); connect(typePasswordAction, &QAction::triggered, this, [&] { auto match = m_ui->view->currentMatch(); match.second = "{PASSWORD}"; submitAutoTypeMatch(match); }); - shortcut = new QShortcut(Qt::CTRL + Qt::Key_3, this); - connect(shortcut, &QShortcut::activated, typeTotpAction, &QAction::trigger); + typeTotpAction->setShortcut(Qt::CTRL + Qt::Key_3); connect(typeTotpAction, &QAction::triggered, this, [&] { auto match = m_ui->view->currentMatch(); match.second = "{TOTP}"; submitAutoTypeMatch(match); }); +#ifdef Q_OS_WIN + typeVirtualAction->setShortcut(Qt::CTRL + Qt::Key_4); + connect(typeVirtualAction, &QAction::triggered, this, [&] { + m_virtualMode = true; + activateCurrentMatch(); + }); +#endif + +#if QT_VERSION >= QT_VERSION_CHECK(5, 10, 0) + // Qt 5.10 introduced a new "feature" to hide shortcuts in context menus + // Unfortunately, Qt::AA_DontShowShortcutsInContextMenus is broken, have to manually enable them + typeUsernameAction->setShortcutVisibleInContextMenu(true); + typePasswordAction->setShortcutVisibleInContextMenu(true); + typeTotpAction->setShortcutVisibleInContextMenu(true); +#ifdef Q_OS_WIN + typeVirtualAction->setShortcutVisibleInContextMenu(true); +#endif +#endif + connect(copyUsernameAction, &QAction::triggered, this, [&] { auto entry = m_ui->view->currentMatch().first; if (entry) { diff --git a/src/autotype/AutoTypeSelectDialog.h b/src/autotype/AutoTypeSelectDialog.h index fec596b344..9c05804106 100644 --- a/src/autotype/AutoTypeSelectDialog.h +++ b/src/autotype/AutoTypeSelectDialog.h @@ -45,7 +45,7 @@ class AutoTypeSelectDialog : public QDialog void setSearchString(const QString& search); signals: - void matchActivated(AutoTypeMatch match); + void matchActivated(AutoTypeMatch match, bool virtualMode = false); protected: bool eventFilter(QObject* obj, QEvent* event) override; @@ -69,6 +69,7 @@ private slots: QTimer m_searchTimer; QPointer m_actionMenu; + bool m_virtualMode = false; bool m_accepted = false; }; diff --git a/src/autotype/AutoTypeSelectDialog.ui b/src/autotype/AutoTypeSelectDialog.ui index cac656d608..0c5e3c8c28 100644 --- a/src/autotype/AutoTypeSelectDialog.ui +++ b/src/autotype/AutoTypeSelectDialog.ui @@ -43,34 +43,29 @@ - - - - 0 - 0 - + + + PointingHandCursor - - - 14 - 14 - + + Qt::NoFocus <p>You can use advanced search queries to find any entry in your open databases. The following shortcuts are useful:<br/> Ctrl+F - Toggle database search<br/> Ctrl+1 - Type username<br/> Ctrl+2 - Type password<br/> -Ctrl+3 - Type TOTP</p> +Ctrl+3 - Type TOTP<br/> +Ctrl+4 - Use Virtual Keyboard (Windows Only)</p> - - + + QToolButton { + border: none; + background: none; +} - - :/icons/application/scalable/actions/system-help.svg - - - true + + ? diff --git a/src/autotype/windows/AutoTypeWindows.cpp b/src/autotype/windows/AutoTypeWindows.cpp index 894980f83c..9d0467b90a 100644 --- a/src/autotype/windows/AutoTypeWindows.cpp +++ b/src/autotype/windows/AutoTypeWindows.cpp @@ -81,67 +81,71 @@ bool AutoTypePlatformWin::raiseWindow(WId window) // // Send unicode character to foreground window // -void AutoTypePlatformWin::sendChar(const QChar& ch, bool isKeyDown) +void AutoTypePlatformWin::sendChar(const QChar& ch) { - auto vkey = VkKeyScanExW(ch.unicode(), GetKeyboardLayout(0)); - if (vkey == -1) { - // VKey not found, send as Unicode character - DWORD flags = KEYEVENTF_UNICODE; - if (!isKeyDown) { - flags |= KEYEVENTF_KEYUP; - } + DWORD nativeFlags = KEYEVENTF_UNICODE; + + INPUT in[2]; + in[0].type = INPUT_KEYBOARD; + in[0].ki.wVk = 0; + in[0].ki.wScan = ch.unicode(); + in[0].ki.dwFlags = KEYEVENTF_UNICODE; + in[0].ki.time = 0; + in[0].ki.dwExtraInfo = ::GetMessageExtraInfo(); + + in[1] = in[0]; + in[1].ki.dwFlags |= KEYEVENTF_KEYUP; - INPUT in; - in.type = INPUT_KEYBOARD; - in.ki.wVk = 0; - in.ki.wScan = ch.unicode(); - in.ki.dwFlags = flags; - in.ki.time = 0; - in.ki.dwExtraInfo = ::GetMessageExtraInfo(); - ::SendInput(1, &in, sizeof(INPUT)); + ::SendInput(2, &in[0], sizeof(INPUT)); +} + +void AutoTypePlatformWin::sendCharVirtual(const QChar& ch) +{ + auto vKey = VkKeyScanExW(ch.unicode(), GetKeyboardLayout(0)); + if (vKey == -1) { + // VKey not found, send as Unicode character + sendChar(ch); return; } - if (HIBYTE(vkey) & 0x6) { - sendKey(Qt::Key_AltGr, true); + if (HIBYTE(vKey) & 0x6) { + setKeyState(Qt::Key_AltGr, true); } else { - if (HIBYTE(vkey) & 0x1) { - sendKey(Qt::Key_Shift, true); + if (HIBYTE(vKey) & 0x1) { + setKeyState(Qt::Key_Shift, true); } - if (HIBYTE(vkey) & 0x2) { - sendKey(Qt::Key_Control, true); + if (HIBYTE(vKey) & 0x2) { + setKeyState(Qt::Key_Control, true); } - if (HIBYTE(vkey) & 0x4) { - sendKey(Qt::Key_Alt, true); + if (HIBYTE(vKey) & 0x4) { + setKeyState(Qt::Key_Alt, true); } } - DWORD flags = KEYEVENTF_SCANCODE; - if (!isKeyDown) { - flags |= KEYEVENTF_KEYUP; - } + INPUT in[2]; + in[0].type = INPUT_KEYBOARD; + in[0].ki.wVk = 0; + in[0].ki.wScan = MapVirtualKey(LOBYTE(vKey), MAPVK_VK_TO_VSC); + in[0].ki.dwFlags = KEYEVENTF_SCANCODE; + in[0].ki.time = 0; + in[0].ki.dwExtraInfo = ::GetMessageExtraInfo(); - INPUT in; - in.type = INPUT_KEYBOARD; - in.ki.wVk = 0; - in.ki.wScan = MapVirtualKey(LOBYTE(vkey), MAPVK_VK_TO_VSC); - in.ki.dwFlags = flags; - in.ki.time = 0; - in.ki.dwExtraInfo = ::GetMessageExtraInfo(); + in[1] = in[0]; + in[1].ki.dwFlags |= KEYEVENTF_KEYUP; - ::SendInput(1, &in, sizeof(INPUT)); + ::SendInput(2, &in[0], sizeof(INPUT)); - if (HIBYTE(vkey) & 0x6) { - sendKey(Qt::Key_AltGr, false); + if (HIBYTE(vKey) & 0x6) { + setKeyState(Qt::Key_AltGr, false); } else { - if (HIBYTE(vkey) & 0x1) { - sendKey(Qt::Key_Shift, false); + if (HIBYTE(vKey) & 0x1) { + setKeyState(Qt::Key_Shift, false); } - if (HIBYTE(vkey) & 0x2) { - sendKey(Qt::Key_Control, false); + if (HIBYTE(vKey) & 0x2) { + setKeyState(Qt::Key_Control, false); } - if (HIBYTE(vkey) & 0x4) { - sendKey(Qt::Key_Alt, false); + if (HIBYTE(vKey) & 0x4) { + setKeyState(Qt::Key_Alt, false); } } } @@ -149,14 +153,14 @@ void AutoTypePlatformWin::sendChar(const QChar& ch, bool isKeyDown) // // Send virtual key code to foreground window // -void AutoTypePlatformWin::sendKey(Qt::Key key, bool isKeyDown) +void AutoTypePlatformWin::setKeyState(Qt::Key key, bool down) { WORD nativeKeyCode = winUtils()->qtToNativeKeyCode(key); DWORD nativeFlags = KEYEVENTF_SCANCODE; if (isExtendedKey(nativeKeyCode)) { nativeFlags |= KEYEVENTF_EXTENDEDKEY; } - if (!isKeyDown) { + if (!down) { nativeFlags |= KEYEVENTF_KEYUP; } @@ -279,37 +283,40 @@ AutoTypeAction::Result AutoTypeExecutorWin::execBegin(const AutoTypeBegin* actio AutoTypeAction::Result AutoTypeExecutorWin::execType(const AutoTypeKey* action) { if (action->modifiers & Qt::ShiftModifier) { - m_platform->sendKey(Qt::Key_Shift, true); + m_platform->setKeyState(Qt::Key_Shift, true); } if (action->modifiers & Qt::ControlModifier) { - m_platform->sendKey(Qt::Key_Control, true); + m_platform->setKeyState(Qt::Key_Control, true); } if (action->modifiers & Qt::AltModifier) { - m_platform->sendKey(Qt::Key_Alt, true); + m_platform->setKeyState(Qt::Key_Alt, true); } if (action->modifiers & Qt::MetaModifier) { - m_platform->sendKey(Qt::Key_Meta, true); + m_platform->setKeyState(Qt::Key_Meta, true); } if (action->key != Qt::Key_unknown) { - m_platform->sendKey(action->key, true); - m_platform->sendKey(action->key, false); + m_platform->setKeyState(action->key, true); + m_platform->setKeyState(action->key, false); } else { - m_platform->sendChar(action->character, true); - m_platform->sendChar(action->character, false); + if (mode == Mode::VIRTUAL) { + m_platform->sendCharVirtual(action->character); + } else { + m_platform->sendChar(action->character); + } } if (action->modifiers & Qt::ShiftModifier) { - m_platform->sendKey(Qt::Key_Shift, false); + m_platform->setKeyState(Qt::Key_Shift, false); } if (action->modifiers & Qt::ControlModifier) { - m_platform->sendKey(Qt::Key_Control, false); + m_platform->setKeyState(Qt::Key_Control, false); } if (action->modifiers & Qt::AltModifier) { - m_platform->sendKey(Qt::Key_Alt, false); + m_platform->setKeyState(Qt::Key_Alt, false); } if (action->modifiers & Qt::MetaModifier) { - m_platform->sendKey(Qt::Key_Meta, false); + m_platform->setKeyState(Qt::Key_Meta, false); } Tools::sleep(execDelayMs); diff --git a/src/autotype/windows/AutoTypeWindows.h b/src/autotype/windows/AutoTypeWindows.h index 7b3d577d02..29e98ab353 100644 --- a/src/autotype/windows/AutoTypeWindows.h +++ b/src/autotype/windows/AutoTypeWindows.h @@ -43,8 +43,9 @@ class AutoTypePlatformWin : public QObject, public AutoTypePlatformInterface bool raiseWindow(WId window) override; AutoTypeExecutor* createExecutor() override; - void sendChar(const QChar& ch, bool isKeyDown); - void sendKey(Qt::Key key, bool isKeyDown); + void sendCharVirtual(const QChar& ch); + void sendChar(const QChar& ch); + void setKeyState(Qt::Key key, bool down); private: static bool isExtendedKey(DWORD nativeKeyCode); diff --git a/src/gui/DatabaseWidget.cpp b/src/gui/DatabaseWidget.cpp index 1187138728..864b78c6ed 100644 --- a/src/gui/DatabaseWidget.cpp +++ b/src/gui/DatabaseWidget.cpp @@ -782,9 +782,9 @@ void DatabaseWidget::performAutoType(const QString& sequence) } if (sequence.isEmpty()) { - autoType()->performAutoType(currentEntry, window()); + autoType()->performAutoType(currentEntry); } else { - autoType()->performAutoTypeWithSequence(currentEntry, sequence, window()); + autoType()->performAutoTypeWithSequence(currentEntry, sequence); } } } diff --git a/tests/TestAutoType.cpp b/tests/TestAutoType.cpp index 32b4b1e499..235ba5a861 100644 --- a/tests/TestAutoType.cpp +++ b/tests/TestAutoType.cpp @@ -140,7 +140,7 @@ void TestAutoType::testInternal() void TestAutoType::testSingleAutoType() { - m_autoType->performAutoType(m_entry1, nullptr); + m_autoType->performAutoType(m_entry1); QCOMPARE(m_test->actionCount(), 14); QCOMPARE(m_test->actionChars(),