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
9338109c
Commit
9338109c
authored
May 27, 2019
by
xiaojing.zhang
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
1.hook BUG 修复
parent
682c7bba
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
82 additions
and
51 deletions
+82
-51
fmp_home_navwindow.cpp
+2
-12
keyboardlistener.cpp
+77
-34
keyboardlistener.h
+3
-5
No files found.
fmp_home_navwindow.cpp
View file @
9338109c
...
@@ -238,18 +238,8 @@ bool NavWindow::eventFilter(QObject *target, QEvent *event)
...
@@ -238,18 +238,8 @@ bool NavWindow::eventFilter(QObject *target, QEvent *event)
}
}
if
(
event
->
type
()
==
NOCODE_EVENT
)
if
(
event
->
type
()
==
NOCODE_EVENT
)
{
{
FMP_INFO
()
<<
"home navwindow got message to clear the hooked data event"
;
//FMP_INFO()<< "home navwindow got message to clear the hooked data event";
// qint64 timestamp = QDateTime::currentDateTime().toMSecsSinceEpoch();
QTimer
::
singleShot
(
30
,
this
,
SLOT
(
timercall
()));
//if(timestamp - _timestamp >200 )
// {
QTimer
::
singleShot
(
300
,
this
,
SLOT
(
timercall
()));
//}
//_timestamp = timestamp;
return
true
;
return
true
;
...
...
keyboardlistener.cpp
View file @
9338109c
...
@@ -9,11 +9,18 @@ qint64 KeyboardListener::_forDataStamp = 0;
...
@@ -9,11 +9,18 @@ qint64 KeyboardListener::_forDataStamp = 0;
QLineEdit
*
KeyboardListener
::
up
=
0
;
QLineEdit
*
KeyboardListener
::
up
=
0
;
std
::
string
KeyboardListener
::
_QCode
=
""
;
std
::
string
KeyboardListener
::
_QCode
=
""
;
std
::
string
KeyboardListener
::
_retCode
=
""
;
std
::
string
KeyboardListener
::
_retCode
=
""
;
std
::
string
KeyboardListener
::
_numToDistri
=
""
;
std
::
string
_test
=
""
;
bool
_sign
=
true
;
Qt
::
KeyboardModifiers
KeyboardListener
::
curModifiers
=
Qt
::
NoModifier
;
Qt
::
KeyboardModifiers
KeyboardListener
::
curModifiers
=
Qt
::
NoModifier
;
KeyboardListener
::
KeyboardListener
()
KeyboardListener
::
KeyboardListener
()
{
{
ahook
=
SetWindowsHookEx
(
WH_KEYBOARD_LL
,
(
HOOKPROC
)
recordListener
,
0
,
0
);
ahook
=
SetWindowsHookEx
(
WH_KEYBOARD_LL
,
(
HOOKPROC
)
recordListener
,
0
,
0
);
// test = "";
}
}
...
@@ -22,15 +29,18 @@ LRESULT CALLBACK KeyboardListener::recordListener(int code, WPARAM wprm, LPARAM
...
@@ -22,15 +29,18 @@ LRESULT CALLBACK KeyboardListener::recordListener(int code, WPARAM wprm, LPARAM
switch
(
wprm
)
switch
(
wprm
)
{
{
case
WM_KEYDOWN
:
case
WM_KEYDOWN
:
if
(
getDataFromSweepGun
(
code
,
wprm
,
lprm
))
// if(_sign)
{
// {
return
true
;
if
(
getDataFromSweepGun
(
code
,
wprm
,
lprm
))
}
{
else
return
true
;
{
}
return
false
;
else
{
}
return
false
;
}
// }
}
}
return
CallNextHookEx
(
NULL
,
code
,
wprm
,
lprm
);
return
CallNextHookEx
(
NULL
,
code
,
wprm
,
lprm
);
...
@@ -58,14 +68,24 @@ void KeyboardListener::setCodeText(std::string code)
...
@@ -58,14 +68,24 @@ void KeyboardListener::setCodeText(std::string code)
void
KeyboardListener
::
clearCode
()
void
KeyboardListener
::
clearCode
()
{
{
if
(
_QCode
.
size
()
>
0
)
if
(
_QCode
.
size
()
==
1
)
{
{
_sign
=
false
;
qDebug
()
<<
"clearCode hooked string length is:"
<<
_QCode
.
size
()
;
_SimulateKeyboard
(
_QCode
.
at
(
0
));
_forDataStamp
=
0
;
_QCode
.
clear
();
_SimulateKeyboard
(
_QCode
.
at
(
0
));
qDebug
()
<<
"send first data wsa hooked "
;
_QCode
.
clear
();
}
}
_forDataStamp
=
0
;
for
(
int
i
=
0
;
i
<
_numToDistri
.
size
();
i
++
)
{
_sign
=
false
;
qDebug
()
<<
" clearCode num to distribute data is:"
<<
_numToDistri
.
size
()
;
_SimulateKeyboard
(
_numToDistri
.
at
(
i
));
}
_numToDistri
.
clear
();
}
}
bool
KeyboardListener
::
getDataFromSweepGun
(
int
code
,
WPARAM
wprm
,
LPARAM
lprm
)
bool
KeyboardListener
::
getDataFromSweepGun
(
int
code
,
WPARAM
wprm
,
LPARAM
lprm
)
...
@@ -75,32 +95,42 @@ bool KeyboardListener::getDataFromSweepGun(int code, WPARAM wprm, LPARAM lprm)
...
@@ -75,32 +95,42 @@ bool KeyboardListener::getDataFromSweepGun(int code, WPARAM wprm, LPARAM lprm)
if
(
strct
->
vkCode
>=
48
&&
strct
->
vkCode
<=
57
)
if
(
strct
->
vkCode
>=
48
&&
strct
->
vkCode
<=
57
)
{
{
qint64
timestamp
=
QDateTime
::
currentDateTime
().
toMSecsSinceEpoch
();
qint64
timestamp
=
QDateTime
::
currentDateTime
().
toMSecsSinceEpoch
();
if
(
_QCode
.
size
()
==
0
)
{
_timeStamp
=
timestamp
;
_timeStamp
=
timestamp
;
const
QEvent
::
Type
MyEvent
=
QEvent
::
Type
(
NOCODE_EVENT
);
const
QEvent
::
Type
MyEvent
=
QEvent
::
Type
(
NOCODE_EVENT
);
QApplication
::
sendEvent
((
QObject
*
)
up
,
new
QEvent
(
MyEvent
)
);
QApplication
::
sendEvent
((
QObject
*
)
up
,
new
QEvent
(
MyEvent
)
);
// qDebug() <<"keybordlistener send event to clear the hooked data";
qDebug
()
<<
"keybordlistener send event to clear the hooked data"
;
}
if
((
_forDataStamp
==
0
&&
_QCode
.
size
()
==
0
&&
_sign
)
||
timestamp
-
_forDataStamp
<
SWEEPTIME
)
//根据键盘输入时间做判断,输入间隔小于40则认为是扫枪输入的数据
if
(
_forDataStamp
==
0
||
timestamp
-
_forDataStamp
<
SWEEPTIME
)
//根据键盘输入时间做判断,输入间隔小于40则认为是扫枪输入的数据
{
{
_QCode
+=
strct
->
vkCode
;
_QCode
+=
strct
->
vkCode
;
_forDataStamp
=
timestamp
;
_forDataStamp
=
timestamp
;
qDebug
()
<<
" keyboard num hooked ,num is : "
<<
strct
->
vkCode
;
std
::
string
tem
;
tem
+=
strct
->
vkCode
;
// qDebug() << " keyboard num hooked ,num is : "<<QString::fromStdString(tem);
return
true
;
return
true
;
}
}
else
else
{
{
qDebug
()
<<
" keyboard num not hooked ,num is : "
<<
strct
->
vkCode
;
if
(
_sign
)
return
false
;
{
_numToDistri
+=
strct
->
vkCode
;
qDebug
()
<<
" getDataFromSweepGun _sign value"
<<
_sign
;
return
true
;
}
else
{
qDebug
()
<<
"getDataFromSweepGun _sign value"
<<
_sign
;
_sign
=
true
;
_forDataStamp
=
0
;
return
false
;
}
}
}
}
}
else
if
(
strct
->
vkCode
>
=
VK_RETURN
)
else
if
(
strct
->
vkCode
=
=
VK_RETURN
)
{
{
if
(
dealSweepGunReturn
(
code
,
wprm
,
lprm
))
if
(
dealSweepGunReturn
(
code
,
wprm
,
lprm
))
...
@@ -115,7 +145,11 @@ bool KeyboardListener::getDataFromSweepGun(int code, WPARAM wprm, LPARAM lprm)
...
@@ -115,7 +145,11 @@ bool KeyboardListener::getDataFromSweepGun(int code, WPARAM wprm, LPARAM lprm)
}
}
}
}
else
return
false
;
else
{
qDebug
()
<<
"key board data go"
;
return
false
;
}
}
}
bool
KeyboardListener
::
dealSweepGunReturn
(
int
code
,
WPARAM
wprm
,
LPARAM
lprm
)
bool
KeyboardListener
::
dealSweepGunReturn
(
int
code
,
WPARAM
wprm
,
LPARAM
lprm
)
...
@@ -123,10 +157,9 @@ bool KeyboardListener::dealSweepGunReturn(int code, WPARAM wprm, LPARAM lprm)
...
@@ -123,10 +157,9 @@ bool KeyboardListener::dealSweepGunReturn(int code, WPARAM wprm, LPARAM lprm)
KBDLLHOOKSTRUCT
*
strct
=
(
KBDLLHOOKSTRUCT
*
)
lprm
;
KBDLLHOOKSTRUCT
*
strct
=
(
KBDLLHOOKSTRUCT
*
)
lprm
;
strct
->
vkCode
;
strct
->
vkCode
;
qint64
timestamp
=
QDateTime
::
currentDateTime
().
toMSecsSinceEpoch
();
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
)
//拿到的是付款码
if
(
_QCode
.
size
()
>=
CODELENGTH
&&
timestamp
-
_timeStamp
<
TOTALTIME
)
//拿到的是付款码
{
{
qDebug
()
<<
"pay code is:"
<<
QString
::
fromStdString
(
_QCode
);
up
->
setText
(
QString
::
fromStdString
(
_QCode
));
up
->
setText
(
QString
::
fromStdString
(
_QCode
));
const
QEvent
::
Type
MyEvent
=
QEvent
::
Type
(
CODE_EVENT
);
const
QEvent
::
Type
MyEvent
=
QEvent
::
Type
(
CODE_EVENT
);
QApplication
::
sendEvent
((
QObject
*
)
up
,
new
QEvent
(
MyEvent
)
);
QApplication
::
sendEvent
((
QObject
*
)
up
,
new
QEvent
(
MyEvent
)
);
...
@@ -134,16 +167,26 @@ bool KeyboardListener::dealSweepGunReturn(int code, WPARAM wprm, LPARAM lprm)
...
@@ -134,16 +167,26 @@ bool KeyboardListener::dealSweepGunReturn(int code, WPARAM wprm, LPARAM lprm)
_timeStamp
=
0
;
_timeStamp
=
0
;
_forDataStamp
=
0
;
_forDataStamp
=
0
;
_QCode
.
clear
();
_QCode
.
clear
();
_SimulateKeyboard
(
VK_RETURN
);
return
true
;
return
true
;
}
}
else
if
(
_QCode
.
size
()
<
CODELENGTH
&&
timestamp
-
_timeStamp
<
TOTALTIME
)
else
if
(
_QCode
.
size
()
<
CODELENGTH
&&
timestamp
-
_timeStamp
<
TOTALTIME
)
{
{
qDebug
()
<<
"prodect code is:"
<<
QString
::
fromStdString
(
_QCode
);
for
(
int
i
=
0
;
i
<
_QCode
.
size
();
i
++
)
//商品码不可以被拦截
{
_sign
=
false
;
_SimulateKeyboard
(
_QCode
.
at
(
i
));
}
qDebug
()
<<
"prodecut code hooked too"
;
_QCode
.
clear
();
_QCode
.
clear
();
_timeStamp
=
0
;
_timeStamp
=
0
;
_forDataStamp
=
0
;
_forDataStamp
=
0
;
qDebug
()
<<
"prodecut code hooked too"
;
_SimulateKeyboard
(
VK_RETURN
)
;
return
tru
e
;
return
fals
e
;
}
}
else
else
return
false
;
return
false
;
...
...
keyboardlistener.h
View file @
9338109c
...
@@ -11,13 +11,9 @@
...
@@ -11,13 +11,9 @@
const
int
SWEEPTIME
=
4
0
;
const
int
SWEEPTIME
=
3
0
;
const
int
CODELENGTH
=
18
;
const
int
CODELENGTH
=
18
;
const
int
TOTALTIME
=
200
;
const
int
TOTALTIME
=
200
;
//SWEEPTIME 单个code 时间戳差值
//CODELENGTH 付款码最小长度
//TOTALTIME 扫完付款码最大时间戳差值
class
KeyboardListener
:
public
QObject
class
KeyboardListener
:
public
QObject
...
@@ -39,7 +35,9 @@ class KeyboardListener:public QObject
...
@@ -39,7 +35,9 @@ class KeyboardListener:public QObject
std
::
string
getCodeText
();
std
::
string
getCodeText
();
HHOOK
ahook
;
HHOOK
ahook
;
BOOL
destroy
();
BOOL
destroy
();
private
:
static
std
::
string
_QCode
;
static
std
::
string
_QCode
;
static
std
::
string
_numToDistri
;
static
std
::
string
_retCode
;
static
std
::
string
_retCode
;
static
qint64
_timeStamp
;
//记录时间戳,扫码枪数据输入的时间戳会很短
static
qint64
_timeStamp
;
//记录时间戳,扫码枪数据输入的时间戳会很短
static
qint64
_forDataStamp
;
//前一个数据的时间戳
static
qint64
_forDataStamp
;
//前一个数据的时间戳
...
...
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