2023-02-03 17:08:40 +08:00
import ' package:flutter/material.dart ' ;
2022-11-29 23:03:16 +08:00
import ' package:flutter_hbb/common.dart ' ;
2023-02-27 12:01:22 +08:00
import ' package:flutter_hbb/models/state_model.dart ' ;
2023-10-17 14:29:14 +08:00
import ' package:get/get.dart ' ;
2022-11-29 23:03:16 +08:00
2023-10-27 16:19:42 +08:00
const int kMaxVirtualDisplayCount = 4 ;
const int kAllVirtualDisplay = - 1 ;
2022-08-20 19:57:16 +08:00
const double kDesktopRemoteTabBarHeight = 28.0 ;
2023-08-14 18:28:31 +08:00
const int kInvalidWindowId = - 1 ;
2023-02-03 17:08:40 +08:00
const int kMainWindowId = 0 ;
2022-08-23 15:24:04 +08:00
2023-10-08 21:44:54 +08:00
const kAllDisplayValue = - 1 ;
2023-10-25 09:20:51 +08:00
const kKeyLegacyMode = ' legacy ' ;
const kKeyMapMode = ' map ' ;
const kKeyTranslateMode = ' translate ' ;
2023-10-27 16:19:42 +08:00
const String kPlatformAdditionsIsWayland = " is_wayland " ;
const String kPlatformAdditionsHeadless = " headless " ;
const String kPlatformAdditionsIsInstalled = " is_installed " ;
2024-04-19 11:31:52 +08:00
const String kPlatformAdditionsIddImpl = " idd_impl " ;
const String kPlatformAdditionsRustDeskVirtualDisplays = " rustdesk_virtual_displays " ;
const String kPlatformAdditionsAmyuniVirtualDisplays = " amyuni_virtual_displays " ;
2023-10-29 23:11:30 +08:00
const String kPlatformAdditionsHasFileClipboard = " has_file_clipboard " ;
2024-02-23 22:49:53 +08:00
const String kPlatformAdditionsSupportedPrivacyModeImpl =
" supported_privacy_mode_impl " ;
2023-10-27 16:19:42 +08:00
2023-01-10 17:13:40 +08:00
const String kPeerPlatformWindows = " Windows " ;
const String kPeerPlatformLinux = " Linux " ;
const String kPeerPlatformMacOS = " Mac OS " ;
const String kPeerPlatformAndroid = " Android " ;
2023-09-13 21:02:21 +08:00
const double kScrollbarThickness = 12.0 ;
2023-02-04 11:23:36 +08:00
/// [kAppTypeMain] used by 'Desktop Main Page' , 'Mobile (Client and Server)', "Install Page"
2022-08-06 17:08:48 +08:00
const String kAppTypeMain = " main " ;
2023-03-07 11:08:41 +09:00
/// [kAppTypeConnectionManager] only for 'Desktop CM Page'
2023-02-04 11:23:36 +08:00
const String kAppTypeConnectionManager = " cm " ;
2023-03-07 11:08:41 +09:00
2022-08-06 17:08:48 +08:00
const String kAppTypeDesktopRemote = " remote " ;
const String kAppTypeDesktopFileTransfer = " file transfer " ;
2022-08-26 11:35:28 +08:00
const String kAppTypeDesktopPortForward = " port forward " ;
2022-09-07 18:57:49 +08:00
2022-12-01 13:52:12 +08:00
const String kWindowMainWindowOnTop = " main_window_on_top " ;
const String kWindowGetWindowInfo = " get_window_info " ;
2023-10-17 00:30:34 +08:00
const String kWindowGetScreenList = " get_screen_list " ;
2023-11-28 23:57:48 +08:00
// This method is not used, maybe it can be removed.
2023-02-22 23:01:31 +01:00
const String kWindowDisableGrabKeyboard = " disable_grab_keyboard " ;
2022-10-26 14:39:13 +08:00
const String kWindowActionRebuild = " rebuild " ;
2022-11-05 23:41:22 +08:00
const String kWindowEventHide = " hide " ;
const String kWindowEventShow = " show " ;
2022-12-01 13:52:12 +08:00
const String kWindowConnect = " connect " ;
2022-10-26 14:39:13 +08:00
2023-08-02 20:38:09 +08:00
const String kWindowEventNewRemoteDesktop = " new_remote_desktop " ;
const String kWindowEventNewFileTransfer = " new_file_transfer " ;
const String kWindowEventNewPortForward = " new_port_forward " ;
const String kWindowEventActiveSession = " active_session " ;
2023-10-08 21:44:54 +08:00
const String kWindowEventActiveDisplaySession = " active_display_session " ;
2023-08-02 22:02:18 +08:00
const String kWindowEventGetRemoteList = " get_remote_list " ;
2023-08-03 23:14:40 +08:00
const String kWindowEventGetSessionIdList = " get_session_id_list " ;
2023-08-06 11:21:07 +08:00
const String kWindowEventMoveTabToNewWindow = " move_tab_to_new_window " ;
2023-08-14 20:40:58 +08:00
const String kWindowEventGetCachedSessionData = " get_cached_session_data " ;
2023-10-08 21:44:54 +08:00
const String kWindowEventOpenMonitorSession = " open_monitor_session " ;
2023-08-02 20:38:09 +08:00
2023-08-08 12:12:35 +08:00
const String kOptionOpenNewConnInTabs = " enable-open-new-connections-in-tabs " ;
const String kOptionOpenInTabs = " allow-open-in-tabs " ;
const String kOptionOpenInWindows = " allow-open-in-windows " ;
const String kOptionForceAlwaysRelay = " force-always-relay " ;
2024-02-23 22:49:53 +08:00
const String kOptionViewOnly = " view-only " ;
2023-08-01 22:19:38 +08:00
2023-05-02 23:48:49 +08:00
const String kUrlActionClose = " close " ;
2022-10-12 21:57:19 +08:00
2022-08-11 16:03:04 +08:00
const String kTabLabelHomePage = " Home " ;
const String kTabLabelSettingPage = " Settings " ;
2022-08-11 00:12:47 +08:00
2022-10-14 19:48:41 +09:00
const String kWindowPrefix = " wm_ " ;
2022-11-26 11:40:13 +08:00
const int kWindowMainId = 0 ;
2022-10-14 19:48:41 +09:00
2023-08-09 23:42:53 +08:00
const String kPointerEventKindTouch = " touch " ;
const String kPointerEventKindMouse = " mouse " ;
2023-10-19 12:21:35 +08:00
const String kKeyShowDisplaysAsIndividualWindows =
' displays_as_individual_windows ' ;
const String kKeyUseAllMyDisplaysForTheRemoteSession =
' use_all_my_displays_for_the_remote_session ' ;
2023-10-09 17:22:22 +08:00
const String kKeyShowMonitorsToolbar = ' show_monitors_toolbar ' ;
2024-02-23 22:49:53 +08:00
const String kKeyReverseMouseWheel = " reverse_mouse_wheel " ;
2023-10-08 21:44:54 +08:00
2022-11-08 13:37:08 +08:00
// the executable name of the portable version
2022-11-05 23:41:22 +08:00
const String kEnvPortableExecutable = " RUSTDESK_APPNAME " ;
2022-09-23 15:12:50 +08:00
const Color kColorWarn = Color . fromARGB ( 255 , 245 , 133 , 59 ) ;
2022-08-31 18:41:55 +08:00
const int kMobileDefaultDisplayWidth = 720 ;
const int kMobileDefaultDisplayHeight = 1280 ;
const int kDesktopDefaultDisplayWidth = 1080 ;
const int kDesktopDefaultDisplayHeight = 720 ;
2022-08-29 18:48:12 +08:00
2023-07-26 21:29:35 +08:00
const int kMobileMaxDisplaySize = 1280 ;
const int kDesktopMaxDisplaySize = 3840 ;
2022-10-09 19:27:30 +08:00
2023-02-22 22:13:21 +01:00
const double kDesktopFileTransferRowHeight = 30.0 ;
2023-02-15 15:03:19 +08:00
const double kDesktopFileTransferHeaderHeight = 25.0 ;
2023-11-13 19:29:16 +08:00
const double kMinFps = 5 ;
const double kDefaultFps = 30 ;
const double kMaxFps = 120 ;
const double kMinQuality = 10 ;
const double kDefaultQuality = 50 ;
const double kMaxQuality = 100 ;
const double kMaxMoreQuality = 2000 ;
2024-03-24 11:23:06 +08:00
double kNewWindowOffset = isWindows
2023-10-19 12:21:35 +08:00
? 56.0
2024-03-24 11:23:06 +08:00
: isLinux
2023-10-19 12:21:35 +08:00
? 50.0
2024-03-24 11:23:06 +08:00
: isMacOS
2023-10-19 12:21:35 +08:00
? 30.0
: 50.0 ;
2024-04-19 11:31:52 +08:00
EdgeInsets get kDragToResizeAreaPadding = > ! kUseCompatibleUiMode & & isLinux
? stateGlobal . fullscreen . isTrue | | stateGlobal . isMaximized . value
? EdgeInsets . zero
: EdgeInsets . all ( 5.0 )
: EdgeInsets . zero ;
2023-02-15 15:03:19 +08:00
// https://en.wikipedia.org/wiki/Non-breaking_space
const int $nbsp = 0x00A0 ;
extension StringExtension on String {
String get nonBreaking = > replaceAll ( ' ' , String . fromCharCode ( $nbsp ) ) ;
}
2023-05-20 15:12:52 +02:00
const Size kConnectionManagerWindowSizeClosedChat = Size ( 300 , 490 ) ;
const Size kConnectionManagerWindowSizeOpenChat = Size ( 700 , 490 ) ;
2022-09-28 11:20:57 +08:00
// Tabbar transition duration, now we remove the duration
const Duration kTabTransitionDuration = Duration . zero ;
const double kEmptyMarginTop = 50 ;
2022-10-26 21:13:32 +09:00
const double kDesktopIconButtonSplashRadius = 20 ;
2022-09-26 17:56:32 +08:00
2022-10-27 18:40:45 +08:00
/// [kMinCursorSize] indicates min cursor (w, h)
2022-11-10 12:29:50 +08:00
const int kMinCursorSize = 12 ;
2022-10-27 18:40:45 +08:00
2022-09-19 17:10:12 +08:00
/// [kDefaultScrollAmountMultiplier] indicates how many rows can be scrolled after a minimum scroll action of mouse
2022-09-19 21:09:54 +08:00
const kDefaultScrollAmountMultiplier = 5.0 ;
const kDefaultScrollDuration = Duration ( milliseconds: 50 ) ;
2022-09-27 23:08:01 +08:00
const kDefaultMouseWheelThrottleDuration = Duration ( milliseconds: 50 ) ;
2022-09-20 18:09:02 +08:00
const kFullScreenEdgeSize = 0.0 ;
2023-02-27 12:01:22 +08:00
const kMaximizeEdgeSize = 0.0 ;
2024-03-24 11:23:06 +08:00
var kWindowEdgeSize = isWindows ? 1.0 : 5.0 ;
2022-10-04 21:19:31 +08:00
const kWindowBorderWidth = 1.0 ;
2022-10-08 19:28:20 +09:00
const kDesktopMenuPadding = EdgeInsets . only ( left: 12.0 , right: 3.0 ) ;
2022-09-19 17:10:12 +08:00
2022-11-10 21:25:12 +08:00
const kInvalidValueStr = ' InvalidValueStr ' ;
// Config key shared by flutter and other ui.
const kCommConfKeyTheme = ' theme ' ;
const kCommConfKeyLang = ' lang ' ;
2022-09-13 21:36:38 +08:00
2022-09-19 20:26:39 +08:00
const kMobilePageConstraints = BoxConstraints ( maxWidth: 600 ) ;
2022-11-08 13:37:08 +08:00
/// [kMouseControlDistance] indicates the distance that self-side move to get control of mouse.
const kMouseControlDistance = 12 ;
/// [kMouseControlTimeoutMSec] indicates the timeout (in milliseconds) that self-side can get control of mouse.
const kMouseControlTimeoutMSec = 1000 ;
2022-11-24 11:19:16 +08:00
/// [kRemoteViewStyleOriginal] Show remote image without scaling.
const kRemoteViewStyleOriginal = ' original ' ;
/// [kRemoteViewStyleAdaptive] Show remote image scaling by ratio factor.
const kRemoteViewStyleAdaptive = ' adaptive ' ;
/// [kRemoteScrollStyleAuto] Scroll image auto by position.
const kRemoteScrollStyleAuto = ' scrollauto ' ;
/// [kRemoteScrollStyleBar] Scroll image with scroll bar.
const kRemoteScrollStyleBar = ' scrollbar ' ;
2023-09-10 14:14:57 +08:00
/// [kScrollModeDefault] Mouse or touchpad, the default scroll mode.
const kScrollModeDefault = ' default ' ;
2023-09-16 11:54:17 +02:00
2023-09-10 14:14:57 +08:00
/// [kScrollModeReverse] Mouse or touchpad, the reverse scroll mode.
const kScrollModeReverse = ' reverse ' ;
2022-11-24 11:19:16 +08:00
/// [kRemoteImageQualityBest] Best image quality.
const kRemoteImageQualityBest = ' best ' ;
/// [kRemoteImageQualityBalanced] Balanced image quality, mid performance.
const kRemoteImageQualityBalanced = ' balanced ' ;
/// [kRemoteImageQualityLow] Low image quality, better performance.
const kRemoteImageQualityLow = ' low ' ;
/// [kRemoteImageQualityCustom] Custom image quality.
const kRemoteImageQualityCustom = ' custom ' ;
2023-01-30 20:30:35 +08:00
/// [kRemoteAudioGuestToHost] Guest to host audio mode(default).
const kRemoteAudioGuestToHost = ' guest-to-host ' ;
2023-01-30 22:57:20 +08:00
/// [kRemoteAudioDualWay] dual-way audio mode(default).
const kRemoteAudioDualWay = ' dual-way ' ;
2023-01-30 20:30:35 +08:00
2023-01-06 18:14:31 +08:00
const kIgnoreDpi = true ;
2023-11-17 14:08:21 +08:00
// ================================ mobile ================================
// Magic numbers, maybe need to avoid it or use a better way to get them.
const kMobileDelaySoftKeyboard = Duration ( milliseconds: 30 ) ;
const kMobileDelaySoftKeyboardFocus = Duration ( milliseconds: 30 ) ;
2023-02-28 00:41:09 +09:00
/// Android constants
const kActionApplicationDetailsSettings =
" android.settings.APPLICATION_DETAILS_SETTINGS " ;
2023-02-28 19:46:41 +09:00
const kActionAccessibilitySettings = " android.settings.ACCESSIBILITY_SETTINGS " ;
2023-02-28 00:41:09 +09:00
const kRecordAudio = " android.permission.RECORD_AUDIO " ;
const kManageExternalStorage = " android.permission.MANAGE_EXTERNAL_STORAGE " ;
2023-02-28 21:02:42 +09:00
const kRequestIgnoreBatteryOptimizations =
" android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS " ;
2023-02-28 00:41:09 +09:00
const kSystemAlertWindow = " android.permission.SYSTEM_ALERT_WINDOW " ;
/// Android channel invoke type key
2023-02-28 11:31:30 +09:00
class AndroidChannel {
static final kStartAction = " start_action " ;
static final kGetStartOnBootOpt = " get_start_on_boot_opt " ;
static final kSetStartOnBootOpt = " set_start_on_boot_opt " ;
2023-03-01 00:05:06 +09:00
static final kSyncAppDirConfigPath = " sync_app_dir " ;
2023-02-28 11:31:30 +09:00
}
2023-02-28 00:41:09 +09:00
2022-09-13 21:36:38 +08:00
/// flutter/packages/flutter/lib/src/services/keyboard_key.dart -> _keyLabels
/// see [LogicalKeyboardKey.keyLabel]
const Map < int , String > logicalKeyMap = < int , String > {
0x00000000020 : ' VK_SPACE ' ,
0x00000000022 : ' VK_QUOTE ' ,
0x0000000002c : ' VK_COMMA ' ,
0x0000000002d : ' VK_MINUS ' ,
0x0000000002f : ' VK_SLASH ' ,
0x00000000030 : ' VK_0 ' ,
0x00000000031 : ' VK_1 ' ,
0x00000000032 : ' VK_2 ' ,
0x00000000033 : ' VK_3 ' ,
0x00000000034 : ' VK_4 ' ,
0x00000000035 : ' VK_5 ' ,
0x00000000036 : ' VK_6 ' ,
0x00000000037 : ' VK_7 ' ,
0x00000000038 : ' VK_8 ' ,
0x00000000039 : ' VK_9 ' ,
0x0000000003b : ' VK_SEMICOLON ' ,
0x0000000003d : ' VK_PLUS ' , // it is =
0x0000000005b : ' VK_LBRACKET ' ,
0x0000000005c : ' VK_BACKSLASH ' ,
0x0000000005d : ' VK_RBRACKET ' ,
0x00000000061 : ' VK_A ' ,
0x00000000062 : ' VK_B ' ,
0x00000000063 : ' VK_C ' ,
0x00000000064 : ' VK_D ' ,
0x00000000065 : ' VK_E ' ,
0x00000000066 : ' VK_F ' ,
0x00000000067 : ' VK_G ' ,
0x00000000068 : ' VK_H ' ,
0x00000000069 : ' VK_I ' ,
0x0000000006a : ' VK_J ' ,
0x0000000006b : ' VK_K ' ,
0x0000000006c : ' VK_L ' ,
0x0000000006d : ' VK_M ' ,
0x0000000006e : ' VK_N ' ,
0x0000000006f : ' VK_O ' ,
0x00000000070 : ' VK_P ' ,
0x00000000071 : ' VK_Q ' ,
0x00000000072 : ' VK_R ' ,
0x00000000073 : ' VK_S ' ,
0x00000000074 : ' VK_T ' ,
0x00000000075 : ' VK_U ' ,
0x00000000076 : ' VK_V ' ,
0x00000000077 : ' VK_W ' ,
0x00000000078 : ' VK_X ' ,
0x00000000079 : ' VK_Y ' ,
0x0000000007a : ' VK_Z ' ,
0x00100000008 : ' VK_BACK ' ,
0x00100000009 : ' VK_TAB ' ,
0x0010000000d : ' VK_ENTER ' ,
0x0010000001b : ' VK_ESCAPE ' ,
0x0010000007f : ' VK_DELETE ' ,
0x00100000104 : ' VK_CAPITAL ' ,
0x00100000301 : ' VK_DOWN ' ,
0x00100000302 : ' VK_LEFT ' ,
0x00100000303 : ' VK_RIGHT ' ,
0x00100000304 : ' VK_UP ' ,
0x00100000305 : ' VK_END ' ,
0x00100000306 : ' VK_HOME ' ,
0x00100000307 : ' VK_NEXT ' ,
0x00100000308 : ' VK_PRIOR ' ,
0x00100000401 : ' VK_CLEAR ' ,
0x00100000407 : ' VK_INSERT ' ,
0x00100000504 : ' VK_CANCEL ' ,
0x00100000506 : ' VK_EXECUTE ' ,
0x00100000508 : ' VK_HELP ' ,
0x00100000509 : ' VK_PAUSE ' ,
0x0010000050c : ' VK_SELECT ' ,
0x00100000608 : ' VK_PRINT ' ,
0x00100000705 : ' VK_CONVERT ' ,
0x00100000706 : ' VK_FINAL ' ,
0x00100000711 : ' VK_HANGUL ' ,
0x00100000712 : ' VK_HANJA ' ,
0x00100000713 : ' VK_JUNJA ' ,
0x00100000718 : ' VK_KANA ' ,
0x00100000719 : ' VK_KANJI ' ,
0x00100000801 : ' VK_F1 ' ,
0x00100000802 : ' VK_F2 ' ,
0x00100000803 : ' VK_F3 ' ,
0x00100000804 : ' VK_F4 ' ,
0x00100000805 : ' VK_F5 ' ,
0x00100000806 : ' VK_F6 ' ,
0x00100000807 : ' VK_F7 ' ,
0x00100000808 : ' VK_F8 ' ,
0x00100000809 : ' VK_F9 ' ,
0x0010000080a : ' VK_F10 ' ,
0x0010000080b : ' VK_F11 ' ,
0x0010000080c : ' VK_F12 ' ,
0x00100000d2b : ' Apps ' ,
0x00200000002 : ' VK_SLEEP ' ,
0x00200000100 : ' VK_CONTROL ' ,
0x00200000101 : ' RControl ' ,
0x00200000102 : ' VK_SHIFT ' ,
0x00200000103 : ' RShift ' ,
0x00200000104 : ' VK_MENU ' ,
0x00200000105 : ' RAlt ' ,
0x002000001f0 : ' VK_CONTROL ' ,
0x002000001f2 : ' VK_SHIFT ' ,
0x002000001f4 : ' VK_MENU ' ,
0x002000001f6 : ' Meta ' ,
0x0020000022a : ' VK_MULTIPLY ' ,
0x0020000022b : ' VK_ADD ' ,
0x0020000022d : ' VK_SUBTRACT ' ,
0x0020000022e : ' VK_DECIMAL ' ,
0x0020000022f : ' VK_DIVIDE ' ,
0x00200000230 : ' VK_NUMPAD0 ' ,
0x00200000231 : ' VK_NUMPAD1 ' ,
0x00200000232 : ' VK_NUMPAD2 ' ,
0x00200000233 : ' VK_NUMPAD3 ' ,
0x00200000234 : ' VK_NUMPAD4 ' ,
0x00200000235 : ' VK_NUMPAD5 ' ,
0x00200000236 : ' VK_NUMPAD6 ' ,
0x00200000237 : ' VK_NUMPAD7 ' ,
0x00200000238 : ' VK_NUMPAD8 ' ,
0x00200000239 : ' VK_NUMPAD9 ' ,
} ;
/// flutter/packages/flutter/lib/src/services/keyboard_key.dart -> _debugName
/// see [PhysicalKeyboardKey.debugName] -> _debugName
const Map < int , String > physicalKeyMap = < int , String > {
0x00010082 : ' VK_SLEEP ' ,
0x00070004 : ' VK_A ' ,
0x00070005 : ' VK_B ' ,
0x00070006 : ' VK_C ' ,
0x00070007 : ' VK_D ' ,
0x00070008 : ' VK_E ' ,
0x00070009 : ' VK_F ' ,
0x0007000a : ' VK_G ' ,
0x0007000b : ' VK_H ' ,
0x0007000c : ' VK_I ' ,
0x0007000d : ' VK_J ' ,
0x0007000e : ' VK_K ' ,
0x0007000f : ' VK_L ' ,
0x00070010 : ' VK_M ' ,
0x00070011 : ' VK_N ' ,
0x00070012 : ' VK_O ' ,
0x00070013 : ' VK_P ' ,
0x00070014 : ' VK_Q ' ,
0x00070015 : ' VK_R ' ,
0x00070016 : ' VK_S ' ,
0x00070017 : ' VK_T ' ,
0x00070018 : ' VK_U ' ,
0x00070019 : ' VK_V ' ,
0x0007001a : ' VK_W ' ,
0x0007001b : ' VK_X ' ,
0x0007001c : ' VK_Y ' ,
0x0007001d : ' VK_Z ' ,
0x0007001e : ' VK_1 ' ,
0x0007001f : ' VK_2 ' ,
0x00070020 : ' VK_3 ' ,
0x00070021 : ' VK_4 ' ,
0x00070022 : ' VK_5 ' ,
0x00070023 : ' VK_6 ' ,
0x00070024 : ' VK_7 ' ,
0x00070025 : ' VK_8 ' ,
0x00070026 : ' VK_9 ' ,
0x00070027 : ' VK_0 ' ,
0x00070028 : ' VK_ENTER ' ,
0x00070029 : ' VK_ESCAPE ' ,
0x0007002a : ' VK_BACK ' ,
0x0007002b : ' VK_TAB ' ,
0x0007002c : ' VK_SPACE ' ,
0x0007002d : ' VK_MINUS ' ,
0x0007002e : ' VK_PLUS ' , // it is =
0x0007002f : ' VK_LBRACKET ' ,
0x00070030 : ' VK_RBRACKET ' ,
0x00070033 : ' VK_SEMICOLON ' ,
0x00070034 : ' VK_QUOTE ' ,
0x00070036 : ' VK_COMMA ' ,
0x00070038 : ' VK_SLASH ' ,
0x00070039 : ' VK_CAPITAL ' ,
0x0007003a : ' VK_F1 ' ,
0x0007003b : ' VK_F2 ' ,
0x0007003c : ' VK_F3 ' ,
0x0007003d : ' VK_F4 ' ,
0x0007003e : ' VK_F5 ' ,
0x0007003f : ' VK_F6 ' ,
0x00070040 : ' VK_F7 ' ,
0x00070041 : ' VK_F8 ' ,
0x00070042 : ' VK_F9 ' ,
0x00070043 : ' VK_F10 ' ,
0x00070044 : ' VK_F11 ' ,
0x00070045 : ' VK_F12 ' ,
0x00070049 : ' VK_INSERT ' ,
0x0007004a : ' VK_HOME ' ,
0x0007004b : ' VK_PRIOR ' , // Page Up
0x0007004c : ' VK_DELETE ' ,
0x0007004d : ' VK_END ' ,
0x0007004e : ' VK_NEXT ' , // Page Down
0x0007004f : ' VK_RIGHT ' ,
0x00070050 : ' VK_LEFT ' ,
0x00070051 : ' VK_DOWN ' ,
0x00070052 : ' VK_UP ' ,
0x00070053 : ' Num Lock ' , // TODO rust not impl
0x00070054 : ' VK_DIVIDE ' , // numpad
0x00070055 : ' VK_MULTIPLY ' ,
0x00070056 : ' VK_SUBTRACT ' ,
0x00070057 : ' VK_ADD ' ,
0x00070058 : ' VK_ENTER ' , // num enter
2022-09-26 00:50:12 -07:00
0x00070059 : ' VK_NUMPAD1 ' ,
0x0007005a : ' VK_NUMPAD2 ' ,
0x0007005b : ' VK_NUMPAD3 ' ,
0x0007005c : ' VK_NUMPAD4 ' ,
0x0007005d : ' VK_NUMPAD5 ' ,
0x0007005e : ' VK_NUMPAD6 ' ,
0x0007005f : ' VK_NUMPAD7 ' ,
0x00070060 : ' VK_NUMPAD8 ' ,
0x00070061 : ' VK_NUMPAD9 ' ,
0x00070062 : ' VK_NUMPAD0 ' ,
2022-09-13 21:36:38 +08:00
0x00070063 : ' VK_DECIMAL ' ,
0x00070075 : ' VK_HELP ' ,
0x00070077 : ' VK_SELECT ' ,
0x00070088 : ' VK_KANA ' ,
0x0007008a : ' VK_CONVERT ' ,
0x000700e0 : ' VK_CONTROL ' ,
0x000700e1 : ' VK_SHIFT ' ,
0x000700e2 : ' VK_MENU ' ,
0x000700e3 : ' Meta ' ,
0x000700e4 : ' RControl ' ,
0x000700e5 : ' RShift ' ,
0x000700e6 : ' RAlt ' ,
0x000700e7 : ' RWin ' ,
0x000c00b1 : ' VK_PAUSE ' ,
0x000c00cd : ' VK_PAUSE ' ,
0x000c019e : ' LOCK_SCREEN ' ,
0x000c0208 : ' VK_PRINT ' ,
} ;
2022-11-29 23:03:16 +08:00
/// The windows targets in the publish time order.
enum WindowsTarget {
naw , // not a windows target
xp ,
vista ,
w7 ,
w8 ,
w8_1 ,
w10 ,
w11
}
/// A convenient method to transform a build number to the corresponding windows version.
extension WindowsTargetExt on int {
WindowsTarget get windowsVersion = > getWindowsTarget ( this ) ;
}