Commit 682c7bba by xiaojing.zhang

1.支付流程优化

parent 7975626f
...@@ -27,7 +27,8 @@ SOURCES +=\ ...@@ -27,7 +27,8 @@ SOURCES +=\
fmnumpad.cpp \ fmnumpad.cpp \
fmp_home_settings.cpp \ fmp_home_settings.cpp \
fmp_flicker.cpp \ fmp_flicker.cpp \
fmp_message.cpp fmp_message.cpp \
keyboardlistener.cpp
HEADERS += fmp_home.h \ HEADERS += fmp_home.h \
fmp_home_plugin_p.h \ fmp_home_plugin_p.h \
...@@ -44,7 +45,8 @@ HEADERS += fmp_home.h \ ...@@ -44,7 +45,8 @@ HEADERS += fmp_home.h \
fmp_flicker.h \ fmp_flicker.h \
algorithm.h \ algorithm.h \
fmp_message.h \ fmp_message.h \
fmp_home_def.h fmp_home_def.h \
keyboardlistener.h
FORMS += \ FORMS += \
fmp_home_navwindow.ui \ fmp_home_navwindow.ui \
...@@ -72,11 +74,11 @@ LIBS += -L$$PWD/../lib ...@@ -72,11 +74,11 @@ LIBS += -L$$PWD/../lib
CONFIG(debug, debug|release) { CONFIG(debug, debug|release) {
#Linking library #Linking library
LIBS += -lCTKCored -lCTKPluginFrameworkd LIBS += -lCTKCored -lCTKPluginFrameworkd -luser32
#Destination path #Destination path
DESTDIR = $$PWD/../debug/plugins DESTDIR = $$PWD/../debug/plugins
} else { } else {
LIBS += -lCTKCore -lCTKPluginFramework LIBS += -lCTKCore -lCTKPluginFramework -luser32
DESTDIR = $$PWD/../release/plugins DESTDIR = $$PWD/../release/plugins
} }
......
...@@ -14,6 +14,11 @@ ...@@ -14,6 +14,11 @@
#include <QMenu> #include <QMenu>
#include <QtConcurrent> #include <QtConcurrent>
#include <QDesktopWidget> #include <QDesktopWidget>
#include"keyboardlistener.h"
NavWindow::NavWindow(QWidget *parent) : NavWindow::NavWindow(QWidget *parent) :
QDialog(parent), QDialog(parent),
...@@ -31,9 +36,9 @@ NavWindow::NavWindow(QWidget *parent) : ...@@ -31,9 +36,9 @@ NavWindow::NavWindow(QWidget *parent) :
connect(this, SIGNAL(stopBlink()), ui->navMainBtn, SLOT(stop())); connect(this, SIGNAL(stopBlink()), ui->navMainBtn, SLOT(stop()));
btns.push_back(std::make_pair("payment", QString::fromLocal8Bit("非码支付"))); btns.push_back(std::make_pair("payment", QString::fromLocal8Bit("非码支付")));
btns.push_back(std::make_pair("vip", QString::fromLocal8Bit("非码会员"))); //btns.push_back(std::make_pair("vip", QString::fromLocal8Bit("非码会员")));
btns.push_back(std::make_pair("takeout", QString::fromLocal8Bit("非码外卖"))); //btns.push_back(std::make_pair("takeout", QString::fromLocal8Bit("非码外卖")));
btns.push_back(std::make_pair("coupons", QString::fromLocal8Bit("码多多"))); // btns.push_back(std::make_pair("coupons", QString::fromLocal8Bit("码多多")));
btns.push_back(std::make_pair("tool", QString::fromLocal8Bit("设置"))); btns.push_back(std::make_pair("tool", QString::fromLocal8Bit("设置")));
MenuUiProp.distance = 100; MenuUiProp.distance = 100;
...@@ -65,7 +70,21 @@ NavWindow::NavWindow(QWidget *parent) : ...@@ -65,7 +70,21 @@ NavWindow::NavWindow(QWidget *parent) :
this->move(pos); this->move(pos);
connect(ui->navMainBtn, SIGNAL(moved(QPoint)), this, SLOT(onMoved(QPoint))); connect(ui->navMainBtn, SIGNAL(moved(QPoint)), this, SLOT(onMoved(QPoint)));
connect(this, SIGNAL(qcodeReceived(QString)), this, SLOT(onPayDialogAutoShow(QString))); //zxj触发弹出支付窗口
connect(this, SIGNAL(navImageChanged()), this, SLOT(onNavImageChanged())); connect(this, SIGNAL(navImageChanged()), this, SLOT(onNavImageChanged()));
ui->navMainBtn->setFocus(); //设置默认焦点
ui->navMainBtn->setDefault(true);
acceptLine = new QLineEdit(this);
acceptLine->setVisible(false);
acceptLine->installEventFilter(this);
keyboardListener = new KeyboardListener();
keyboardListener->setTextAddress(acceptLine);
_timestamp = 0;
} }
NavWindow::~NavWindow() NavWindow::~NavWindow()
...@@ -81,6 +100,7 @@ NavWindow::~NavWindow() ...@@ -81,6 +100,7 @@ NavWindow::~NavWindow()
delete _menu; delete _menu;
delete _animationShow; delete _animationShow;
delete _systemTrayIcon; delete _systemTrayIcon;
delete keyboardListener;
// delete stateDefault; // delete stateDefault;
// delete stateSpread; // delete stateSpread;
// delete stateGroup; // delete stateGroup;
...@@ -202,12 +222,57 @@ void NavWindow::createMenuBtn(const QString &btnName, const QString &showName) ...@@ -202,12 +222,57 @@ void NavWindow::createMenuBtn(const QString &btnName, const QString &showName)
ui->navMainBtn->raise(); ui->navMainBtn->raise();
} }
bool NavWindow::eventFilter(QObject *target, QEvent *event)
{
if (target == acceptLine )
{
if (event->type() == CODE_EVENT)
{
QString codeString = acceptLine->text(); //扫码枪扫到的值
qDebug()<<acceptLine->text();
emit qcodeReceived(codeString);
FMP_INFO()<<"home navwindow got sweep gun data event ";
return true;
}
if (event->type() == NOCODE_EVENT)
{
FMP_INFO()<< "home navwindow got message to clear the hooked data event";
// qint64 timestamp = QDateTime::currentDateTime().toMSecsSinceEpoch();
//if(timestamp - _timestamp >200 )
// {
QTimer::singleShot(300,this,SLOT(timercall()));
//}
//_timestamp = timestamp;
return true;
}
}
return QDialog::eventFilter(target, event);
}
void NavWindow::timercall()
{
keyboardListener->clearCode();
}
void NavWindow::onMenuBtnClicked(QAbstractButton *btn) void NavWindow::onMenuBtnClicked(QAbstractButton *btn)
{ {
QString btnName = btn->objectName(); QString btnName = btn->objectName();
qDebug()<< "test btnName"<<btnName ;
emit menuBtnClicked(btnName); emit menuBtnClicked(btnName);
} }
void NavWindow::initSystemTrayIcon() void NavWindow::initSystemTrayIcon()
{ {
QIcon icon(":fm-icon_tray"); QIcon icon(":fm-icon_tray");
...@@ -338,7 +403,16 @@ void NavWindow::onNavImageChanged() ...@@ -338,7 +403,16 @@ void NavWindow::onNavImageChanged()
ui->navMainBtn->setNormalPixmap(_navImage); ui->navMainBtn->setNormalPixmap(_navImage);
} }
} }
void NavWindow::onPayDialogAutoShow(QString code)
{
QString btnName = "payment";
emit payCode(code);
emit menuBtnClicked(btnName);
}
void NavWindow::showMessage(const QString &title, const QString &msg, QSystemTrayIcon::MessageIcon icon, int mecs) void NavWindow::showMessage(const QString &title, const QString &msg, QSystemTrayIcon::MessageIcon icon, int mecs)
{ {
_systemTrayIcon->showMessage(title, msg, icon, mecs); _systemTrayIcon->showMessage(title, msg, icon, mecs);
} }
...@@ -9,6 +9,9 @@ ...@@ -9,6 +9,9 @@
#include <QFuture> #include <QFuture>
#include <QSemaphore> #include <QSemaphore>
#include <QSystemTrayIcon> #include <QSystemTrayIcon>
#include <QLineEdit>
namespace Ui { namespace Ui {
class NavWindow; class NavWindow;
...@@ -22,6 +25,7 @@ class FMPSettingsInterface; ...@@ -22,6 +25,7 @@ class FMPSettingsInterface;
class QStateMachine; class QStateMachine;
class QState; class QState;
class FMPluginInterface; class FMPluginInterface;
class KeyboardListener;
/** /**
* struct BlinkObject '闪烁'结构体 * struct BlinkObject '闪烁'结构体
...@@ -49,6 +53,9 @@ public: ...@@ -49,6 +53,9 @@ public:
void setNavImage(const QString &image); void setNavImage(const QString &image);
void createMenuBtn(const QString &btnName, const QString &showName); void createMenuBtn(const QString &btnName, const QString &showName);
bool eventFilter(QObject *target, QEvent *event);
public slots: public slots:
/** /**
...@@ -82,8 +89,12 @@ public slots: ...@@ -82,8 +89,12 @@ public slots:
void showMessage(const QString &title, const QString &msg, void showMessage(const QString &title, const QString &msg,
QSystemTrayIcon::MessageIcon icon = QSystemTrayIcon::Information, int mecs = 1000); QSystemTrayIcon::MessageIcon icon = QSystemTrayIcon::Information, int mecs = 1000);
void timercall();
signals: signals:
void menuBtnClicked(QString btnName); void menuBtnClicked(QString btnName);
void payCode(QString code);
void qcodeReceived(QString code); //付款码接收完整
/** /**
* @brief startBlink * @brief startBlink
...@@ -108,6 +119,7 @@ private slots: ...@@ -108,6 +119,7 @@ private slots:
void onMenuBtnClicked(QAbstractButton*); void onMenuBtnClicked(QAbstractButton*);
void onMoved(QPoint point); void onMoved(QPoint point);
void onNavImageChanged(); void onNavImageChanged();
void onPayDialogAutoShow(QString code);
private: private:
Ui::NavWindow *ui; Ui::NavWindow *ui;
...@@ -161,6 +173,9 @@ private: ...@@ -161,6 +173,9 @@ private:
}; };
MenuUiProps MenuUiProp; MenuUiProps MenuUiProp;
bool isUseAnimation; bool isUseAnimation;
QLineEdit * acceptLine;//用于接受enter事件捕获的数据
KeyboardListener* keyboardListener; //键盘监听件事
qint64 _timestamp;
}; };
#endif // NAVWINDOW_H #endif // NAVWINDOW_H
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
#include <fmp_vip_i.h> #include <fmp_vip_i.h>
#include <fmp_settings_i.h> #include <fmp_settings_i.h>
#include <fmp_takeout_i.h> #include <fmp_takeout_i.h>
#include <QApplication> //#include <QApplication>
#include "fmp_login.h" #include "fmp_login.h"
#include "fmp_he_handlers.h" #include "fmp_he_handlers.h"
#include "fmp_home_settings.h" #include "fmp_home_settings.h"
...@@ -50,6 +50,7 @@ int FMPHomePrivate::Init() ...@@ -50,6 +50,7 @@ int FMPHomePrivate::Init()
_navWindow->show(); _navWindow->show();
connect(_navWindow, SIGNAL(menuBtnClicked(QString)), this, SLOT(onMenuBtnClicked(QString))); connect(_navWindow, SIGNAL(menuBtnClicked(QString)), this, SLOT(onMenuBtnClicked(QString)));
connect(_navWindow, SIGNAL(payCode(QString)), this, SLOT(onGetPayCode(QString)));
connect(_navWindow, &NavWindow::pluginActived, this, &FMPHomePrivate::onPluginActived); connect(_navWindow, &NavWindow::pluginActived, this, &FMPHomePrivate::onPluginActived);
...@@ -152,6 +153,18 @@ void FMPHomePrivate::onMenuBtnClicked(QString btnName) ...@@ -152,6 +153,18 @@ void FMPHomePrivate::onMenuBtnClicked(QString btnName)
FMPBaseInterface *svc = 0; FMPBaseInterface *svc = 0;
if(btnName == "payment") { if(btnName == "payment") {
svc = q->GetService<FMPePayInterface>(q->_ctx); svc = q->GetService<FMPePayInterface>(q->_ctx);
FMPePayInterface *test = q->GetService<FMPePayInterface>(q->_ctx);
if(_bHaveSig)
{
test->DockPayCode(_payCode);
_bHaveSig = false;
}
else
{
test->DockPayCode("");
}
} else if(btnName == "vip") { } else if(btnName == "vip") {
svc = q->GetService<FMPVipInterface>(q->_ctx); svc = q->GetService<FMPVipInterface>(q->_ctx);
// q->blink((FMPluginInterface*)svc, ":/image/float_remind.png"); // q->blink((FMPluginInterface*)svc, ":/image/float_remind.png");
...@@ -171,4 +184,14 @@ void FMPHomePrivate::onMenuBtnClicked(QString btnName) ...@@ -171,4 +184,14 @@ void FMPHomePrivate::onMenuBtnClicked(QString btnName)
else { else {
FMP_WARN() << "service not available" ; FMP_WARN() << "service not available" ;
} }
}
void FMPHomePrivate::onGetPayCode(QString payCode)
{
_payCode = payCode;
_bHaveSig = true;
} }
...@@ -31,6 +31,7 @@ public: ...@@ -31,6 +31,7 @@ public:
public slots: public slots:
void onMenuBtnClicked(QString btnName); void onMenuBtnClicked(QString btnName);
void onGetPayCode(QString payCode);
void onPluginActived(FMPBaseInterface* plugin); void onPluginActived(FMPBaseInterface* plugin);
public: public:
...@@ -39,6 +40,8 @@ public: ...@@ -39,6 +40,8 @@ public:
bool _isLogined; bool _isLogined;
QString _userName; QString _userName;
QString _errorMsg; QString _errorMsg;
QString _payCode;
bool _bHaveSig;//code信号
private: private:
NavWindow *_navWindow; NavWindow *_navWindow;
......
#include "keyboardlistener.h"
#include <QApplication>
#include <QDateTime>
#include <QTimer>
#include <QDebug>
qint64 KeyboardListener::_timeStamp=0;
qint64 KeyboardListener::_forDataStamp = 0;
QLineEdit *KeyboardListener::up = 0;
std::string KeyboardListener::_QCode = "";
std::string KeyboardListener::_retCode = "";
Qt::KeyboardModifiers KeyboardListener::curModifiers = Qt::NoModifier;
KeyboardListener::KeyboardListener()
{
ahook = SetWindowsHookEx(WH_KEYBOARD_LL, (HOOKPROC)recordListener, 0, 0);
}
LRESULT CALLBACK KeyboardListener::recordListener(int code, WPARAM wprm, LPARAM lprm) {
if(code == HC_ACTION) {
switch(wprm)
{
case WM_KEYDOWN:
if(getDataFromSweepGun(code,wprm,lprm))
{
return true;
}
else
{
return false;
}
}
return CallNextHookEx(NULL, code, wprm, lprm);
}
}
void KeyboardListener::setTextAddress(QLineEdit* up) {
this->up = up;
}
std::string KeyboardListener::getCodeText()
{
return _retCode;
}
void KeyboardListener::setCodeText(std::string code)
{
_retCode = code;
}
void KeyboardListener::clearCode()
{
if(_QCode.size() > 0)
{
_SimulateKeyboard(_QCode.at(0));
qDebug()<<"send first data wsa hooked ";
_QCode.clear();
}
_forDataStamp = 0;
}
bool KeyboardListener::getDataFromSweepGun(int code, WPARAM wprm, LPARAM lprm)
{
KBDLLHOOKSTRUCT *strct = (KBDLLHOOKSTRUCT *)lprm;
if( strct->vkCode >= 48 && strct->vkCode <=57)
{
qint64 timestamp = QDateTime::currentDateTime().toMSecsSinceEpoch();
if(_QCode.size() == 0)
{
_timeStamp = timestamp;
const QEvent::Type MyEvent = QEvent::Type(NOCODE_EVENT);
QApplication::sendEvent((QObject*)up,new QEvent(MyEvent) );
qDebug() <<"keybordlistener send event to clear the hooked data";
}
if(_forDataStamp == 0 || timestamp - _forDataStamp < SWEEPTIME) //根据键盘输入时间做判断,输入间隔小于40则认为是扫枪输入的数据
{
_QCode += strct->vkCode;
_forDataStamp = timestamp;
qDebug() << " keyboard num hooked ,num is : "<< strct->vkCode;
return true;
}
else
{
qDebug() << " keyboard num not hooked ,num is : "<< strct->vkCode;
return false;
}
}
else if(strct->vkCode >= VK_RETURN)
{
if(dealSweepGunReturn(code,wprm,lprm))
{
qDebug() << " keyboard enter event was hooked ";
return true;
}
else
{
qDebug() << " keyboard enter event was hooked ";
return false;
}
}
else return false;
}
bool KeyboardListener::dealSweepGunReturn(int code, WPARAM wprm, LPARAM lprm)
{
KBDLLHOOKSTRUCT *strct = (KBDLLHOOKSTRUCT *)lprm;
strct->vkCode;
qint64 timestamp = QDateTime::currentDateTime().toMSecsSinceEpoch();
qDebug() << " return code size ,_QCode.size()"<< _QCode.size();
qDebug() << " return time period from first num key to return hooked,timestamp-_timeStamp"<< timestamp-_timeStamp;
if(_QCode.size() >= CODELENGTH && timestamp-_timeStamp <TOTALTIME) //拿到的是付款码
{
up->setText(QString::fromStdString(_QCode));
const QEvent::Type MyEvent = QEvent::Type(CODE_EVENT);
QApplication::sendEvent((QObject*)up,new QEvent(MyEvent) );
qDebug()<< "get payment code and send event to deal";
_timeStamp = 0;
_forDataStamp = 0;
_QCode.clear();
return true;
}
else if(_QCode.size() < CODELENGTH && timestamp-_timeStamp <TOTALTIME)
{
_QCode.clear();
_timeStamp = 0;
_forDataStamp = 0;
qDebug()<< "prodecut code hooked too";
return true;
}
else
return false;
}
void KeyboardListener::_SimulateKeyboard(BYTE ch)
{
srand(GetTickCount());
Sleep((rand() % 10)+SWEEPTIME);
SHORT vk = VkKeyScanA(ch);
BYTE vk_ch = LOBYTE(vk);
BYTE vk_mod = HIBYTE(vk);
bool vk_shift = vk_mod & 0x01;
bool vk_ctrl = (bool)(vk_mod & 0x02);
bool vk_alt = (bool)(vk_mod & 0x08);
// Simulate key DOWN of modifier keys
if (vk_shift) {
keybd_event(VK_SHIFT, 0, 0, 0);
}
if (vk_ctrl) {
keybd_event(VK_CONTROL, 0, 0, 0);
}
if (vk_alt) {
keybd_event(VK_MENU, 0, 0, 0);
}
// Simulate normal key
keybd_event(vk_ch,(BYTE)0, 0 ,0);
keybd_event(vk_ch, (BYTE)0, KEYEVENTF_KEYUP,0);
// Simulate key UP of modifier keys
if (vk_shift) {
keybd_event(VK_SHIFT, 0, KEYEVENTF_KEYUP, 0);
}
if (vk_ctrl) {
keybd_event(VK_CONTROL, 0, KEYEVENTF_KEYUP, 0);
}
if (vk_alt) {
keybd_event(VK_MENU, 0, KEYEVENTF_KEYUP, 0);
}
}
BOOL KeyboardListener::destroy() {
return UnhookWindowsHookEx(ahook);
}
char KeyboardListener::getCharForVKCode(uint code, Qt::KeyboardModifiers modifier) {
switch(code) {
case 'A':
return modifier.testFlag(Qt::ShiftModifier) ? 'A' : 'a';
case 'B':
return modifier.testFlag(Qt::ShiftModifier) ? 'B' : 'b';
case 'C':
return modifier.testFlag(Qt::ShiftModifier) ? 'C' : 'c';
case 'D':
return modifier.testFlag(Qt::ShiftModifier) ? 'D' : 'd';
case 'E':
return modifier.testFlag(Qt::ShiftModifier) ? 'E' : 'e';
case 'F':
return modifier.testFlag(Qt::ShiftModifier) ? 'F' : 'f';
case 'G':
return modifier.testFlag(Qt::ShiftModifier) ? 'G' : 'g';
case 'H':
return modifier.testFlag(Qt::ShiftModifier) ? 'H' : 'h';
case 'I':
return modifier.testFlag(Qt::ShiftModifier) ? 'I' : 'i';
case 'J':
return modifier.testFlag(Qt::ShiftModifier) ? 'J' : 'j';
case 'K':
return modifier.testFlag(Qt::ShiftModifier) ? 'K' : 'k';
case 'L':
return modifier.testFlag(Qt::ShiftModifier) ? 'L' : 'l';
case 'M':
return modifier.testFlag(Qt::ShiftModifier) ? 'M' : 'm';
case 'N':
return modifier.testFlag(Qt::ShiftModifier) ? 'N' : 'n';
case 'O':
return modifier.testFlag(Qt::ShiftModifier) ? 'O' : 'o';
case 'P':
return modifier.testFlag(Qt::ShiftModifier) ? 'P' : 'p';
case 'Q':
return modifier.testFlag(Qt::ShiftModifier) ? 'Q' : 'q';
case 'R':
return modifier.testFlag(Qt::ShiftModifier) ? 'R' : 'r';
case 'S':
return modifier.testFlag(Qt::ShiftModifier) ? 'S' : 's';
case 'T':
return modifier.testFlag(Qt::ShiftModifier) ? 'T' : 't';
case 'U':
return modifier.testFlag(Qt::ShiftModifier) ? 'U' : 'u';
case 'V':
return modifier.testFlag(Qt::ShiftModifier) ? 'V' : 'v';
case 'W':
return modifier.testFlag(Qt::ShiftModifier) ? 'W' : 'w';
case 'X':
return modifier.testFlag(Qt::ShiftModifier) ? 'X' : 'x';
case 'Y':
return modifier.testFlag(Qt::ShiftModifier) ? 'Y' : 'y';
case 'Z':
return modifier.testFlag(Qt::ShiftModifier) ? 'Z' : 'z';
case VK_NUMPAD0:
return '0';
case '0':
return modifier.testFlag(Qt::ShiftModifier) ? ')' : '0';
case VK_NUMPAD1:
return '1';
case '1':
return modifier.testFlag(Qt::ShiftModifier) ? '!' : '1';
case VK_NUMPAD2:
return '2';
case '2':
return modifier.testFlag(Qt::ShiftModifier) ? '@' : '2';
case VK_NUMPAD3:
return '3';
case '3':
return modifier.testFlag(Qt::ShiftModifier) ? '#' : '3';
case VK_NUMPAD4:
return '4';
case '4':
return modifier.testFlag(Qt::ShiftModifier) ? '$' : '4';
case VK_NUMPAD5:
return '5';
case '5':
return modifier.testFlag(Qt::ShiftModifier) ? '%' : '5';
case VK_NUMPAD6:
return '6';
case '6':
return modifier.testFlag(Qt::ShiftModifier) ? '^' : '6';
case VK_NUMPAD7:
return '7';
case '7':
return modifier.testFlag(Qt::ShiftModifier) ? '&' : '7';
case VK_NUMPAD8:
return '8';
case '8':
return modifier.testFlag(Qt::ShiftModifier) ? '*' : '8';
case VK_NUMPAD9:
return '9';
case '9':
return modifier.testFlag(Qt::ShiftModifier) ? '(' : '9';
case VK_RETURN:
return '\n';
case 190:
return modifier.testFlag(Qt::ShiftModifier) ? '>' : '.';
case VK_DECIMAL:
return '.';
case 188:
return modifier.testFlag(Qt::ShiftModifier) ? '<' : ',';
case VK_ADD:
return '+';
case 187:
return modifier.testFlag(Qt::ShiftModifier) ? '+' : '=';
case VK_SUBTRACT:
return '-';
case 189:
return modifier.testFlag(Qt::ShiftModifier) ? '_' : '-';
case VK_MULTIPLY:
return '*';
case VK_OEM_1:
return modifier.testFlag(Qt::ShiftModifier) ? ':' : ';';
case VK_OEM_2:
return modifier.testFlag(Qt::ShiftModifier) ? '?' : '/';
case VK_OEM_3:
return modifier.testFlag(Qt::ShiftModifier) ? '~' : '`';
case VK_OEM_4:
return modifier.testFlag(Qt::ShiftModifier) ? '{' : '[';
case VK_OEM_5:
return modifier.testFlag(Qt::ShiftModifier) ? '|' : '\\';
case VK_OEM_6:
return modifier.testFlag(Qt::ShiftModifier) ? '}' : ']';
case VK_OEM_7:
return modifier.testFlag(Qt::ShiftModifier) ? '"' : '\'';
case VK_SPACE:
return ' ';
case VK_TAB:
return ' ';
case VK_SHIFT:
case VK_CONTROL:
return code;
default:
qDebug() << "Unhandled vk code" << code;
return code;
}
}
#ifndef KEYBOARDLISTENER_H
#define KEYBOARDLISTENER_H
#include <windows.h>
#include <windowsx.h>
#include <QDebug>
#include <QLineEdit>
#define CODE_EVENT QEvent::User + 500 //扫码枪码捕获事件
#define NOCODE_EVENT QEvent::User + 501 //非扫码枪事件
const int SWEEPTIME = 40;
const int CODELENGTH = 18 ;
const int TOTALTIME = 200 ;
//SWEEPTIME 单个code 时间戳差值
//CODELENGTH 付款码最小长度
//TOTALTIME 扫完付款码最大时间戳差值
class KeyboardListener:public QObject
{
Q_OBJECT
public:
KeyboardListener();
static LRESULT CALLBACK recordListener(int code, WPARAM wprm, LPARAM lprm);
static QLineEdit *up;
static Qt::KeyboardModifiers curModifiers;
static char getCharForVKCode(uint code, Qt::KeyboardModifiers modifier);
void setTextAddress(QLineEdit *up);
static void setCodeText(std::string code);
static void clearCode();
static bool getDataFromSweepGun(int code, WPARAM wprm, LPARAM lprm);
static bool dealSweepGunReturn(int code, WPARAM wprm, LPARAM lprm);
static void _SimulateKeyboard(BYTE ch);
std::string getCodeText();
HHOOK ahook;
BOOL destroy();
static std::string _QCode;
static std::string _retCode;
static qint64 _timeStamp;//记录时间戳,扫码枪数据输入的时间戳会很短
static qint64 _forDataStamp;//前一个数据的时间戳
};
#endif // JOURNALLISTENER_H
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment