2022-10-04 12:47:51 +03:00
import ' dart:io ' ;
2022-09-19 15:26:39 +03:00
2023-02-03 12:08:40 +03:00
import ' package:flutter/material.dart ' ;
2022-11-29 18:03:16 +03:00
import ' package:flutter_hbb/common.dart ' ;
2023-02-27 07:01:22 +03:00
import ' package:flutter_hbb/models/state_model.dart ' ;
2023-10-17 09:29:14 +03:00
import ' package:get/get.dart ' ;
2022-11-29 18:03:16 +03:00
2023-10-27 11:19:42 +03:00
const int kMaxVirtualDisplayCount = 4 ;
const int kAllVirtualDisplay = - 1 ;
2022-08-20 14:57:16 +03:00
const double kDesktopRemoteTabBarHeight = 28.0 ;
2023-08-14 13:28:31 +03:00
const int kInvalidWindowId = - 1 ;
2023-02-03 12:08:40 +03:00
const int kMainWindowId = 0 ;
2022-08-23 10:24:04 +03:00
2023-10-08 16:44:54 +03:00
const kAllDisplayValue = - 1 ;
2023-10-25 04:20:51 +03:00
const kKeyLegacyMode = ' legacy ' ;
const kKeyMapMode = ' map ' ;
const kKeyTranslateMode = ' translate ' ;
2023-10-27 11:19:42 +03:00
const String kPlatformAdditionsIsWayland = " is_wayland " ;
const String kPlatformAdditionsHeadless = " headless " ;
const String kPlatformAdditionsIsInstalled = " is_installed " ;
const String kPlatformAdditionsVirtualDisplays = " virtual_displays " ;
2023-10-29 18:11:30 +03:00
const String kPlatformAdditionsHasFileClipboard = " has_file_clipboard " ;
2023-11-14 07:11:38 +03:00
const String kPlatformAdditionsSupportedPrivacyModeImpl = " supported_privacy_mode_impl " ;
2023-10-27 11:19:42 +03:00
2023-01-10 12:13:40 +03:00
const String kPeerPlatformWindows = " Windows " ;
const String kPeerPlatformLinux = " Linux " ;
const String kPeerPlatformMacOS = " Mac OS " ;
const String kPeerPlatformAndroid = " Android " ;
2023-09-13 16:02:21 +03:00
const double kScrollbarThickness = 12.0 ;
2023-02-04 06:23:36 +03:00
/// [kAppTypeMain] used by 'Desktop Main Page' , 'Mobile (Client and Server)', "Install Page"
2022-08-06 12:08:48 +03:00
const String kAppTypeMain = " main " ;
2023-03-07 05:08:41 +03:00
/// [kAppTypeConnectionManager] only for 'Desktop CM Page'
2023-02-04 06:23:36 +03:00
const String kAppTypeConnectionManager = " cm " ;
2023-03-07 05:08:41 +03:00
2022-08-06 12:08:48 +03:00
const String kAppTypeDesktopRemote = " remote " ;
const String kAppTypeDesktopFileTransfer = " file transfer " ;
2022-08-26 06:35:28 +03:00
const String kAppTypeDesktopPortForward = " port forward " ;
2022-09-07 13:57:49 +03:00
2022-12-01 08:52:12 +03:00
const String kWindowMainWindowOnTop = " main_window_on_top " ;
const String kWindowGetWindowInfo = " get_window_info " ;
2023-10-16 19:30:34 +03:00
const String kWindowGetScreenList = " get_screen_list " ;
2023-02-23 01:01:31 +03:00
const String kWindowDisableGrabKeyboard = " disable_grab_keyboard " ;
2022-10-26 09:39:13 +03:00
const String kWindowActionRebuild = " rebuild " ;
2022-11-05 18:41:22 +03:00
const String kWindowEventHide = " hide " ;
const String kWindowEventShow = " show " ;
2022-12-01 08:52:12 +03:00
const String kWindowConnect = " connect " ;
2022-10-26 09:39:13 +03:00
2023-08-02 15:38:09 +03: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 16:44:54 +03:00
const String kWindowEventActiveDisplaySession = " active_display_session " ;
2023-08-02 17:02:18 +03:00
const String kWindowEventGetRemoteList = " get_remote_list " ;
2023-08-03 18:14:40 +03:00
const String kWindowEventGetSessionIdList = " get_session_id_list " ;
2023-08-06 06:21:07 +03:00
const String kWindowEventMoveTabToNewWindow = " move_tab_to_new_window " ;
2023-08-14 15:40:58 +03:00
const String kWindowEventGetCachedSessionData = " get_cached_session_data " ;
2023-10-08 16:44:54 +03:00
const String kWindowEventOpenMonitorSession = " open_monitor_session " ;
2023-08-02 15:38:09 +03:00
2023-08-08 07:12:35 +03: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 " ;
2023-08-01 17:19:38 +03:00
2022-10-12 16:57:19 +03:00
const String kUniLinksPrefix = " rustdesk:// " ;
2023-05-02 18:48:49 +03:00
const String kUrlActionClose = " close " ;
2022-10-12 16:57:19 +03:00
2022-08-11 11:03:04 +03:00
const String kTabLabelHomePage = " Home " ;
const String kTabLabelSettingPage = " Settings " ;
2022-08-10 19:12:47 +03:00
2022-10-14 13:48:41 +03:00
const String kWindowPrefix = " wm_ " ;
2022-11-26 06:40:13 +03:00
const int kWindowMainId = 0 ;
2022-10-14 13:48:41 +03:00
2023-08-09 18:42:53 +03:00
const String kPointerEventKindTouch = " touch " ;
const String kPointerEventKindMouse = " mouse " ;
2023-10-19 07:21:35 +03:00
const String kKeyShowDisplaysAsIndividualWindows =
' displays_as_individual_windows ' ;
const String kKeyUseAllMyDisplaysForTheRemoteSession =
' use_all_my_displays_for_the_remote_session ' ;
2023-10-09 12:22:22 +03:00
const String kKeyShowMonitorsToolbar = ' show_monitors_toolbar ' ;
2023-10-08 16:44:54 +03:00
2022-11-08 08:37:08 +03:00
// the executable name of the portable version
2022-11-05 18:41:22 +03:00
const String kEnvPortableExecutable = " RUSTDESK_APPNAME " ;
2022-09-23 10:12:50 +03:00
const Color kColorWarn = Color . fromARGB ( 255 , 245 , 133 , 59 ) ;
2022-08-31 13:41:55 +03:00
const int kMobileDefaultDisplayWidth = 720 ;
const int kMobileDefaultDisplayHeight = 1280 ;
const int kDesktopDefaultDisplayWidth = 1080 ;
const int kDesktopDefaultDisplayHeight = 720 ;
2022-08-29 13:48:12 +03:00
2023-07-26 16:29:35 +03:00
const int kMobileMaxDisplaySize = 1280 ;
const int kDesktopMaxDisplaySize = 3840 ;
2022-10-09 14:27:30 +03:00
2023-02-23 00:13:21 +03:00
const double kDesktopFileTransferRowHeight = 30.0 ;
2023-02-15 10:03:19 +03:00
const double kDesktopFileTransferHeaderHeight = 25.0 ;
2023-11-13 14:29:16 +03: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 ;
2023-10-19 07:21:35 +03:00
double kNewWindowOffset = Platform . isWindows
? 56.0
: Platform . isLinux
? 50.0
: Platform . isMacOS
? 30.0
: 50.0 ;
2023-02-27 18:41:09 +03:00
EdgeInsets get kDragToResizeAreaPadding = >
! kUseCompatibleUiMode & & Platform . isLinux
2023-10-17 09:29:14 +03:00
? stateGlobal . fullscreen . isTrue | | stateGlobal . isMaximized . value
2023-02-27 18:41:09 +03:00
? EdgeInsets . zero
: EdgeInsets . all ( 5.0 )
: EdgeInsets . zero ;
2023-02-15 10:03:19 +03: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 16:12:52 +03:00
const Size kConnectionManagerWindowSizeClosedChat = Size ( 300 , 490 ) ;
const Size kConnectionManagerWindowSizeOpenChat = Size ( 700 , 490 ) ;
2022-09-28 06:20:57 +03:00
// Tabbar transition duration, now we remove the duration
const Duration kTabTransitionDuration = Duration . zero ;
const double kEmptyMarginTop = 50 ;
2022-10-26 15:13:32 +03:00
const double kDesktopIconButtonSplashRadius = 20 ;
2022-09-26 12:56:32 +03:00
2022-10-27 13:40:45 +03:00
/// [kMinCursorSize] indicates min cursor (w, h)
2022-11-10 07:29:50 +03:00
const int kMinCursorSize = 12 ;
2022-10-27 13:40:45 +03:00
2022-09-19 12:10:12 +03:00
/// [kDefaultScrollAmountMultiplier] indicates how many rows can be scrolled after a minimum scroll action of mouse
2022-09-19 16:09:54 +03:00
const kDefaultScrollAmountMultiplier = 5.0 ;
const kDefaultScrollDuration = Duration ( milliseconds: 50 ) ;
2022-09-27 18:08:01 +03:00
const kDefaultMouseWheelThrottleDuration = Duration ( milliseconds: 50 ) ;
2022-09-20 13:09:02 +03:00
const kFullScreenEdgeSize = 0.0 ;
2023-02-27 07:01:22 +03:00
const kMaximizeEdgeSize = 0.0 ;
2022-10-04 12:47:51 +03:00
var kWindowEdgeSize = Platform . isWindows ? 1.0 : 5.0 ;
2022-10-04 16:19:31 +03:00
const kWindowBorderWidth = 1.0 ;
2022-10-08 13:28:20 +03:00
const kDesktopMenuPadding = EdgeInsets . only ( left: 12.0 , right: 3.0 ) ;
2022-09-19 12:10:12 +03:00
2022-11-10 16:25:12 +03:00
const kInvalidValueStr = ' InvalidValueStr ' ;
// Config key shared by flutter and other ui.
const kCommConfKeyTheme = ' theme ' ;
const kCommConfKeyLang = ' lang ' ;
2022-09-13 16:36:38 +03:00
2022-09-19 15:26:39 +03:00
const kMobilePageConstraints = BoxConstraints ( maxWidth: 600 ) ;
2022-11-08 08:37:08 +03: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 06:19:16 +03: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 09:14:57 +03:00
/// [kScrollModeDefault] Mouse or touchpad, the default scroll mode.
const kScrollModeDefault = ' default ' ;
2023-09-16 12:54:17 +03:00
2023-09-10 09:14:57 +03:00
/// [kScrollModeReverse] Mouse or touchpad, the reverse scroll mode.
const kScrollModeReverse = ' reverse ' ;
2022-11-24 06:19:16 +03: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 15:30:35 +03:00
/// [kRemoteAudioGuestToHost] Guest to host audio mode(default).
const kRemoteAudioGuestToHost = ' guest-to-host ' ;
2023-01-30 17:57:20 +03:00
/// [kRemoteAudioDualWay] dual-way audio mode(default).
const kRemoteAudioDualWay = ' dual-way ' ;
2023-01-30 15:30:35 +03:00
2023-01-06 13:14:31 +03:00
const kIgnoreDpi = true ;
2023-11-17 09:08:21 +03: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-27 18:41:09 +03:00
/// Android constants
const kActionApplicationDetailsSettings =
" android.settings.APPLICATION_DETAILS_SETTINGS " ;
2023-02-28 13:46:41 +03:00
const kActionAccessibilitySettings = " android.settings.ACCESSIBILITY_SETTINGS " ;
2023-02-27 18:41:09 +03:00
const kRecordAudio = " android.permission.RECORD_AUDIO " ;
const kManageExternalStorage = " android.permission.MANAGE_EXTERNAL_STORAGE " ;
2023-02-28 15:02:42 +03:00
const kRequestIgnoreBatteryOptimizations =
" android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS " ;
2023-02-27 18:41:09 +03:00
const kSystemAlertWindow = " android.permission.SYSTEM_ALERT_WINDOW " ;
/// Android channel invoke type key
2023-02-28 05:31:30 +03: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-02-28 18:05:06 +03:00
static final kSyncAppDirConfigPath = " sync_app_dir " ;
2023-02-28 05:31:30 +03:00
}
2023-02-27 18:41:09 +03:00
2022-09-13 16:36:38 +03: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 10:50:12 +03: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 16:36:38 +03: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 18:03:16 +03: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 ) ;
}