explorer的搜索框中右键-粘贴 解析

UINT SendInput(  UINT nInputs,   LPINPUT pInputs,   int cbSize ); 

 

函数说明:

该函数合成键盘事件和鼠标事件,用来模拟鼠标或者键盘操作。事件将被插入在鼠标或者键盘处理队列里面。

 

参数说明:

nInputs 指定ninput 数组中元素的个数。就是插入事件的个数。

pInputs 指向一个类型为INPUT的 数组变量,该数组中的每个元素代表一个将要插入到线程事件中去的键盘或鼠标事件。

cbSize 指定INPUT结构的大小。如果cbSize不是INPUT结构的大小,则函数将失败返回

 

搜索框

Hook了Explorer的进程的SendInput,然后在文件的搜索框中执行右键-粘贴,通过打印log看到

00000004    36.62250900    [4492] keyboard message::wVk=0x0011,wScan=0x0000,dwFlags=0x00000000    
00000005    36.62262726    [4492] keyboard message::wVk=0x0056,wScan=0x0000,dwFlags=0x00000000    
00000006    36.62281036    [4492] keyboard message::wVk=0x0056,wScan=0x0000,dwFlags=0x00000002    
00000007    36.62294769    [4492] keyboard message::wVk=0x0011,wScan=0x0000,dwFlags=0x00000002    

 

dwFlags 0 代表 DOWN

dwFlags  2  代表UP

键盘虚拟码wVK对应的键盘

虚拟键盘代码16进制值对应键
VK_LBUTTON0x01鼠标左键
VK_RBUTTON0x02鼠标右键
VK_CANCEL0x03用于执行Ctrl+C或Ctrl+Break
VK_MBUTTON0x04鼠标中键
VK_XBUTTON10x05NOT contiguous with L & RBUTTON
VK_XBUTTON20x06NOT contiguous with L & RBUTTON
NUL0x07unassigned
VK_BACK0x08Backspace键
VK_TAB0x09Tab键
NUL0x0Areserved
NUL0x0Breserved
VK_CLEAR0x0CClear键
VK_RETURN0x0DEnter键
VK_SHIFT0x10Shift键
VK_CONTROL0x11Ctrl键
VK_MENU0x12Arl键
VK_PAUSE0x13Pause键
VK_CAPITAL0x14Capslock键
VK_KANA0x15 
VK_HANGEUL0x15old name - should be here for compatibility
VK_HANGUL0x15 
VK_ESCAPE0x1BEse键
VK_SPACE0x20SpaceBar键
VK_PRIOR0x21PgUp键
VK_NEXT0x22PgDn键
VK_END0x23End键
VK_HOME0x24Home键
VK_LEFT0x25LeftArrow键左
VK_UP0x26UpArrow键上
VK_RIGHT0x27RightArrow键右
VK_DOWN0x28DownArrow键下
VK_SELECT0x29Select键
VK_EXECUTE0x2BExecute键
VK_SNAPSHOT0x2CPrintScreen键
VK_INSERT0x2DIns键
VK_DELECT0x2EDel键
VK_HELP0x2FHelp键
VK_00x300键
VK_10x311键
VK_20x322键
VK_30x333键
VK_40x344键
VK_50x355键
VK_60x366键
VK_70x377键
VK_80x388键
VK_90x399键
NUL0x40unassigned
VK_A0x41A键
VK_B0x42B键
VK_C0x43C键
VK_D0x44D键
VK_E0x45E键
VK_F0x46F键
VK_G0x47G键
VK_H0x48H键
VK_I0x49I键
VK_J0x4AJ键
VK_K0x4BK键
VK_L0x4CL键
VK_M0x4DM键
VK_N0x4EN键
VK_O0x4FO键
VK_P0x50P键
VK_Q0x51Q键
VK_R0x52R键
VK_S0x53S键
VK_T0x54T键
VK_U0x55U键
VK_V0x56V键
VK_W0x57W键
VK_X0x58X键
VK_Y0x59Y键
VK_Z0x5AZ键
VK_LWIN0x5B左Win键
VK_RWIN0x5C右Win键
VK_APPS0x5D 
NUL0x5Ereserved
VK_NUMAPD00x60数字板0键
VK_NUMAPD10x61数字板1键
VK_NUMAPD20x62数字板2键
VK_NUMAPD30x63数字板3键
VK_NUMAPD40x64数字板4键
VK_NUMAPD50x65数字板5键
VK_NUMAPD60x66数字板6键
VK_NUMAPD70x67数字板7键
VK_NUMAPD80x68数字板8键
VK_NUMAPD90x69数字板9键
VK_MULTIPY0x6A乘号键
VK_ADD0x6B加号键
VK_SEPARATOR0x6CSeparator键
VK_SUBSTRACT0x6D减号键
VK_DECIMAL0x6E小数点键
VK_DIVIDE0x6F除号键
VK_F10x70F1键
VK_F20x71F2键
VK_F30x72F3键
VK_F40x73F4键
VK_F50x74F5键
VK_F60x75F6键
VK_F70x76F7键
VK_F80x77F8键
VK_F90x78F9键
VK_F100x79F10键
VK_F110x7AF11键
VK_F120x7BF12键
VK_F130x7CF13键
VK_F140x7DF14键
VK_F150x7EF15键
VK_F160x7FF16键
VK_F170x80F17键
VK_F180x81F18键
VK_F190x82F19键
VK_F200x83F20键
VK_F210x84F21键
VK_F220x85F22键
VK_F230x86F23键
VK_F240x87F24键
NUL0x88reserved
NUL0x89reserved
NUL0x8Aunassigned
NUL0x8Bunassigned
NUL0x8Cunassigned
NUL0x8Dunassigned
NUL0x8Eunassigned
NUL0x8Funassigned
VK_NUMLOCK0x90NumLock键
VK_SCROLL0x91ScrollLock键
VK_OEM_NEC_EQUAL0x92NEC PC-9800 kbd definitions,key on numpad
VK_OEM_FJ_JISHO0x92Fujitsu/OASYS kbd definitions,Dictionary' key
VK_OEM_FJ_MASSHOU0x93Unregister word key
VK_OEM_FJ_TOUROKU0x94Register word key
VK_OEM_FJ_LOYA0x95Left OYAYUBI key
VK_OEM_FJ_ROYA0x96Right OYAYUBI key
NUL0x97unassigned
NUL0x98unassigned
NUL0x99unassigned
NUL0x9Aunassigned
NUL0x9Bunassigned
NUL0x9Cunassigned
NUL0x9Dunassigned
NUL0x9Eunassigned
NUL0x9Funassigned
VK_LSHIFT0xA0 
VK_LSHIFT0xA0 
VK_RSHIFT0xA1 
VK_LCONTROL0xA2 
VK_RCONTROL0xA3 
VK_LMENU0xA4 
VK_RMENU0xA5 
VK_BROWSER_BACK0xA6 
VK_BROWSER_FORWARD0xA7 
VK_BROWSER_REFRESH0xA8 
VK_BROWSER_STOP0xA9 
VK_BROWSER_SEARCH0xAA 
VK_BROWSER_FAVORITES0xAB 
VK_BROWSER_HOME0xAC 
VK_VOLUME_MUTE0xAD 
VK_VOLUME_DOWN0xAE 
VK_VOLUME_UP0xAF 
VK_MEDIA_NEXT_TRACK0xB0 
VK_MEDIA_PREV_TRACK0xB1 
VK_MEDIA_STOP0xB2 
VK_MEDIA_PLAY_PAUSE0xB3 
VK_LAUNCH_MAIL0xB4 
VK_LAUNCH_MEDIA_SELECT0xB5 
VK_LAUNCH_APP10xB6 
VK_LAUNCH_APP20xB7 
NUL0xB8reserved
NUL0xB9reserved
VK_OEM_10xBAFor US
VK_OEM_PLUS0xBBAny country
VK_OEM_COMMA0xBCAny country
VK_OEM_MINUS0xBDAny country
VK_OEM_PERIOD0xBEAny country
VK_OEM_20xBFFor US
VK_OEM_30xC0For US
NUL0xC1reserved
NUL0xC2reserved
NUL0xC3reserved
NUL0xC4reserved
NUL0xC5reserved
NUL0xC6reserved
NUL0xC7reserved
NUL0xC8reserved
NUL0xC9reserved
NUL0xCAreserved
NUL0xCBreserved
NUL0xCCreserved
NUL0xCDreserved
NUL0xCEreserved
NUL0xCFreserved
NUL0xD0reserved
NUL0xD1reserved
NUL0xD2reserved
NUL0xD3reserved
NUL0xD4reserved
NUL0xD5reserved
NUL0xD6reserved
NUL0xD7reserved
NUL0xD8unassigned
NUL0xD9unassigned
NUL0xDAunassigned
VK_OEM_40xDBfor US
VK_OEM_50xDCfor US
VK_OEM_60xDDfor US
VK_OEM_70xDEfor US
VK_OEM_80xDF 
NUL0xE0reserved
VK_OEM_AX0xE1key on Japanese AX kbd
VK_OEM_1020xE2on RT 102-key kbd.
VK_ICO_HELP0xE3Help key on ICO
VK_ICO_000xE400 key on ICO
VK_OEM_80xDF 
VK_PROCESSKEY0xE5 
VK_ICO_CLEAR0xE6 
VK_PACKET0xE7 
NUL0xE8unassigned
VK_OEM_RESET0xE9 
VK_OEM_JUMP0xEA 
VK_OEM_PA10xEB 
VK_OEM_PA20xEC 
VK_OEM_PA30xED 
VK_OEM_WSCTRL0xEE 
VK_OEM_CUSEL0xEF 
VK_OEM_ATTN0xF0 
VK_OEM_FINISH0xF1 
VK_OEM_COPY0xF2 
VK_OEM_AUTO0xF3 
VK_OEM_ENLW0xF4 
VK_OEM_BACKTAB0xF5 
VK_ATTN0xF6 
VK_CRSEL0xF7 
VK_EXSEL0xF8 
VK_EREOF0xF9 
VK_PLAY0xFA 
VK_ZOOM0xFB 
VK_NONAME0xFC 
VK_PA10xFD 
VK_OEM_CLEAR0xFE 
NUL0xFFreserved

翻译一下log的意思是

按下Contorl ---- 按下V-----抬起V----抬起Control。 完全模拟了一次粘贴的操作。

 

其中log代码


UINT WINAPI HOOK_SendInput(
	UINT nInputs,
	LPINPUT pInputs,
	int cbSize)
{

	for (size_t i = 0; i < nInputs; i++)
	{
		if (pInputs[i].type == INPUT_KEYBOARD)
		{
			CString stroutput;
			stroutput.Format(L"keyboard message::wVk=0x%04x,wScan=0x%04x,dwFlags=0x%08x\n", pInputs[i].ki.wVk, pInputs[i].ki.wScan, pInputs[i].ki.dwFlags);
			OutputDebugString(stroutput.GetBuffer());

		}
		else if (pInputs[i].type == INPUT_MOUSE)
		{
			OutputDebugString(L"mouse message\n");
		}

	}



	return REAL_SendInput(nInputs, pInputs, cbSize);

}

 

往哪个窗体发我们可以获得

    DWORD dwProcessId = 0;
    HWND hwnd = GetForegroundWindow();
    if (hwnd)
    {
        GetWindowThreadProcessId(hwnd, &dwProcessId);

    }

 

最后贴几个网址

SendInput模拟鼠标

https://blog.csdn.net/u012372584/article/details/53839929

模拟键盘

https://blog.csdn.net/pkgk2013/article/details/78242024

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值