feat: unicode clip text send
This commit is contained in:
parent
9827b00c3c
commit
9d3a75593b
@ -53,6 +53,7 @@ features = [
|
||||
"FileReader",
|
||||
"HtmlButtonElement",
|
||||
"HtmlCanvasElement",
|
||||
"HtmlTextAreaElement",
|
||||
"ImageData",
|
||||
"Location",
|
||||
"KeyboardEvent",
|
||||
|
@ -88,8 +88,8 @@
|
||||
<button id="clipboardbtn">«</button>
|
||||
<div id="clipboardbox" class="horizontal-centre vertical-centre">
|
||||
<div style="position: relative; top: 50%; transform: translateY(-50%);">
|
||||
<div><textarea id="clipboardtxt" placeholder="页面剪贴板内容" rows="15"></textarea></div>
|
||||
<div><button id="clipboardsend">发送页面剪贴板内容</button></div>
|
||||
<div><textarea id="clipboardtxt" placeholder="发送文本内容" rows="12"></textarea></div>
|
||||
<div><button id="clipboardsend">发送文本内容</button></div>
|
||||
<div><button type="button" id="ctrlaltdel">发送 Ctrl+Alt+Del</button></div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -102,64 +102,6 @@ impl Canvas {
|
||||
.unwrap();
|
||||
cb.forget();
|
||||
|
||||
let sender = self.output.clone();
|
||||
let ctrl_alt_del_btn = web_sys::window()
|
||||
.unwrap()
|
||||
.document()
|
||||
.unwrap()
|
||||
.get_element_by_id("ctrlaltdel")
|
||||
.unwrap()
|
||||
.dyn_into::<HtmlButtonElement>()
|
||||
.map_err(|_| ())
|
||||
.unwrap();
|
||||
let ctrl_alt_del = move || {
|
||||
let sender = sender.clone();
|
||||
futures::executor::block_on(async move {
|
||||
let _ = sender
|
||||
.send(InputEvent::KeyCode(
|
||||
0x001D, /* Control Left */
|
||||
KeyEventType::Down,
|
||||
))
|
||||
.await;
|
||||
let _ = sender
|
||||
.send(InputEvent::KeyCode(
|
||||
0x0038, /* Alt Left */
|
||||
KeyEventType::Down,
|
||||
))
|
||||
.await;
|
||||
let _ = sender
|
||||
.send(InputEvent::KeyCode(
|
||||
0xE053, /* Delete */
|
||||
KeyEventType::Down,
|
||||
))
|
||||
.await;
|
||||
let _ = sender
|
||||
.send(InputEvent::KeyCode(
|
||||
0xE053, /* Delete */
|
||||
KeyEventType::Up,
|
||||
))
|
||||
.await;
|
||||
let _ = sender
|
||||
.send(InputEvent::KeyCode(
|
||||
0x0038, /* Alt Left */
|
||||
KeyEventType::Up,
|
||||
))
|
||||
.await;
|
||||
let _ = sender
|
||||
.send(InputEvent::KeyCode(
|
||||
0x001D, /* Control Left */
|
||||
KeyEventType::Up,
|
||||
))
|
||||
.await;
|
||||
});
|
||||
};
|
||||
let handler = Box::new(ctrl_alt_del) as Box<dyn FnMut()>;
|
||||
|
||||
let cb = Closure::wrap(handler);
|
||||
|
||||
ctrl_alt_del_btn.set_onclick(Some(cb.as_ref().unchecked_ref()));
|
||||
cb.forget();
|
||||
|
||||
// On a conventional mouse, buttons 1, 2, and 3 correspond to the left,
|
||||
// middle, and right buttons on the mouse. On a wheel mouse, each step
|
||||
// of the wheel upwards is represented by a press and release of button
|
||||
@ -271,6 +213,101 @@ impl Canvas {
|
||||
.unwrap();
|
||||
cb.forget();
|
||||
|
||||
// page components
|
||||
// ctrl+alt+del
|
||||
let sender = self.output.clone();
|
||||
let ctrl_alt_del_btn = web_sys::window()
|
||||
.unwrap()
|
||||
.document()
|
||||
.unwrap()
|
||||
.get_element_by_id("ctrlaltdel")
|
||||
.unwrap()
|
||||
.dyn_into::<HtmlButtonElement>()
|
||||
.map_err(|_| ())
|
||||
.unwrap();
|
||||
let ctrl_alt_del = move || {
|
||||
let sender = sender.clone();
|
||||
futures::executor::block_on(async move {
|
||||
let _ = sender
|
||||
.send(InputEvent::KeyCode(
|
||||
0x001D, /* Control Left */
|
||||
KeyEventType::Down,
|
||||
))
|
||||
.await;
|
||||
let _ = sender
|
||||
.send(InputEvent::KeyCode(
|
||||
0x0038, /* Alt Left */
|
||||
KeyEventType::Down,
|
||||
))
|
||||
.await;
|
||||
let _ = sender
|
||||
.send(InputEvent::KeyCode(
|
||||
0xE053, /* Delete */
|
||||
KeyEventType::Down,
|
||||
))
|
||||
.await;
|
||||
let _ = sender
|
||||
.send(InputEvent::KeyCode(
|
||||
0xE053, /* Delete */
|
||||
KeyEventType::Up,
|
||||
))
|
||||
.await;
|
||||
let _ = sender
|
||||
.send(InputEvent::KeyCode(
|
||||
0x0038, /* Alt Left */
|
||||
KeyEventType::Up,
|
||||
))
|
||||
.await;
|
||||
let _ = sender
|
||||
.send(InputEvent::KeyCode(
|
||||
0x001D, /* Control Left */
|
||||
KeyEventType::Up,
|
||||
))
|
||||
.await;
|
||||
});
|
||||
};
|
||||
let handler = Box::new(ctrl_alt_del) as Box<dyn FnMut()>;
|
||||
|
||||
let cb = Closure::wrap(handler);
|
||||
|
||||
ctrl_alt_del_btn.set_onclick(Some(cb.as_ref().unchecked_ref()));
|
||||
cb.forget();
|
||||
|
||||
// send text
|
||||
let sender = self.output.clone();
|
||||
let send_text_btn = web_sys::window()
|
||||
.unwrap()
|
||||
.document()
|
||||
.unwrap()
|
||||
.get_element_by_id("clipboardsend")
|
||||
.unwrap()
|
||||
.dyn_into::<HtmlButtonElement>()
|
||||
.map_err(|_| ())
|
||||
.unwrap();
|
||||
let send_text = move || {
|
||||
let sender = sender.clone();
|
||||
let text = web_sys::window()
|
||||
.unwrap()
|
||||
.document()
|
||||
.unwrap()
|
||||
.get_element_by_id("clipboardtxt")
|
||||
.unwrap()
|
||||
.dyn_into::<web_sys::HtmlTextAreaElement>()
|
||||
.map_err(|_| ())
|
||||
.unwrap()
|
||||
.value();
|
||||
futures::executor::block_on(async move {
|
||||
for c in text.encode_utf16() {
|
||||
tracing::trace!("unicode key char: {}", c);
|
||||
let _ = sender.send(InputEvent::UnicodeKey(c, KeyEventType::Down)).await;
|
||||
let _ = sender.send(InputEvent::UnicodeKey(c, KeyEventType::Up)).await;
|
||||
}
|
||||
});
|
||||
};
|
||||
let handler = Box::new(send_text) as Box<dyn FnMut()>;
|
||||
let cb = Closure::wrap(handler);
|
||||
send_text_btn.set_onclick(Some(cb.as_ref().unchecked_ref()));
|
||||
cb.forget();
|
||||
|
||||
// initilize the timer
|
||||
self.timer.set(Instant::now());
|
||||
|
@ -1,4 +1,4 @@
|
||||
use rdp::core::event::{KeyboardEvent as RdpKeyboard, PointerButton, PointerEvent, PointerWheel, RdpEvent};
|
||||
use rdp::core::event::{KeyboardEvent as RdpKeyboard, PointerButton, PointerEvent, PointerWheel, RdpEvent, UnicodeKeyEvent};
|
||||
use tracing::trace;
|
||||
use web_sys::{KeyboardEvent, MouseEvent, WheelEvent};
|
||||
|
||||
@ -25,6 +25,7 @@ pub enum InputEvent {
|
||||
Mouse(MouseEvent, MouseEventType),
|
||||
Keyboard(KeyboardEvent, KeyEventType),
|
||||
KeyCode(u16, KeyEventType),
|
||||
UnicodeKey(u16, KeyEventType),
|
||||
Wheel(WheelEvent, WheelEventType),
|
||||
}
|
||||
|
||||
@ -243,6 +244,10 @@ impl From<InputEvent> for RdpEvent {
|
||||
code: e,
|
||||
down: matches!(t, KeyEventType::Down),
|
||||
}),
|
||||
InputEvent::UnicodeKey(e, t) => RdpEvent::UnicodeKey(UnicodeKeyEvent {
|
||||
code: e,
|
||||
down: matches!(t, KeyEventType::Down),
|
||||
}),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user