Add option to delay backspace presses on Windows. See #246
This commit is contained in:
parent
70260aa0b7
commit
e29e5b755e
|
@ -495,8 +495,12 @@ void send_string(const wchar_t * string) {
|
|||
/*
|
||||
* Send the backspace keypress, *count* times.
|
||||
*/
|
||||
void delete_string(int32_t count) {
|
||||
void delete_string(int32_t count, int32_t delay) {
|
||||
if (delay != 0) {
|
||||
send_multi_vkey_with_delay(VK_BACK, count, delay);
|
||||
}else{
|
||||
send_multi_vkey(VK_BACK, count);
|
||||
}
|
||||
}
|
||||
|
||||
void send_vkey(int32_t vk) {
|
||||
|
@ -539,6 +543,27 @@ void send_multi_vkey(int32_t vk, int32_t count) {
|
|||
SendInput(vec.size(), vec.data(), sizeof(INPUT));
|
||||
}
|
||||
|
||||
void send_multi_vkey_with_delay(int32_t vk, int32_t count, int32_t delay) {
|
||||
for (int i = 0; i < count; i++) {
|
||||
INPUT input = { 0 };
|
||||
|
||||
input.type = INPUT_KEYBOARD;
|
||||
input.ki.wScan = 0;
|
||||
input.ki.time = 0;
|
||||
input.ki.dwExtraInfo = 0;
|
||||
input.ki.wVk = vk;
|
||||
input.ki.dwFlags = 0; // 0 for key press
|
||||
SendInput(1, &input, sizeof(INPUT));
|
||||
|
||||
Sleep(delay);
|
||||
|
||||
input.ki.dwFlags = KEYEVENTF_KEYUP; // KEYEVENTF_KEYUP for key release
|
||||
SendInput(1, &input, sizeof(INPUT));
|
||||
|
||||
Sleep(delay);
|
||||
}
|
||||
}
|
||||
|
||||
void trigger_paste() {
|
||||
std::vector<INPUT> vec;
|
||||
|
||||
|
|
|
@ -72,10 +72,15 @@ extern "C" void send_vkey(int32_t vk);
|
|||
*/
|
||||
extern "C" void send_multi_vkey(int32_t vk, int32_t count);
|
||||
|
||||
/*
|
||||
* Send the given Virtual Key press multiple times adding a delay between each keypress
|
||||
*/
|
||||
extern "C" void send_multi_vkey_with_delay(int32_t vk, int32_t count, int32_t delay);
|
||||
|
||||
/*
|
||||
* Send the backspace keypress, *count* times.
|
||||
*/
|
||||
extern "C" void delete_string(int32_t count);
|
||||
extern "C" void delete_string(int32_t count, int32_t delay);
|
||||
|
||||
/*
|
||||
* Send the Paste keyboard shortcut (CTRL+V)
|
||||
|
|
|
@ -57,7 +57,7 @@ extern {
|
|||
pub fn send_string(string: *const u16);
|
||||
pub fn send_vkey(vk: i32);
|
||||
pub fn send_multi_vkey(vk: i32, count: i32);
|
||||
pub fn delete_string(count: i32);
|
||||
pub fn delete_string(count: i32, delay: i32);
|
||||
pub fn trigger_paste();
|
||||
pub fn trigger_copy();
|
||||
}
|
|
@ -62,6 +62,7 @@ fn default_passive_key() -> KeyModifier { KeyModifier::OFF }
|
|||
fn default_enable_passive() -> bool { false }
|
||||
fn default_enable_active() -> bool { true }
|
||||
fn default_backspace_limit() -> i32 { 3 }
|
||||
fn default_backspace_delay() -> i32 { 0 }
|
||||
fn default_restore_clipboard_delay() -> i32 { 300 }
|
||||
fn default_exclude_default_entries() -> bool {false}
|
||||
fn default_secure_input_watcher_enabled() -> bool {true}
|
||||
|
@ -168,6 +169,9 @@ pub struct Configs {
|
|||
#[serde(default = "default_fast_inject")]
|
||||
pub fast_inject: bool,
|
||||
|
||||
#[serde(default = "default_backspace_delay")]
|
||||
pub backspace_delay: i32,
|
||||
|
||||
#[serde(default = "default_matches")]
|
||||
pub matches: Vec<Match>,
|
||||
|
||||
|
|
|
@ -62,9 +62,9 @@ impl super::KeyboardManager for WindowsKeyboardManager {
|
|||
}
|
||||
}
|
||||
|
||||
fn delete_string(&self, _: &Configs, count: i32) {
|
||||
fn delete_string(&self, config: &Configs, count: i32) {
|
||||
unsafe {
|
||||
delete_string(count)
|
||||
delete_string(count, config.backspace_delay)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user