1
0
Fork 0
mirror of https://github.com/Ylianst/MeshCentral.git synced 2025-03-09 15:40:18 +00:00

All new mesh agents for all platforms..

This commit is contained in:
Ylian Saint-Hilaire 2021-01-07 14:28:10 -08:00
parent b9eff75127
commit c1aa77c5dd
31 changed files with 310 additions and 205 deletions

View file

@ -684,22 +684,21 @@
<input id="softKeyboard" autocomplete="off" type="password" style="z-index:200;opacity:0;width:1px;height:1px" onfocus="keyboardFocusChange()" onblur="keyboardFocusChange()" onkeypress="return ondeskkeypress(event)" onkeydown="return ondeskkeydown(event)" onkeyup="return ondeskkeyup(event)" />
</div>
<div id="deskButtonMenu" style="display:none;position:absolute;top:10px;left:10px;right:55px;bottom:10px;z-index:1000">
<div class="menuButton" onclick="deskMenuButton(5)">Win</div>
<div class="menuButton" onclick="deskMenuButton(10)">Ctrl-Alt-Del</div>
<div class="menuButton" onclick="deskMenuButton(13)">ESC</div>
<div class="menuButton" onclick="deskMenuButton(0)">WIN + Down</div>
<div class="menuButton" onclick="deskMenuButton(1)">WIN + Up</div>
<div class="menuButton" onclick="deskMenuButton(2)">WIN + L</div>
<div class="menuButton" onclick="deskMenuButton(3)">WIN + M</div>
<div class="menuButton" onclick="deskMenuButton(4)">Shift + WIN + M</div>
<div class="menuButton" onclick="deskMenuButton(6)">WIN + R</div>
<div class="menuButton" onclick="deskMenuButton(7)">ALT + F4</div>
<div class="menuButton" onclick="deskMenuButton(8)">CTRL + W</div>
<div class="menuButton" onclick="deskMenuButton(9)">ALT + TAB</div>
<div class="menuButton" onclick="deskMenuButton(11)">TAB</div>
<div class="menuButton" onclick="deskMenuButton(12)">Shift + F10</div>
<div class="menuButton" onclick="deskMenuButton(0x100000)">Win</div>
<div class="menuButton" onclick="deskMenuButton(0x0A0053)">Ctrl-Alt-Del</div>
<div class="menuButton" onclick="deskMenuButton(0x00001B)">ESC</div>
<div class="menuButton" onclick="deskMenuButton(0x100028)">WIN + Down</div>
<div class="menuButton" onclick="deskMenuButton(0x100026)">WIN + Up</div>
<div class="menuButton" onclick="deskMenuButton(0x10004C)">WIN + L</div>
<div class="menuButton" onclick="deskMenuButton(0x10004D)">WIN + M</div>
<div class="menuButton" onclick="deskMenuButton(0x11004D)">Shift + WIN + M</div>
<div class="menuButton" onclick="deskMenuButton(0x100052)">WIN + R</div>
<div class="menuButton" onclick="deskMenuButton(0x020073)">ALT + F4</div>
<div class="menuButton" onclick="deskMenuButton(0x080057)">CTRL + W</div>
<div class="menuButton" onclick="deskMenuButton(0x020009)">ALT + TAB</div>
<div class="menuButton" onclick="deskMenuButton(0x000009)">TAB</div>
<div class="menuButton" onclick="deskMenuButton(0x010079)">Shift + F10</div>
</div>
<div id=p10desktop style="overflow:hidden;position:absolute;top:55px;bottom:0px;width:100%;display:none">
<div id=deskarea1 style="position:absolute;top:0px;width:100%;height:32px">
<div style="padding-top:2px;padding-bottom:2px;background:#C0C0C0;height:32px">
@ -3482,94 +3481,87 @@
}
// Remote desktop special key combos for Windows
function deskSendKeys(key) {
function deskSendKeys(xkey) {
if (xxdialogMode || desktop == null || desktop.State != 3) return;
var ks = key ? key : Q('deskkeys').value;
if (ks == 0) { // WIN + Down arrow
if (desktop.contype == 2) {
desktop.m.sendkey([[0xffe7, 1], [0xff54, 1], [0xff54, 0], [0xffe7, 0]]); // Intel AMT: Meta-left down, Down arrow press, Down arrow release, Meta-left release
} else {
desktop.m.SendKeyMsgKC([[desktop.m.KeyAction.EXDOWN, 0x5B], [desktop.m.KeyAction.DOWN, 40], [desktop.m.KeyAction.UP, 40], [desktop.m.KeyAction.EXUP, 0x5B]]); // Agent: L-Winkey press, Down arrow press, Down arrow release, L-Winkey release
}
} else if (ks == 1) { // WIN + Up arrow
if (desktop.contype == 2) {
desktop.m.sendkey([[0xffe7, 1], [0xff52, 1], [0xff52, 0], [0xffe7, 0]]); // Intel AMT: Meta-left down, Up arrow press, Up arrow release, Meta-left release
} else {
desktop.m.SendKeyMsgKC([[desktop.m.KeyAction.EXDOWN, 0x5B], [desktop.m.KeyAction.DOWN, 38], [desktop.m.KeyAction.UP, 38], [desktop.m.KeyAction.EXUP, 0x5B]]); // MeshAgent: L-Winkey press, Up arrow press, Up arrow release, L-Winkey release
}
} else if (ks == 2) { // WIN + L
if (desktop.contype == 2) {
desktop.m.sendkey([[0xffe7, 1], [0x6c, 1], [0x6c, 0], [0xffe7, 0]]); // Intel AMT: Meta-left down, 'l' press, 'l' release, Meta-left release
} else {
desktop.sendCtrlMsg('{"action":"lock"}');
//desktop.m.SendKeyMsgKC([[desktop.m.KeyAction.EXDOWN,0x5B],[desktop.m.KeyAction.DOWN,76],[desktop.m.KeyAction.UP,76],[desktop.m.KeyAction.EXUP,0x5B]]); // MeshAgent: L-Winkey press, 'L' press, 'L' release, L-Winkey release
//desktop.m.SendKeyMsgKC(desktop.m.KeyAction.EXDOWN, 0x5B);
//desktop.m.SendKeyMsgKC(desktop.m.KeyAction.DOWN, 76);
//desktop.m.SendKeyMsgKC(desktop.m.KeyAction.UP, 76);
//desktop.m.SendKeyMsgKC(desktop.m.KeyAction.EXUP, 0x5B);
}
} else if (ks == 3) { // WIN + M
if (desktop.contype == 2) {
desktop.m.sendkey([[0xffe7, 1], [0x6d, 1], [0x6d, 0], [0xffe7, 0]]); // Intel AMT: Meta-left down, 'm' press, 'm' release, Meta-left release
} else {
desktop.m.SendKeyMsgKC([[desktop.m.KeyAction.EXDOWN, 0x5B], [desktop.m.KeyAction.DOWN, 77], [desktop.m.KeyAction.UP, 77], [desktop.m.KeyAction.EXUP, 0x5B]]); // MeshAgent: L-Winkey press, 'M' press, 'M' release, L-Winkey release
}
} else if (ks == 4) { // Shift + WIN + M
if (desktop.contype == 2) {
desktop.m.sendkey([[0xffe1, 1], [0xffe7, 1], [0x6d, 1], [0x6d, 0], [0xffe7, 0], [0xffe1, 0]]); // Intel AMT: Shift-left down, Meta-left down, 'm' press, 'm' release, Meta-left release, Shift-left release
} else {
desktop.m.SendKeyMsgKC([[desktop.m.KeyAction.DOWN, 16], [desktop.m.KeyAction.EXDOWN, 0x5B], [desktop.m.KeyAction.DOWN, 77], [desktop.m.KeyAction.UP, 77], [desktop.m.KeyAction.EXUP, 0x5B], [desktop.m.KeyAction.UP, 16]]); // MeshAgent: L-shift press, L-Winkey press, 'M' press, 'M' release, L-Winkey release, L-shift release
}
} else if (ks == 5) { // WIN
if (desktop.contype == 2) {
desktop.m.sendkey([[0xffe7, 1], [0xffe7, 0]]); // Intel AMT: Meta-left down, Meta-left release
} else {
desktop.m.SendKeyMsgKC([[desktop.m.KeyAction.EXDOWN, 0x5B], [desktop.m.KeyAction.EXUP, 0x5B]]); // MeshAgent: L-Winkey press, L-Winkey release
}
} else if (ks == 6) { // WIN + R
if (desktop.contype == 2) {
desktop.m.sendkey([[0xffe7, 1], [0x72, 1], [0x72, 0], [0xffe7, 0]]); // Intel AMT: Meta-left down, 'r' press, 'r' release, Meta-left release
} else {
desktop.m.SendKeyMsgKC([[desktop.m.KeyAction.EXDOWN, 0x5B], [desktop.m.KeyAction.DOWN, 82], [desktop.m.KeyAction.UP, 82], [desktop.m.KeyAction.EXUP, 0x5B]]); // MeshAgent: L-Winkey press, 'R' press, 'R' release, L-Winkey release
}
} else if (ks == 7) { // ALT-F4
if (desktop.contype == 2) {
desktop.m.sendkey([[0xffe9, 1], [0xffc1, 1], [0xffc1, 0], [0xffe9, 0]]); // Intel AMT: Alt down, 'F4' press, 'F4' release, Alt release
} else {
desktop.m.SendKeyMsgKC([[desktop.m.KeyAction.EXDOWN, 18], [desktop.m.KeyAction.DOWN, 115], [desktop.m.KeyAction.UP, 115], [desktop.m.KeyAction.EXUP, 18]]); // MeshAgent: Alt press, 'F4' press, 'F4' release, Alt release
}
} else if (ks == 8) { // CTRL-W
if (desktop.contype == 2) {
desktop.m.sendkey([[0xffe3, 1], [0x77, 1], [0x77, 0], [0xffe3, 0]]); // Intel AMT: Ctrl down, 'w' press, 'w' release, Ctrl release
} else {
desktop.m.SendKeyMsgKC([[desktop.m.KeyAction.EXDOWN, 17], [desktop.m.KeyAction.DOWN, 87], [desktop.m.KeyAction.UP, 87], [desktop.m.KeyAction.EXUP, 17]]); // MeshAgent: Ctrl press, 'W' press, 'W' release, Ctrl release
}
} else if (ks == 9) { // ALT-TAB
if (desktop.contype == 2) {
desktop.m.sendkey([[0xffe9, 1], [0xff09, 1], [0xff09, 0], [0xffe9, 0]]); // Intel AMT: Alt down, 'TAB' press, 'TAB' release, Alt release
} else {
desktop.m.SendKeyMsgKC([[desktop.m.KeyAction.EXDOWN, 18], [desktop.m.KeyAction.DOWN, 9], [desktop.m.KeyAction.UP, 9], [desktop.m.KeyAction.EXUP, 18]]); // MeshAgent: Alt press, 'TAB' press, 'TAB' release, Alt release
}
} else if (ks == 10) { // CTRL-ALT-DEL
desktop.m.sendcad();
} else if (ks == 11) { // TAB
if (desktop.contype == 2) {
desktop.m.sendkey([[0xff09, 1], [0xff09, 0]]); // Intel AMT: 'TAB' press, 'TAB' release
} else {
desktop.m.SendKeyMsgKC([[desktop.m.KeyAction.DOWN, 9], [desktop.m.KeyAction.UP, 9]]); // MeshAgent: 'TAB' press, 'TAB' release
}
} else if (ks == 12) { // Shift-F10
if (desktop.contype == 2) {
desktop.m.sendkey([[0xffe1, 1], [0xffc7, 1], [0xffc7, 0], [0xffe1, 0]]); // Intel AMT: Left-Shift Down, F10 down, F10 up, Left-Shift Up
} else {
desktop.m.SendKeyMsgKC([[desktop.m.KeyAction.DOWN, 16], [desktop.m.KeyAction.DOWN, 121], [desktop.m.KeyAction.UP, 121], [desktop.m.KeyAction.UP, 16]]); // MeshAgent: Left-Shift Down, F10 down, F10 up, Left-Shift Up
}
} else if (ks == 13) { // ESC
if (desktop.contype == 2) {
desktop.m.sendkey([[27, 1], [27, 0]]); // Intel AMT: ESC press, ESC release
} else {
desktop.m.SendKeyMsgKC([[desktop.m.KeyAction.DOWN, 27], [desktop.m.KeyAction.UP, 27]]); // MeshAgent: ESC press, ESC release
}
// Construct the key command
var ks = xkey ? xkey : parseInt(Q('deskkeys').value);
if (ks == 0x0A0053) { desktop.m.sendcad(); return; } // CTRL-ALT-DEL
if ((desktop.contype == 1) && (ks == 0x100052)) { desktop.sendCtrlMsg('{"action":"lock"}'); return; } // Lock desktop
var flags = (ks & 0xFF0000) >> 16, key = (ks & 0xFFFF), keyArray = [], keyArray2 = [];
var amtTranslate = {
8: 0xff08, // BackSpace
9: 0xff09, // Tab
13: 0xff0d, // Return or Enter
27: 0xff1b, // Escape
45: 0xff63, // Insert
46: 0xffff, // Delete
36: 0xff50, // Home
35: 0xff57, // End
33: 0xff55, // Page Up
34: 0xff56, // Page Down
37: 0xff51, // Left arrow
38: 0xff52, // Up arrow
39: 0xff53, // Right arrow
40: 0xff54, // Down arrow
112: 0xffbe, // F1
113: 0xffbf, // F2
114: 0xffc0, // F3
115: 0xffc1, // F4
116: 0xffc2, // F5
117: 0xffc3, // F6
118: 0xffc4, // F7
119: 0xffc5, // F8
120: 0xffc6, // F9
121: 0xffc7, // F10
122: 0xffc8, // F11
123: 0xffc9 // F12
}
// 0x010000 = Shift
// 0x020000 = Left-Alt
// 0x080000 = Ctrl
// 0x100000 = Window
// Examples:
// WIN+DOWN = 0x100028
// WIN+UP = 0x100026
// WIN+L = 0x10004C
// WIN+M = 0x10004D
// Shift+WIN+M = 0x11004D
// WIN = 0x100000
// WIN+R = 0x100052
// ALT+F4 = 0x020073
// CTRL+W = 0x080057
// ALT+TAB = 0x020009
// CTRL-ALT-DEL = 0x0A0053
// WIN-LEFT = 0x100025
// WIN-RIGHT = 0x100027
// SHIFT+F10 = 0x010079
if (desktop.contype == 2) {
// Intel AMT
if (flags & 1) { keyArray.push([0xffe1, 1]); keyArray2.push([0xffe1, 0]); } // Shift
if (flags & 2) { keyArray.push([0xffe9, 1]); keyArray2.push([0xffe9, 0]); } // Left-alt
if (flags & 8) { keyArray.push([0xffe3, 1]); keyArray2.push([0xffe3, 0]); } // Ctrl
if (flags & 16) { keyArray.push([0xffe7, 1]); keyArray2.push([0xffe7, 0]); } // Windows key
if (amtTranslate[key]) { key = amtTranslate[key]; }
if ((key >= 65) && (key <= 90)) { key += 32; }
if (key != 0) { keyArray.push([key, 1]); keyArray2.push([key, 0]); }
keyArray2.reverse();
for (var i = 0; i < keyArray2.length; i++) { keyArray.push(keyArray2[i]); }
desktop.m.sendkey(keyArray);
} else {
// Agent desktop
if (flags & 1) { keyArray.push([desktop.m.KeyAction.DOWN, 16]); keyArray2.push([desktop.m.KeyAction.UP, 16]); } // Shift
if (flags & 2) { keyArray.push([desktop.m.KeyAction.EXDOWN, 18]); keyArray2.push([desktop.m.KeyAction.EXUP, 18]); } // Left-alt
if (flags & 8) { keyArray.push([desktop.m.KeyAction.EXDOWN, 17]); keyArray2.push([desktop.m.KeyAction.EXUP, 17]); } // Ctrl
if (flags & 16) { keyArray.push([desktop.m.KeyAction.EXDOWN, 0x5B]); keyArray2.push([desktop.m.KeyAction.EXUP, 0x5B]); } // Windows key
if (key != 0) { keyArray.push([desktop.m.KeyAction.DOWN, key]); keyArray2.push([desktop.m.KeyAction.UP, key]); }
keyArray2.reverse();
for (var i = 0; i < keyArray2.length; i++) { keyArray.push(keyArray2[i]); }
desktop.m.SendKeyMsgKC(keyArray);
}
}

View file

@ -627,6 +627,7 @@
<span id=DeskRefreshButton title="Refresh the desktop"><img id=DeskRefreshButtonImage src='images/icon-refresh.png' onclick=deskRefreshFunction() height=16 width=16 style=padding-top:2px /></span>
</div>
<div>
<!--
<select id="deskkeys">
<option value=10>Ctrl+Alt+Del</option>
<option value=5>Win</option>
@ -642,6 +643,37 @@
<option value=11>Win+Left</option>
<option value=12>Win+Right</option>
</select>
// WIN+DOWN = 0x100028
// WIN+UP = 0x100026
// WIN+L = 0x10004C
// WIN+M = 0x10004D
// Shift+WIN+M = 0x11004D
// WIN = 0x100000
// WIN+R = 0x100052
// ALT+F4 = 0x020073
// CTRL+W = 0x080057
// ALT+TAB = 0x020009
// CTRL-ALT-DEL = 0x0A0053
// WIN-LEFT = 0x100025
// WIN-RIGHT = 0x100027
-->
<select id="deskkeys">
<option value=0x0A0053>Ctrl+Alt+Del</option>
<option value=0x100000>Win</option>
<option value=0x100028>Win+Down</option>
<option value=0x100026>Win+Up</option>
<option value=0x10004C>Win+L</option>
<option value=0x10004D>Win+M</option>
<option value=0x11004D>Shift+Win+M</option>
<option value=0x100052>Win+R</option>
<option value=0x020073>Alt-F4</option>
<option value=0x080057>Ctrl-W</option>
<option value=0x020009>Alt-Tab</option>
<option value=0x100025>Win+Left</option>
<option value=0x100027>Win+Right</option>
</select>
<input id="DeskWD" type=button value="Send" onkeypress="return false" onkeydown="return false" onclick="deskSendKeys()" />
<input id="DeskESC" style="display:none" type="button" value="ESC" onkeypress="return false" onkeydown="return false" onclick="sendDeskEsc()" />
<input id="DeskClip" style="" type="button" value="Clipboard" onkeypress="return false" onkeydown="return false" onclick="showDeskClip()" />
@ -7429,86 +7461,85 @@
function deskSendKeys() {
Q('DeskWD').blur();
if (xxdialogMode || desktop == null || desktop.State != 3) return;
var ks = Q('deskkeys').value;
if (ks == 0) { // WIN+Down arrow
if (desktop.contype == 2) {
desktop.m.sendkey([[0xffe7,1],[0xff54,1],[0xff54,0],[0xffe7,0]]); // Intel AMT: Meta-left down, Down arrow press, Down arrow release, Meta-left release
} else {
desktop.m.SendKeyMsgKC([[desktop.m.KeyAction.EXDOWN,0x5B],[desktop.m.KeyAction.DOWN,40],[desktop.m.KeyAction.UP,40],[desktop.m.KeyAction.EXUP,0x5B]]); // Agent: L-Winkey press, Down arrow press, Down arrow release, L-Winkey release
}
} else if (ks == 1) { // WIN+Up arrow
if (desktop.contype == 2) {
desktop.m.sendkey([[0xffe7,1],[0xff52,1],[0xff52,0],[0xffe7,0]]); // Intel AMT: Meta-left down, Up arrow press, Up arrow release, Meta-left release
} else {
desktop.m.SendKeyMsgKC([[desktop.m.KeyAction.EXDOWN,0x5B],[desktop.m.KeyAction.DOWN,38],[desktop.m.KeyAction.UP,38],[desktop.m.KeyAction.EXUP,0x5B]]); // MeshAgent: L-Winkey press, Up arrow press, Up arrow release, L-Winkey release
}
} else if (ks == 2) { // WIN+L arrow
if (desktop.contype == 2) {
desktop.m.sendkey([[0xffe7,1],[0x6c,1],[0x6c,0],[0xffe7,0]]); // Intel AMT: Meta-left down, 'l' press, 'l' release, Meta-left release
} else {
desktop.sendCtrlMsg('{"action":"lock"}');
//desktop.m.SendKeyMsgKC([[desktop.m.KeyAction.EXDOWN,0x5B],[desktop.m.KeyAction.DOWN,76],[desktop.m.KeyAction.UP,76],[desktop.m.KeyAction.EXUP,0x5B]]); // MeshAgent: L-Winkey press, 'L' press, 'L' release, L-Winkey release
//desktop.m.SendKeyMsgKC(desktop.m.KeyAction.EXDOWN, 0x5B);
//desktop.m.SendKeyMsgKC(desktop.m.KeyAction.DOWN, 76);
//desktop.m.SendKeyMsgKC(desktop.m.KeyAction.UP, 76);
//desktop.m.SendKeyMsgKC(desktop.m.KeyAction.EXUP, 0x5B);
}
} else if (ks == 3) { // WIN+M arrow
if (desktop.contype == 2) {
desktop.m.sendkey([[0xffe7,1],[0x6d,1],[0x6d,0],[0xffe7,0]]); // Intel AMT: Meta-left down, 'm' press, 'm' release, Meta-left release
} else {
desktop.m.SendKeyMsgKC([[desktop.m.KeyAction.EXDOWN,0x5B],[desktop.m.KeyAction.DOWN,77],[desktop.m.KeyAction.UP,77],[desktop.m.KeyAction.EXUP,0x5B]]); // MeshAgent: L-Winkey press, 'M' press, 'M' release, L-Winkey release
}
} else if (ks == 4) { // Shift+WIN+M arrow
if (desktop.contype == 2) {
desktop.m.sendkey([[0xffe1,1],[0xffe7,1],[0x6d,1],[0x6d,0],[0xffe7,0],[0xffe1,0]]); // Intel AMT: Shift-left down, Meta-left down, 'm' press, 'm' release, Meta-left release, Shift-left release
} else {
desktop.m.SendKeyMsgKC([[desktop.m.KeyAction.DOWN,16],[desktop.m.KeyAction.EXDOWN,0x5B],[desktop.m.KeyAction.DOWN,77],[desktop.m.KeyAction.UP,77],[desktop.m.KeyAction.EXUP,0x5B],[desktop.m.KeyAction.UP, 16]]); // MeshAgent: L-shift press, L-Winkey press, 'M' press, 'M' release, L-Winkey release, L-shift release
}
} else if (ks == 5) { // WIN
if (desktop.contype == 2) {
desktop.m.sendkey([[0xffe7,1],[0xffe7,0]]); // Intel AMT: Meta-left down, Meta-left release
} else {
desktop.m.SendKeyMsgKC([[desktop.m.KeyAction.EXDOWN,0x5B], [desktop.m.KeyAction.EXUP,0x5B]]); // MeshAgent: L-Winkey press, L-Winkey release
}
} else if (ks == 6) { // WIN+R
if (desktop.contype == 2) {
desktop.m.sendkey([[0xffe7,1],[0x72,1],[0x72,0],[0xffe7,0]]); // Intel AMT: Meta-left down, 'r' press, 'r' release, Meta-left release
} else {
desktop.m.SendKeyMsgKC([[desktop.m.KeyAction.EXDOWN, 0x5B], [desktop.m.KeyAction.DOWN, 82], [desktop.m.KeyAction.UP, 82], [desktop.m.KeyAction.EXUP, 0x5B]]); // MeshAgent: L-Winkey press, 'R' press, 'R' release, L-Winkey release
}
} else if (ks == 7) { // ALT-F4
if (desktop.contype == 2) {
desktop.m.sendkey([[0xffe9,1],[0xffc1,1],[0xffc1,0],[0xffe9,0]]); // Intel AMT: Alt down, 'F4' press, 'F4' release, Alt release
} else {
desktop.m.SendKeyMsgKC([[desktop.m.KeyAction.EXDOWN, 18], [desktop.m.KeyAction.DOWN, 115], [desktop.m.KeyAction.UP, 115], [desktop.m.KeyAction.EXUP, 18]]); // MeshAgent: Alt press, 'F4' press, 'F4' release, Alt release
}
} else if (ks == 8) { // CTRL-W
if (desktop.contype == 2) {
desktop.m.sendkey([[0xffe3,1],[0x77,1],[0x77,0],[0xffe3,0]]); // Intel AMT: Ctrl down, 'w' press, 'w' release, Ctrl release
} else {
desktop.m.SendKeyMsgKC([[desktop.m.KeyAction.EXDOWN, 17], [desktop.m.KeyAction.DOWN, 87], [desktop.m.KeyAction.UP, 87], [desktop.m.KeyAction.EXUP, 17]]); // MeshAgent: Ctrl press, 'W' press, 'W' release, Ctrl release
}
} else if (ks == 9) { // ALT-TAB
if (desktop.contype == 2) {
desktop.m.sendkey([[0xffe9, 1], [0xff09, 1], [0xff09, 0], [0xffe9, 0]]); // Intel AMT: Alt down, 'TAB' press, 'TAB' release, Alt release
} else {
desktop.m.SendKeyMsgKC([[desktop.m.KeyAction.EXDOWN, 18], [desktop.m.KeyAction.DOWN, 9], [desktop.m.KeyAction.UP, 9], [desktop.m.KeyAction.EXUP, 18]]); // MeshAgent: Alt press, 'TAB' press, 'TAB' release, Alt release
}
} else if (ks == 10) { // CTRL-ALT-DEL
desktop.m.sendcad();
} else if (ks == 11) { // WIN-LEFT
if (desktop.contype == 2) {
desktop.m.sendkey([[0xffe7, 1], [0xff51, 1], [0xff51, 0], [0xffe7, 0]]); // Intel AMT: Meta-left down, Left arrow press, Left arrow release, Meta-left release
} else {
desktop.m.SendKeyMsgKC([[desktop.m.KeyAction.EXDOWN, 0x5B], [desktop.m.KeyAction.DOWN, 37], [desktop.m.KeyAction.UP, 37], [desktop.m.KeyAction.EXUP, 0x5B]]);
}
} else if (ks == 12) { // WIN-RIGHT
if (desktop.contype == 2) {
desktop.m.sendkey([[0xffe7, 1], [0xff53, 1], [0xff53, 0], [0xffe7, 0]]); // Intel AMT: Meta-left down, Right arrow press, Right arrow release, Meta-left release
} else {
desktop.m.SendKeyMsgKC([[desktop.m.KeyAction.EXDOWN, 0x5B], [desktop.m.KeyAction.DOWN, 39], [desktop.m.KeyAction.UP, 39], [desktop.m.KeyAction.EXUP, 0x5B]]);
}
// Construct the key command
var ks = parseInt(Q('deskkeys').value);
if (ks == 0x0A0053) { desktop.m.sendcad(); return; } // CTRL-ALT-DEL
if ((desktop.contype == 1) && (ks == 0x100052)) { desktop.sendCtrlMsg('{"action":"lock"}'); return; } // Lock desktop
var flags = (ks & 0xFF0000) >> 16, key = (ks & 0xFFFF), keyArray = [], keyArray2 = [];
var amtTranslate = {
8 : 0xff08, // BackSpace
9 : 0xff09, // Tab
13 : 0xff0d, // Return or Enter
27 : 0xff1b, // Escape
45 : 0xff63, // Insert
46 : 0xffff, // Delete
36 : 0xff50, // Home
35 : 0xff57, // End
33 : 0xff55, // Page Up
34 : 0xff56, // Page Down
37 : 0xff51, // Left arrow
38 : 0xff52, // Up arrow
39 : 0xff53, // Right arrow
40 : 0xff54, // Down arrow
112 : 0xffbe, // F1
113 : 0xffbf, // F2
114 : 0xffc0, // F3
115 : 0xffc1, // F4
116 : 0xffc2, // F5
117 : 0xffc3, // F6
118 : 0xffc4, // F7
119 : 0xffc5, // F8
120 : 0xffc6, // F9
121 : 0xffc7, // F10
122 : 0xffc8, // F11
123 : 0xffc9 // F12
}
// 0x010000 = Shift
// 0x020000 = Left-Alt
// 0x080000 = Ctrl
// 0x100000 = Window
// Examples:
// WIN+DOWN = 0x100028
// WIN+UP = 0x100026
// WIN+L = 0x10004C
// WIN+M = 0x10004D
// Shift+WIN+M = 0x11004D
// WIN = 0x100000
// WIN+R = 0x100052
// ALT+F4 = 0x020073
// CTRL+W = 0x080057
// ALT+TAB = 0x020009
// CTRL-ALT-DEL = 0x0A0053
// WIN-LEFT = 0x100025
// WIN-RIGHT = 0x100027
// SHIFT+F10 = 0x010079
if (desktop.contype == 2) {
// Intel AMT
if (flags & 1) { keyArray.push([0xffe1, 1]); keyArray2.push([0xffe1, 0]); } // Shift
if (flags & 2) { keyArray.push([0xffe9, 1]); keyArray2.push([0xffe9, 0]); } // Left-alt
if (flags & 8) { keyArray.push([0xffe3, 1]); keyArray2.push([0xffe3, 0]); } // Ctrl
if (flags & 16) { keyArray.push([0xffe7, 1]); keyArray2.push([0xffe7, 0]); } // Windows key
if (amtTranslate[key]) { key = amtTranslate[key]; }
if ((key >= 65) && (key <= 90)) { key += 32; }
if (key != 0) { keyArray.push([key, 1]); keyArray2.push([key, 0]); }
keyArray2.reverse();
for (var i = 0; i < keyArray2.length; i++) { keyArray.push(keyArray2[i]); }
desktop.m.sendkey(keyArray);
} else {
// Agent desktop
if (flags & 1) { keyArray.push([desktop.m.KeyAction.DOWN, 16]); keyArray2.push([desktop.m.KeyAction.UP, 16]); } // Shift
if (flags & 2) { keyArray.push([desktop.m.KeyAction.EXDOWN, 18]); keyArray2.push([desktop.m.KeyAction.EXUP, 18]); } // Left-alt
if (flags & 8) { keyArray.push([desktop.m.KeyAction.EXDOWN, 17]); keyArray2.push([desktop.m.KeyAction.EXUP, 17]); } // Ctrl
if (flags & 16) { keyArray.push([desktop.m.KeyAction.EXDOWN, 0x5B]); keyArray2.push([desktop.m.KeyAction.EXUP, 0x5B]); } // Windows key
if (key != 0) { keyArray.push([desktop.m.KeyAction.DOWN, key]); keyArray2.push([desktop.m.KeyAction.UP, key]); }
keyArray2.reverse();
for (var i = 0; i < keyArray2.length; i++) { keyArray.push(keyArray2[i]); }
desktop.m.SendKeyMsgKC(keyArray);
}
}
@ -7543,7 +7574,7 @@
// New unicode typing
desktop.m.SendStringUnicode(txt);
} else {
// Old scan code typing. Remove this when non-Windows platforms support Unicode.
// Old scan code typing. This is for non-unicode system.
for (var i in txt) {
var a = txt.charCodeAt(i), b = ltxt.charCodeAt(i);
if (((a >= 65) && (a <= 90)) || ((a >= 97) && (a <= 122))) {