การแช่แข็งอินพุตของผู้ใช้ด้วย AutoHotKey


5

ในสคริปต์ AutoHotKey ของฉันฉันต้องการตรึงอินพุตของผู้ใช้เช่นอินพุตใด ๆ จากผู้ใช้จะไม่เผยแพร่ไปยังโปรแกรมที่ใช้งานอยู่จากนั้นยกเลิกการตรึงและมีอินพุตทั้งหมดที่ผู้ใช้พิมพ์ไปที่โปรแกรม

กล่าวอีกนัยหนึ่ง: ฉันค้างแล้วผู้ใช้พิมพ์ "xyz" แต่นี่คือ ไม่ ส่งผ่านไปยังโปรแกรมที่ใช้งานอยู่จากนั้นฉันยกเลิกการตรึงการกดแป้น "xyz" ถูกส่งผ่านไปยังโปรแกรมแล้วทุกอย่างกลับสู่ปกติและผู้ใช้สามารถพิมพ์อีกครั้งและมันจะไปที่โปรแกรมที่ใช้งานอยู่

นี่คือขณะที่ฉันป้อนข้อความจำนวนมากในโปรแกรมโดยใช้ ControlSendการพิมพ์ของผู้ใช้จะไม่รบกวน

ไปได้หรือไม่ อย่างไร?


ฉันเดาว่าฉันควรถามคุณส่งข้อความทั้งหมดของคุณด้วย SendInput หนึ่งอันหรือคุณต้องการหยุด (เปิดบัฟเฟอร์การป้อนข้อมูลผู้ใช้) ทำการคำนวณหลายครั้งหรือวนซ้ำกับ SendInputs แล้วยกเลิกการตรึง (ทิ้งบัฟเฟอร์อินพุตผู้ใช้ )?
Bavi_H

หากเป็นไปได้ที่จะหยุดทำสิ่งต่าง ๆ แล้วทำน้ำแข็งให้ละลายที่จะเหมาะ
Ram Rachum

คำตอบ:


1

หากคุณสามารถส่งข้อความทั้งหมดของคุณโดยใช้หนึ่ง SendInput AutoHotkey จะดูแลปัญหาให้คุณ จาก AutoHotkey ส่ง เอกสาร

SendInput และ SendPlay [... ] บัฟเฟอร์แป้นพิมพ์หรือกิจกรรมเมาส์ในระหว่างการส่งซึ่งป้องกันการกดแป้นของผู้ใช้ไม่ให้สลับกับการส่ง

หากยอมรับให้สูญเสียการป้อนข้อมูลของผู้ใช้ขณะที่ถูกตรึง (แทนที่จะเป็นบัฟเฟอร์และส่งหลังจากนั้น) คุณสามารถใช้ BlockInput . สิ่งที่ต้องการ

BlockInput On
; Send desired text here
BlockInput Off

อย่างไรก็ตามเอกสาร BlockInput บอกว่าถ้ามันเริ่มต้นเมื่อคีย์ถูกลงแล้วมันสามารถบล็อกเหตุการณ์ "คีย์ขึ้น" และทำให้คีย์ปรากฏค้าง ดังนั้นขึ้นอยู่กับว่าคุณใช้มันเมื่อใดคุณอาจต้องรอคีย์ที่จะใช้งานก่อน KeyWait .


แต่ฉันกำลังใช้ ControlSendเพราะฉันกำลังส่งถึงตัวควบคุมที่เฉพาะเจาะจง ...
Ram Rachum

ตกลง. ลองอัปเดตคำถามของคุณเพื่อให้ผู้ตอบคำถามอื่นเข้าใจภาพรวม
Bavi_H

คำตอบที่แก้ไข: BlockInput อาจเป็นประโยชน์
Bavi_H

Nah, BlockInput ไม่ได้ช่วยฉัน
Ram Rachum

-2

ใช้คำสั่งอินพุต

http://autohotkey.free.fr/docs/commands/Input.htm

แก้ไข

คุณพูดว่า:

ในสคริปต์ AutoHotKey ของฉันฉันต้องการตรึงอินพุตของผู้ใช้เช่นอินพุตใด ๆ   จากผู้ใช้จะไม่เผยแพร่ไปยังโปรแกรมที่ใช้งานอยู่และจากนั้น   ยกเลิกการตรึงและมีอินพุตทั้งหมดที่ผู้ใช้พิมพ์ไปที่โปรแกรม

กล่าวอีกนัยหนึ่ง: ฉันค้างแล้วผู้ใช้พิมพ์ "xyz" แต่นี่ไม่ใช่   ผ่านไปยังโปรแกรมที่ใช้งานอยู่จากนั้นฉันยกเลิกการตรึงข้อความการกดแป้น "xyz"   ถูกส่งผ่านไปยังโปรแกรมแล้วทุกอย่างกลับสู่ปกติและ   ผู้ใช้สามารถพิมพ์อีกครั้งและไปที่โปรแกรมที่ใช้งานอยู่

คำสั่งอินพุตทำ:

; รอให้ผู้ใช้กดปุ่มใด ๆ กุญแจที่ไม่ปรากฏให้เห็น   ตัวอักษรเชนปุมตัวดัดแปลงปุมฟงกชันและปุมลูกศร   ถูกระบุว่าเป็นปุ่มวางสาย   ดังนั้นพวกเขาจะถูกตรวจพบเช่นกัน

Input, SingleKey, L1, {LControl}{RControl}{LAlt}{RAlt}{LShift}{RShift}{LWin}{RWin}{F1}{F2}{F3}{F4}{F5}{F6}{F7}{F8}{F9}{F10}{F11}{F12}{Left}{Right}{Up}{Down}{Home}{End}{PgUp}{PgDn}{Del}{Ins}{BS}{Capslock}{Numlock}{PrintScreen}{Pause}

คุณสามารถวนลูปนี้สำหรับหลาย ๆ คีย์หรือใช้สตริงของคีย์เป็นอาร์กิวเมนต์


ฉันไม่เข้าใจเลยว่ามันจะมีประโยชน์อย่างไร
Ram Rachum

ให้ฉันอ้างอิงเอกสาร
surfasb

ดูเหมือนว่ามีวัตถุประสงค์เพื่อรับข้อมูลจากผู้ใช้ ฉันไม่ต้องการรับข้อมูลจากผู้ใช้ ในความเป็นจริงมันก็โอเคถ้าผู้ใช้ไม่ได้ให้ข้อมูลใด ๆ แต่ถ้าเขาทำฉันต้องการบัฟเฟอร์มันและเอาท์พุทมันในภายหลังหลังจากที่ฉันเสร็จสิ้นการส่งอินพุตของฉันเอง SendInput. ฉันไม่รู้ว่าฉันจะใช้งานสิ่งนั้นได้อย่างไร Input.
Ram Rachum
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.