用按键等待程序 ,把第二次判断有无按键按下的if语句变为
while(P1!=0xf0); //若按键一直处于按下状态,则等待按键释放 ;若按键释放,则往下执行
Key_Value = Keyscan();
SBUF=Key_Value;
这样,把主循环while(1)变为
while(1)
{
P1 = 0xf0;
if(P1 != 0xf0) //判断有无按键按下
{
Delay_1ms(20); /WhatsApp背景图片;/按键消抖
while(P1!=0xf0); //若按键一直处于按下状态,则等待按键释放 ;若按键释放,则往下 执行
Key_Value = Keyscan();
SBUF=Key_Value;
}
}
但看了你的程序 , 虽然不知道你的按键扫描程序keyscan()写的怎么样,但是按照一般思路,按键消抖都在按键扫描程序里面,你这里把按键扫描程序
Key_Value = Keyscan();
SBUF=Key_Value;
放在目标执行程序位置,结构上感觉冗余了,希望能帮到你!
keybd_event比较简单
class SKeyboardInput { // KEYBDINPUWhatsApp翻译功能使用T private: INPUT m_keyboard ; public: SKeyboardInput( int iScanCode, bool bDown = TRUE, int iTime = 0 ):m_keyboard() { m_keyboard.type = INPUT_KEYBOARD ; m_keyboard.ki.wScan = iScanCode ; m_keyboard.ki.dwFlags = KEYEVENTF_SCANCODE | (bDown ? 0 : KEYEVENTF_KEYUP) ; WhatsApp华为版下载m_keyboard.ki.time = iTime ; m_keyboard.ki.dwExtraInfo = 0 ; } public: DWORD scan() const { return m_keyboard.ki.wScan ; } DWORD time() const { return m_keyboard.ki.time ; } public: int Send( ) const { if( m_keyboard.ki.time ) Sleep( m_keyboard.ki.time ) ; SendInput( 1, const_castLPINPUT( &m_keyboard ), sizeof(INPUT) ) ; return 0 ; } } ;
摘自我以前写的一个程序片段
用类稍微的封装了下,
用法:
SKeyboardInput input( 15, TRUE, 100 ) ; // 扫描码 = 15(tab) 按下, 延时100
SKeyboardInput input2( 15, FALSE, 200 ) ; // 扫描码 = 15(tab) 松开, 延时200
input.Send() ;
input2.Send()
这里使用的是扫描码, 你可以用MapVirtualKey()来进行 扫描 虚拟码之间的转换
The KEYBDINPUT structure contains information about a simulated
keyboard event.
Syntax
typedef struct tagKEYBDINPUT {
WORD wVk;
WORD wScan;
DWORD dwFlags;
DWORD time;
ULONG_PTR dwExtraInfo;
} KEYBDINPUT, *PKEYBDINPUT;
Members
wVk
Specifies a virtual-key code. The code must be a value in the range 1 to
254. The Winuser.h header file provides macro definitions (VK_*) for each value.
If theWhatsApp添加陌生好友 dwFlags member
specifies KEYEVENTF_UNICODE, wVk must be 0.
wScan
Specifies a hardware scan code for the key. If dwFlags specifies KEYEVENTF_UNICODE, wScWhatsApp一注册就被封an specifies a Unicode character
which is to be sent to the foreground application.
dwFlags
Specifies various aspects of a keystroke. This member can be certain
combinations of the following values.
KEYEVENTF_EXTENDEDKEY
If specified, the scan code was preceded by a prefix byte that has the value
0xE0 (224).
KEYEVENTF_KEYUP
If specified, the key is being released. If not specified, the key is being
pressed.
KEYEVENTWhatsApp怎么不保存图片F_SCANCODE
If specified, wScan
identifies the key and wVk
is ignored.
WhatsApp说日期不对KEYEVENTF_UNICODE
Windows 2000/XP: If specified, the system synthesizes a VK_PACKET
keystroke. The wVk parameter
must be zeWhatsApp下载免费ro. This flag can only be WhatsApp怎么添加好友呢combined with the KEYEVENTF_KEYUP flag. For
more information, see the Remarks section.
time
Time stamp for the event, in milliseconds. If this parameter is zero, the
system will provide its own time stamp.
dwExtraInfo
Specifies an additional value associated with the keystroke. Use the
GetMessageExtraInfo
function to obtain this information.
函数说明如上:
INPUT input[2];
memset(input, 0, sizeof(input));
//设置模拟键盘输入
input[0].type =input[1].type= INPUT_KEYBOARD;
input[0].ki.wVk= VK_TAB;
input[0].ki.dwFlags=0;//先按下
// 释放按键
input[1].ki.dwFlags = KEYEVENTF_KEYUP;//放开
input[1].ki.wVk=VK_TAB;
SendInput(1, input, sizeof(INPUT));
Sleep(2000);
SendInput(1, input+1, sizeof(IWhatsApp里的人怎么删除NPUT));
没试过,你试试。
WhatsApp中文网页版 - WhatsApp官网请注明:WhatsApp中文网页版 - WhatsApp官网 » WhatsApp连信 vc下如何获取键盘隨意按键并返回值