UFO
述:
1.問題描述: windos系統(tǒng)輸入框輸入時(shí)禁用鼠標(biāo)點(diǎn)擊事件榕莺,輸入完成后1s左右恢復(fù)點(diǎn)擊事件晒屎,僅禁止點(diǎn)擊不影響鼠標(biāo)其他事件
1. 1 問題出現(xiàn)的環(huán)境:虛擬機(jī)的win10系統(tǒng)
1. 2 問題出現(xiàn)過程: 某天,編輯input時(shí)蕴轨,發(fā)現(xiàn)當(dāng)input輸入字(不管中英文)后坐桩,再點(diǎn)擊其他元素會(huì)發(fā)現(xiàn)并不會(huì)觸發(fā)失焦事件,一般是雙擊才會(huì)觸發(fā)绵跷,一開始是以為什么設(shè)置導(dǎo)致了雙擊,結(jié)果去掉所有事件綁定都是如此荆残,空白頁面僅添加input元素也是如此净当,以及試了一堆其他的網(wǎng)站的input元素均是這樣,搞了很久都沒反應(yīng)過來像啼,再次慢慢觀察,發(fā)現(xiàn)輸入后真朗,快速點(diǎn)擊是沒法使得input觸發(fā)失焦事件的僧诚,然后以為是做了什么延遲觸發(fā),但是沒道理空白頁面也有這些設(shè)置湖笨,然后沒頭腦去試了下系統(tǒng)自帶的input輸入框,奶奶的熊臀防,竟然和頁面元素一個(gè)熊樣,還以為是自己寫了什么牛皮的東西自動(dòng)實(shí)現(xiàn)了延遲觸發(fā)琼锋,結(jié)果是系統(tǒng)祟昭,但是宿主機(jī)沒這個(gè)問題怖侦,再試了linux桌面版的,也沒這個(gè)問題匾寝,暫時(shí)沒其他版本的windos,僅在此記錄急凰,非解決問題猜年,其實(shí)有點(diǎn)像輸入信息后,攔截了點(diǎn)擊事件乔外,其他事件正常,等待一會(huì)就恢復(fù)接收點(diǎn)擊事件撇簿,能直接反映出這個(gè)問題就是差购,當(dāng)你不斷的輸入文字時(shí),點(diǎn)擊其他元素或者窗口欲逃,是完全沒反應(yīng)的,整個(gè)系統(tǒng)的點(diǎn)擊事件完全給吞沒掉暖夭,但是其他事件卻是可以觸發(fā)的,比如你移動(dòng)到某一元素竭望,其相關(guān)的hover事件是能接收到的裕菠,畢竟現(xiàn)在得到的信息來看,均指向了windos系統(tǒng),那么windos對(duì)于鼠標(biāo)點(diǎn)擊也是有事件的影钉,這不禁讓我想起以前做的windos窗口掘剪,那么是否存在了一些程序再輸入框時(shí)采取了禁用鼠標(biāo)單擊事件,然后在輸入后延遲到一定時(shí)間在開放鼠標(biāo)單擊事件夺谁,下一步的調(diào)查方向就在于哪些程序監(jiān)控了input的輸入而增加了這個(gè)的設(shè)置匾鸥,要是網(wǎng)頁的那還好找,windos的還得啃一段指令勿负,搜索網(wǎng)上如何在Windows上防止鼠標(biāo)單擊事件找到了一段,但是僅是說明了可能的調(diào)用方式琅摩,但是并沒揪出相關(guān)監(jiān)控程序的方法躁劣,原文如下:
A [low-level mouse hook](https://docs.microsoft.com/en-us/previous-versions/windows/desktop/legacy/ms644986(v=vs.85)) can eat mouse events. [`SendInput`](https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-sendinput) can generate mouse input events.
You would have to set a flag somewhere so you don't eat your own fake input events.
Keep in mind that `SendInput` is not perfect (can be detected by other hooks) and playing with the input system like this is usually not the best solution. Adding 500ms (or some other delay) to every mouse click is going to be very annoying for your users.
It is better to use [UI Automation](https://docs.microsoft.com/en-us/windows/win32/winauto/entry-uiauto-win32) to get information about UI element states in other applications...