Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
F
fmp_home
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
zhenfei.zhang
fmp_home
Commits
682c7bba
Commit
682c7bba
authored
May 17, 2019
by
xiaojing.zhang
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
1.支付流程优化
parent
7975626f
Show whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
512 additions
and
8 deletions
+512
-8
fmp_home.pro
+6
-4
fmp_home_navwindow.cpp
+77
-3
fmp_home_navwindow.h
+15
-0
fmp_home_p.cpp
+24
-1
fmp_home_p.h
+3
-0
keyboardlistener.cpp
+338
-0
keyboardlistener.h
+49
-0
No files found.
fmp_home.pro
View file @
682c7bba
...
@@ -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
}
}
...
...
fmp_home_navwindow.cpp
View file @
682c7bba
...
@@ -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
);
}
}
fmp_home_navwindow.h
View file @
682c7bba
...
@@ -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
fmp_home_p.cpp
View file @
682c7bba
...
@@ -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
;
}
}
fmp_home_p.h
View file @
682c7bba
...
@@ -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
;
...
...
keyboardlistener.cpp
0 → 100644
View file @
682c7bba
#
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
;
}
}
keyboardlistener.h
0 → 100644
View file @
682c7bba
#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
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment