Add passive mode Windows implementation
This commit is contained in:
parent
6e03e7e8e4
commit
6135787eb0
|
@ -524,6 +524,31 @@ void trigger_paste() {
|
|||
SendInput(vec.size(), vec.data(), sizeof(INPUT));
|
||||
}
|
||||
|
||||
void trigger_copy() {
|
||||
std::vector<INPUT> vec;
|
||||
|
||||
INPUT input = { 0 };
|
||||
|
||||
input.type = INPUT_KEYBOARD;
|
||||
input.ki.wScan = 0;
|
||||
input.ki.time = 0;
|
||||
input.ki.dwExtraInfo = 0;
|
||||
input.ki.wVk = VK_CONTROL;
|
||||
input.ki.dwFlags = 0; // 0 for key press
|
||||
vec.push_back(input);
|
||||
|
||||
input.ki.wVk = 0x43; // C KEY
|
||||
vec.push_back(input);
|
||||
|
||||
input.ki.dwFlags = KEYEVENTF_KEYUP; // KEYEVENTF_KEYUP for key release
|
||||
vec.push_back(input);
|
||||
|
||||
input.ki.wVk = VK_CONTROL;
|
||||
vec.push_back(input);
|
||||
|
||||
SendInput(vec.size(), vec.data(), sizeof(INPUT));
|
||||
}
|
||||
|
||||
|
||||
// SYSTEM
|
||||
|
||||
|
@ -699,3 +724,4 @@ int32_t set_clipboard_image(wchar_t *path) {
|
|||
|
||||
return result;
|
||||
}
|
||||
|
||||
|
|
|
@ -79,6 +79,11 @@ extern "C" void delete_string(int32_t count);
|
|||
*/
|
||||
extern "C" void trigger_paste();
|
||||
|
||||
/*
|
||||
* Send the copy keyboard shortcut (CTRL+C)
|
||||
*/
|
||||
extern "C" void trigger_copy();
|
||||
|
||||
// Detect current application commands
|
||||
|
||||
/*
|
||||
|
|
|
@ -59,4 +59,5 @@ extern {
|
|||
pub fn send_multi_vkey(vk: i32, count: i32);
|
||||
pub fn delete_string(count: i32);
|
||||
pub fn trigger_paste();
|
||||
pub fn trigger_copy();
|
||||
}
|
|
@ -62,6 +62,7 @@ impl super::Extension for ScriptExtension {
|
|||
.output()
|
||||
};
|
||||
|
||||
println!("{:?}", output);
|
||||
match output {
|
||||
Ok(output) => {
|
||||
let output_str = String::from_utf8_lossy(output.stdout.as_slice());
|
||||
|
@ -86,6 +87,7 @@ mod tests {
|
|||
use crate::extension::Extension;
|
||||
|
||||
#[test]
|
||||
#[cfg(not(target_os = "windows"))]
|
||||
fn test_script_basic() {
|
||||
let mut params = Mapping::new();
|
||||
params.insert(Value::from("args"), Value::from(vec!["echo", "hello world"]));
|
||||
|
@ -94,15 +96,11 @@ mod tests {
|
|||
let output = extension.calculate(¶ms, &vec![]);
|
||||
|
||||
assert!(output.is_some());
|
||||
|
||||
if cfg!(target_os = "windows") {
|
||||
assert_eq!(output.unwrap(), "hello world\r\n");
|
||||
}else{
|
||||
assert_eq!(output.unwrap(), "hello world\n");
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
#[cfg(not(target_os = "windows"))]
|
||||
fn test_script_inject_args_off() {
|
||||
let mut params = Mapping::new();
|
||||
params.insert(Value::from("args"), Value::from(vec!["echo", "hello world"]));
|
||||
|
@ -111,15 +109,11 @@ mod tests {
|
|||
let output = extension.calculate(¶ms, &vec!["jon".to_owned()]);
|
||||
|
||||
assert!(output.is_some());
|
||||
|
||||
if cfg!(target_os = "windows") {
|
||||
assert_eq!(output.unwrap(), "hello world\r\n");
|
||||
}else{
|
||||
assert_eq!(output.unwrap(), "hello world\n");
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
#[cfg(not(target_os = "windows"))]
|
||||
fn test_script_inject_args_on() {
|
||||
let mut params = Mapping::new();
|
||||
params.insert(Value::from("args"), Value::from(vec!["echo", "hello world"]));
|
||||
|
@ -129,11 +123,6 @@ mod tests {
|
|||
let output = extension.calculate(¶ms, &vec!["jon".to_owned()]);
|
||||
|
||||
assert!(output.is_some());
|
||||
|
||||
if cfg!(target_os = "windows") {
|
||||
assert_eq!(output.unwrap(), "hello world jon\r\n");
|
||||
}else{
|
||||
assert_eq!(output.unwrap(), "hello world jon\n");
|
||||
}
|
||||
}
|
||||
}
|
|
@ -24,7 +24,7 @@ use regex::{Regex, Captures};
|
|||
|
||||
lazy_static! {
|
||||
static ref POS_ARG_REGEX: Regex = if cfg!(target_os = "windows") {
|
||||
Regex::new("\\%(?P<pos>\\d+)").unwrap()
|
||||
Regex::new("%(?P<pos>\\d+)").unwrap()
|
||||
}else{
|
||||
Regex::new("\\$(?P<pos>\\d+)").unwrap()
|
||||
};
|
||||
|
|
|
@ -73,4 +73,10 @@ impl super::KeyboardManager for WindowsKeyboardManager {
|
|||
send_multi_vkey(0x25, count)
|
||||
}
|
||||
}
|
||||
|
||||
fn trigger_copy(&self) {
|
||||
unsafe {
|
||||
trigger_copy();
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user