From 61283084df9dbbc6099c9b4b719cefe88ecf57a1 Mon Sep 17 00:00:00 2001 From: Marcel Houweling Date: Mon, 2 Aug 2021 17:58:07 +0200 Subject: [PATCH] Add project files. --- .gitattributes | 63 + .gitignore | 340 ++++ InputSimulatorPlus/.nuget/NuGet.Config | 6 + InputSimulatorPlus/.nuget/NuGet.exe | Bin 0 -> 1611264 bytes InputSimulatorPlus/.nuget/NuGet.targets | 153 ++ .../DefaultTemplate.xaml | 602 +++++++ .../UpgradeTemplate.xaml | 76 + InputSimulatorPlus/LICENSE.md | 32 + InputSimulatorPlus/README.md | 78 + .../WindowsInput.SampleClient.Wpf/App.xaml | 8 + .../WindowsInput.SampleClient.Wpf/App.xaml.cs | 16 + .../MainWindow.xaml | 8 + .../MainWindow.xaml.cs | 27 + .../Properties/AssemblyInfo.cs | 55 + .../Properties/Resources.Designer.cs | 71 + .../Properties/Resources.resx | 117 ++ .../Properties/Settings.Designer.cs | 30 + .../Properties/Settings.settings | 7 + .../WindowsInput.SampleClient.Wpf.csproj | 109 ++ .../WindowsInput.Tests/InputBuilderTests.cs | 21 + .../InputSimulatorExamples.cs | 82 + .../Properties/AssemblyInfo.cs | 36 + .../UnicodeText/UnicodeRange.cs | 33 + .../UnicodeText/UnicodeTestForm.Designer.cs | 76 + .../UnicodeText/UnicodeTestForm.cs | 27 + .../UnicodeText/UnicodeTestForm.resx | 120 ++ .../UnicodeText/UnicodeTextTests.cs | 223 +++ .../WindowsInput.Tests.csproj | 100 ++ .../WindowsInput.Tests/WindowsInput.snk | Bin 0 -> 596 bytes .../WindowsInput.Tests/packages.config | 5 + InputSimulatorPlus/WindowsInput.sln | 33 + .../WindowsInput/IInputDeviceStateAdaptor.cs | 55 + .../WindowsInput/IInputMessageDispatcher.cs | 20 + .../WindowsInput/IInputSimulator.cs | 26 + .../WindowsInput/IKeyboardSimulator.cs | 208 +++ .../WindowsInput/IMouseSimulator.cs | 150 ++ .../WindowsInput/InputBuilder.cs | 576 +++++++ .../WindowsInput/InputSimulator.cs | 75 + .../WindowsInput/KeyboardSimulator.cs | 481 ++++++ .../WindowsInput/MouseButton.cs | 23 + .../WindowsInput/MouseSimulator.cs | 313 ++++ .../WindowsInput/Native/DirectInputKeyCode.cs | 925 +++++++++++ .../WindowsInput/Native/HARDWAREINPUT.cs | 28 + .../WindowsInput/Native/INPUT.cs | 30 + .../WindowsInput/Native/InputType.cs | 23 + .../WindowsInput/Native/KEYBDINPUT.cs | 46 + .../WindowsInput/Native/KeyboardFlag.cs | 31 + .../WindowsInput/Native/MOUSEINPUT.cs | 56 + .../Native/MOUSEKEYBDHARDWAREINPUT.cs | 31 + .../WindowsInput/Native/MouseFlag.cs | 76 + .../WindowsInput/Native/NativeMethods.cs | 158 ++ .../WindowsInput/Native/VirtualKeyCode.cs | 960 +++++++++++ .../WindowsInput/Native/XButton.cs | 18 + .../WindowsInput/Properties/AssemblyInfo.cs | 38 + .../WindowsInput/WindowsInput.csproj | 95 ++ .../WindowsInput/WindowsInput.nuspec | 19 + .../WindowsInput/WindowsInput.snk | Bin 0 -> 596 bytes .../WindowsInputDeviceStateAdaptor.cs | 157 ++ .../WindowsInputMessageDispatcher.cs | 28 + LICENSE | 21 + README.md | 104 ++ starcitizen.sln | 31 + starcitizen/App.config | 26 + starcitizen/Audio/AudioPlaybackEngine .cs | 61 + starcitizen/Audio/AutoDisposeFileReader.cs | 35 + starcitizen/Audio/CachedSound.cs | 31 + .../Audio/CachedSoundSampleProvider.cs | 31 + starcitizen/Buttons/StarCitizenBase.cs | 149 ++ starcitizen/Buttons/Static.cs | 157 ++ starcitizen/CommandTools.cs | 189 +++ starcitizen/CryXMLlib/Conversions.cs | 103 ++ starcitizen/CryXMLlib/CryIXml.cs | 171 ++ starcitizen/CryXMLlib/CryXmlBinContext.cs | 47 + starcitizen/CryXMLlib/CryXmlBinHeader.cs | 154 ++ starcitizen/CryXMLlib/CryXmlBinNode.cs | 180 ++ starcitizen/CryXMLlib/CryXmlBinReader.cs | 227 +++ starcitizen/CryXMLlib/CryXmlNodeRef.cs | 116 ++ starcitizen/CryXMLlib/XmlTree.cs | 101 ++ starcitizen/Images/Default.png | Bin 0 -> 3770 bytes starcitizen/Images/categoryIcon.png | Bin 0 -> 2591 bytes starcitizen/Images/categoryIcon@2x.png | Bin 0 -> 6833 bytes starcitizen/Images/icon.png | Bin 0 -> 1820 bytes starcitizen/Images/icon@2x.png | Bin 0 -> 4115 bytes starcitizen/Images/pluginIcon.png | Bin 0 -> 10360 bytes starcitizen/Images/pluginIcon@2x.png | Bin 0 -> 33637 bytes starcitizen/Program.cs | 64 + starcitizen/Properties/AssemblyInfo.cs | 35 + .../PropertyInspector/StarCitizen/Static.html | 324 ++++ starcitizen/PropertyInspector/caret.svg | 3 + starcitizen/PropertyInspector/check.png | Bin 0 -> 234 bytes starcitizen/PropertyInspector/check.svg | 3 + .../PropertyInspector/elg_calendar.svg | 24 + .../PropertyInspector/elg_calendar_inv.svg | 7 + .../PropertyInspector/jquery-3.3.1.min.js | 2 + .../jquery.highlight-within-textarea.css | 68 + .../jquery.highlight-within-textarea.js | 380 +++++ starcitizen/PropertyInspector/rcheck.svg | 3 + starcitizen/PropertyInspector/sdpi.css | 1469 +++++++++++++++++ .../PropertyInspector/sdtools.common.js | 287 ++++ starcitizen/SC/DProfileReader.cs | 451 +++++ starcitizen/SC/SCDefaultProfile.cs | 70 + starcitizen/SC/SCFile.cs | 41 + starcitizen/SC/SCLocale.cs | 19 + starcitizen/SC/SCPath.cs | 273 +++ starcitizen/SC/SCUiText.cs | 139 ++ starcitizen/SC/SCfiles.cs | 385 +++++ starcitizen/SC/TheUser.cs | 14 + .../Sounds/257357__brnck__button-click.wav | Bin 0 -> 68272 bytes ...264443__kickhat__button-sound-closed-1.wav | Bin 0 -> 228522 bytes .../268108__nenadsimic__button-tick.wav | Bin 0 -> 58392 bytes starcitizen/Sounds/471911__juanfg__button.wav | Bin 0 -> 75064 bytes .../63528__florian-reinke__button-off.wav | Bin 0 -> 57312 bytes starcitizen/Sounds/readme.txt | 1 + starcitizen/manifest.json | 43 + starcitizen/p4kFile/p4kDirectory.cs | 148 ++ starcitizen/p4kFile/p4kDirectoryEntry.cs | 208 +++ .../p4kFile/p4kEndOfCentralDirRecord.cs | 97 ++ starcitizen/p4kFile/p4kFile.cs | 94 ++ starcitizen/p4kFile/p4kFileHeader.cs | 324 ++++ starcitizen/p4kFile/p4kFileTStamp.cs | 41 + starcitizen/p4kFile/p4kRecReader.cs | 217 +++ starcitizen/p4kFile/p4kSignatures.cs | 88 + .../p4kFile/p4kZ64EndOfCentralDirLocator.cs | 81 + .../p4kFile/p4kZ64EndOfCentralDirRecord.cs | 103 ++ starcitizen/packages.config | 28 + starcitizen/starcitizen.csproj | 290 ++++ 126 files changed, 14958 insertions(+) create mode 100644 .gitattributes create mode 100644 .gitignore create mode 100644 InputSimulatorPlus/.nuget/NuGet.Config create mode 100644 InputSimulatorPlus/.nuget/NuGet.exe create mode 100644 InputSimulatorPlus/.nuget/NuGet.targets create mode 100644 InputSimulatorPlus/BuildProcessTemplates/DefaultTemplate.xaml create mode 100644 InputSimulatorPlus/BuildProcessTemplates/UpgradeTemplate.xaml create mode 100644 InputSimulatorPlus/LICENSE.md create mode 100644 InputSimulatorPlus/README.md create mode 100644 InputSimulatorPlus/WindowsInput.SampleClient.Wpf/App.xaml create mode 100644 InputSimulatorPlus/WindowsInput.SampleClient.Wpf/App.xaml.cs create mode 100644 InputSimulatorPlus/WindowsInput.SampleClient.Wpf/MainWindow.xaml create mode 100644 InputSimulatorPlus/WindowsInput.SampleClient.Wpf/MainWindow.xaml.cs create mode 100644 InputSimulatorPlus/WindowsInput.SampleClient.Wpf/Properties/AssemblyInfo.cs create mode 100644 InputSimulatorPlus/WindowsInput.SampleClient.Wpf/Properties/Resources.Designer.cs create mode 100644 InputSimulatorPlus/WindowsInput.SampleClient.Wpf/Properties/Resources.resx create mode 100644 InputSimulatorPlus/WindowsInput.SampleClient.Wpf/Properties/Settings.Designer.cs create mode 100644 InputSimulatorPlus/WindowsInput.SampleClient.Wpf/Properties/Settings.settings create mode 100644 InputSimulatorPlus/WindowsInput.SampleClient.Wpf/WindowsInput.SampleClient.Wpf.csproj create mode 100644 InputSimulatorPlus/WindowsInput.Tests/InputBuilderTests.cs create mode 100644 InputSimulatorPlus/WindowsInput.Tests/InputSimulatorExamples.cs create mode 100644 InputSimulatorPlus/WindowsInput.Tests/Properties/AssemblyInfo.cs create mode 100644 InputSimulatorPlus/WindowsInput.Tests/UnicodeText/UnicodeRange.cs create mode 100644 InputSimulatorPlus/WindowsInput.Tests/UnicodeText/UnicodeTestForm.Designer.cs create mode 100644 InputSimulatorPlus/WindowsInput.Tests/UnicodeText/UnicodeTestForm.cs create mode 100644 InputSimulatorPlus/WindowsInput.Tests/UnicodeText/UnicodeTestForm.resx create mode 100644 InputSimulatorPlus/WindowsInput.Tests/UnicodeText/UnicodeTextTests.cs create mode 100644 InputSimulatorPlus/WindowsInput.Tests/WindowsInput.Tests.csproj create mode 100644 InputSimulatorPlus/WindowsInput.Tests/WindowsInput.snk create mode 100644 InputSimulatorPlus/WindowsInput.Tests/packages.config create mode 100644 InputSimulatorPlus/WindowsInput.sln create mode 100644 InputSimulatorPlus/WindowsInput/IInputDeviceStateAdaptor.cs create mode 100644 InputSimulatorPlus/WindowsInput/IInputMessageDispatcher.cs create mode 100644 InputSimulatorPlus/WindowsInput/IInputSimulator.cs create mode 100644 InputSimulatorPlus/WindowsInput/IKeyboardSimulator.cs create mode 100644 InputSimulatorPlus/WindowsInput/IMouseSimulator.cs create mode 100644 InputSimulatorPlus/WindowsInput/InputBuilder.cs create mode 100644 InputSimulatorPlus/WindowsInput/InputSimulator.cs create mode 100644 InputSimulatorPlus/WindowsInput/KeyboardSimulator.cs create mode 100644 InputSimulatorPlus/WindowsInput/MouseButton.cs create mode 100644 InputSimulatorPlus/WindowsInput/MouseSimulator.cs create mode 100644 InputSimulatorPlus/WindowsInput/Native/DirectInputKeyCode.cs create mode 100644 InputSimulatorPlus/WindowsInput/Native/HARDWAREINPUT.cs create mode 100644 InputSimulatorPlus/WindowsInput/Native/INPUT.cs create mode 100644 InputSimulatorPlus/WindowsInput/Native/InputType.cs create mode 100644 InputSimulatorPlus/WindowsInput/Native/KEYBDINPUT.cs create mode 100644 InputSimulatorPlus/WindowsInput/Native/KeyboardFlag.cs create mode 100644 InputSimulatorPlus/WindowsInput/Native/MOUSEINPUT.cs create mode 100644 InputSimulatorPlus/WindowsInput/Native/MOUSEKEYBDHARDWAREINPUT.cs create mode 100644 InputSimulatorPlus/WindowsInput/Native/MouseFlag.cs create mode 100644 InputSimulatorPlus/WindowsInput/Native/NativeMethods.cs create mode 100644 InputSimulatorPlus/WindowsInput/Native/VirtualKeyCode.cs create mode 100644 InputSimulatorPlus/WindowsInput/Native/XButton.cs create mode 100644 InputSimulatorPlus/WindowsInput/Properties/AssemblyInfo.cs create mode 100644 InputSimulatorPlus/WindowsInput/WindowsInput.csproj create mode 100644 InputSimulatorPlus/WindowsInput/WindowsInput.nuspec create mode 100644 InputSimulatorPlus/WindowsInput/WindowsInput.snk create mode 100644 InputSimulatorPlus/WindowsInput/WindowsInputDeviceStateAdaptor.cs create mode 100644 InputSimulatorPlus/WindowsInput/WindowsInputMessageDispatcher.cs create mode 100644 LICENSE create mode 100644 README.md create mode 100644 starcitizen.sln create mode 100644 starcitizen/App.config create mode 100644 starcitizen/Audio/AudioPlaybackEngine .cs create mode 100644 starcitizen/Audio/AutoDisposeFileReader.cs create mode 100644 starcitizen/Audio/CachedSound.cs create mode 100644 starcitizen/Audio/CachedSoundSampleProvider.cs create mode 100644 starcitizen/Buttons/StarCitizenBase.cs create mode 100644 starcitizen/Buttons/Static.cs create mode 100644 starcitizen/CommandTools.cs create mode 100644 starcitizen/CryXMLlib/Conversions.cs create mode 100644 starcitizen/CryXMLlib/CryIXml.cs create mode 100644 starcitizen/CryXMLlib/CryXmlBinContext.cs create mode 100644 starcitizen/CryXMLlib/CryXmlBinHeader.cs create mode 100644 starcitizen/CryXMLlib/CryXmlBinNode.cs create mode 100644 starcitizen/CryXMLlib/CryXmlBinReader.cs create mode 100644 starcitizen/CryXMLlib/CryXmlNodeRef.cs create mode 100644 starcitizen/CryXMLlib/XmlTree.cs create mode 100644 starcitizen/Images/Default.png create mode 100644 starcitizen/Images/categoryIcon.png create mode 100644 starcitizen/Images/categoryIcon@2x.png create mode 100644 starcitizen/Images/icon.png create mode 100644 starcitizen/Images/icon@2x.png create mode 100644 starcitizen/Images/pluginIcon.png create mode 100644 starcitizen/Images/pluginIcon@2x.png create mode 100644 starcitizen/Program.cs create mode 100644 starcitizen/Properties/AssemblyInfo.cs create mode 100644 starcitizen/PropertyInspector/StarCitizen/Static.html create mode 100644 starcitizen/PropertyInspector/caret.svg create mode 100644 starcitizen/PropertyInspector/check.png create mode 100644 starcitizen/PropertyInspector/check.svg create mode 100644 starcitizen/PropertyInspector/elg_calendar.svg create mode 100644 starcitizen/PropertyInspector/elg_calendar_inv.svg create mode 100644 starcitizen/PropertyInspector/jquery-3.3.1.min.js create mode 100644 starcitizen/PropertyInspector/jquery.highlight-within-textarea.css create mode 100644 starcitizen/PropertyInspector/jquery.highlight-within-textarea.js create mode 100644 starcitizen/PropertyInspector/rcheck.svg create mode 100644 starcitizen/PropertyInspector/sdpi.css create mode 100644 starcitizen/PropertyInspector/sdtools.common.js create mode 100644 starcitizen/SC/DProfileReader.cs create mode 100644 starcitizen/SC/SCDefaultProfile.cs create mode 100644 starcitizen/SC/SCFile.cs create mode 100644 starcitizen/SC/SCLocale.cs create mode 100644 starcitizen/SC/SCPath.cs create mode 100644 starcitizen/SC/SCUiText.cs create mode 100644 starcitizen/SC/SCfiles.cs create mode 100644 starcitizen/SC/TheUser.cs create mode 100644 starcitizen/Sounds/257357__brnck__button-click.wav create mode 100644 starcitizen/Sounds/264443__kickhat__button-sound-closed-1.wav create mode 100644 starcitizen/Sounds/268108__nenadsimic__button-tick.wav create mode 100644 starcitizen/Sounds/471911__juanfg__button.wav create mode 100644 starcitizen/Sounds/63528__florian-reinke__button-off.wav create mode 100644 starcitizen/Sounds/readme.txt create mode 100644 starcitizen/manifest.json create mode 100644 starcitizen/p4kFile/p4kDirectory.cs create mode 100644 starcitizen/p4kFile/p4kDirectoryEntry.cs create mode 100644 starcitizen/p4kFile/p4kEndOfCentralDirRecord.cs create mode 100644 starcitizen/p4kFile/p4kFile.cs create mode 100644 starcitizen/p4kFile/p4kFileHeader.cs create mode 100644 starcitizen/p4kFile/p4kFileTStamp.cs create mode 100644 starcitizen/p4kFile/p4kRecReader.cs create mode 100644 starcitizen/p4kFile/p4kSignatures.cs create mode 100644 starcitizen/p4kFile/p4kZ64EndOfCentralDirLocator.cs create mode 100644 starcitizen/p4kFile/p4kZ64EndOfCentralDirRecord.cs create mode 100644 starcitizen/packages.config create mode 100644 starcitizen/starcitizen.csproj diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..1ff0c42 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,63 @@ +############################################################################### +# Set default behavior to automatically normalize line endings. +############################################################################### +* text=auto + +############################################################################### +# Set default behavior for command prompt diff. +# +# This is need for earlier builds of msysgit that does not have it on by +# default for csharp files. +# Note: This is only used by command line +############################################################################### +#*.cs diff=csharp + +############################################################################### +# Set the merge driver for project and solution files +# +# Merging from the command prompt will add diff markers to the files if there +# are conflicts (Merging from VS is not affected by the settings below, in VS +# the diff markers are never inserted). Diff markers may cause the following +# file extensions to fail to load in VS. An alternative would be to treat +# these files as binary and thus will always conflict and require user +# intervention with every merge. To do so, just uncomment the entries below +############################################################################### +#*.sln merge=binary +#*.csproj merge=binary +#*.vbproj merge=binary +#*.vcxproj merge=binary +#*.vcproj merge=binary +#*.dbproj merge=binary +#*.fsproj merge=binary +#*.lsproj merge=binary +#*.wixproj merge=binary +#*.modelproj merge=binary +#*.sqlproj merge=binary +#*.wwaproj merge=binary + +############################################################################### +# behavior for image files +# +# image files are treated as binary by default. +############################################################################### +#*.jpg binary +#*.png binary +#*.gif binary + +############################################################################### +# diff behavior for common document formats +# +# Convert binary document formats to text before diffing them. This feature +# is only available from the command line. Turn it on by uncommenting the +# entries below. +############################################################################### +#*.doc diff=astextplain +#*.DOC diff=astextplain +#*.docx diff=astextplain +#*.DOCX diff=astextplain +#*.dot diff=astextplain +#*.DOT diff=astextplain +#*.pdf diff=astextplain +#*.PDF diff=astextplain +#*.rtf diff=astextplain +#*.RTF diff=astextplain diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..4ce6fdd --- /dev/null +++ b/.gitignore @@ -0,0 +1,340 @@ +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. +## +## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore + +# User-specific files +*.rsuser +*.suo +*.user +*.userosscache +*.sln.docstates + +# User-specific files (MonoDevelop/Xamarin Studio) +*.userprefs + +# Build results +[Dd]ebug/ +[Dd]ebugPublic/ +[Rr]elease/ +[Rr]eleases/ +x64/ +x86/ +[Aa][Rr][Mm]/ +[Aa][Rr][Mm]64/ +bld/ +[Bb]in/ +[Oo]bj/ +[Ll]og/ + +# Visual Studio 2015/2017 cache/options directory +.vs/ +# Uncomment if you have tasks that create the project's static files in wwwroot +#wwwroot/ + +# Visual Studio 2017 auto generated files +Generated\ Files/ + +# MSTest test Results +[Tt]est[Rr]esult*/ +[Bb]uild[Ll]og.* + +# NUNIT +*.VisualState.xml +TestResult.xml + +# Build Results of an ATL Project +[Dd]ebugPS/ +[Rr]eleasePS/ +dlldata.c + +# Benchmark Results +BenchmarkDotNet.Artifacts/ + +# .NET Core +project.lock.json +project.fragment.lock.json +artifacts/ + +# StyleCop +StyleCopReport.xml + +# Files built by Visual Studio +*_i.c +*_p.c +*_h.h +*.ilk +*.meta +*.obj +*.iobj +*.pch +*.pdb +*.ipdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.tmp_proj +*_wpftmp.csproj +*.log +*.vspscc +*.vssscc +.builds +*.pidb +*.svclog +*.scc + +# Chutzpah Test files +_Chutzpah* + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opendb +*.opensdf +*.sdf +*.cachefile +*.VC.db +*.VC.VC.opendb + +# Visual Studio profiler +*.psess +*.vsp +*.vspx +*.sap + +# Visual Studio Trace Files +*.e2e + +# TFS 2012 Local Workspace +$tf/ + +# Guidance Automation Toolkit +*.gpState + +# ReSharper is a .NET coding add-in +_ReSharper*/ +*.[Rr]e[Ss]harper +*.DotSettings.user + +# JustCode is a .NET coding add-in +.JustCode + +# TeamCity is a build add-in +_TeamCity* + +# DotCover is a Code Coverage Tool +*.dotCover + +# AxoCover is a Code Coverage Tool +.axoCover/* +!.axoCover/settings.json + +# Visual Studio code coverage results +*.coverage +*.coveragexml + +# NCrunch +_NCrunch_* +.*crunch*.local.xml +nCrunchTemp_* + +# MightyMoose +*.mm.* +AutoTest.Net/ + +# Web workbench (sass) +.sass-cache/ + +# Installshield output folder +[Ee]xpress/ + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html + +# Click-Once directory +publish/ + +# Publish Web Output +*.[Pp]ublish.xml +*.azurePubxml +# Note: Comment the next line if you want to checkin your web deploy settings, +# but database connection strings (with potential passwords) will be unencrypted +*.pubxml +*.publishproj + +# Microsoft Azure Web App publish settings. Comment the next line if you want to +# checkin your Azure Web App publish settings, but sensitive information contained +# in these scripts will be unencrypted +PublishScripts/ + +# NuGet Packages +*.nupkg +# The packages folder can be ignored because of Package Restore +**/[Pp]ackages/* +# except build/, which is used as an MSBuild target. +!**/[Pp]ackages/build/ +# Uncomment if necessary however generally it will be regenerated when needed +#!**/[Pp]ackages/repositories.config +# NuGet v3's project.json files produces more ignorable files +*.nuget.props +*.nuget.targets + +# Microsoft Azure Build Output +csx/ +*.build.csdef + +# Microsoft Azure Emulator +ecf/ +rcf/ + +# Windows Store app package directories and files +AppPackages/ +BundleArtifacts/ +Package.StoreAssociation.xml +_pkginfo.txt +*.appx + +# Visual Studio cache files +# files ending in .cache can be ignored +*.[Cc]ache +# but keep track of directories ending in .cache +!?*.[Cc]ache/ + +# Others +ClientBin/ +~$* +*~ +*.dbmdl +*.dbproj.schemaview +*.jfm +*.pfx +*.publishsettings +orleans.codegen.cs + +# Including strong name files can present a security risk +# (https://github.com/github/gitignore/pull/2483#issue-259490424) +#*.snk + +# Since there are multiple workflows, uncomment next line to ignore bower_components +# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) +#bower_components/ + +# RIA/Silverlight projects +Generated_Code/ + +# Backup & report files from converting an old project file +# to a newer Visual Studio version. Backup files are not needed, +# because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML +UpgradeLog*.htm +ServiceFabricBackup/ +*.rptproj.bak + +# SQL Server files +*.mdf +*.ldf +*.ndf + +# Business Intelligence projects +*.rdl.data +*.bim.layout +*.bim_*.settings +*.rptproj.rsuser +*- Backup*.rdl + +# Microsoft Fakes +FakesAssemblies/ + +# GhostDoc plugin setting file +*.GhostDoc.xml + +# Node.js Tools for Visual Studio +.ntvs_analysis.dat +node_modules/ + +# Visual Studio 6 build log +*.plg + +# Visual Studio 6 workspace options file +*.opt + +# Visual Studio 6 auto-generated workspace file (contains which files were open etc.) +*.vbw + +# Visual Studio LightSwitch build output +**/*.HTMLClient/GeneratedArtifacts +**/*.DesktopClient/GeneratedArtifacts +**/*.DesktopClient/ModelManifest.xml +**/*.Server/GeneratedArtifacts +**/*.Server/ModelManifest.xml +_Pvt_Extensions + +# Paket dependency manager +.paket/paket.exe +paket-files/ + +# FAKE - F# Make +.fake/ + +# JetBrains Rider +.idea/ +*.sln.iml + +# CodeRush personal settings +.cr/personal + +# Python Tools for Visual Studio (PTVS) +__pycache__/ +*.pyc + +# Cake - Uncomment if you are using it +# tools/** +# !tools/packages.config + +# Tabs Studio +*.tss + +# Telerik's JustMock configuration file +*.jmconfig + +# BizTalk build output +*.btp.cs +*.btm.cs +*.odx.cs +*.xsd.cs + +# OpenCover UI analysis results +OpenCover/ + +# Azure Stream Analytics local run output +ASALocalRun/ + +# MSBuild Binary and Structured Log +*.binlog + +# NVidia Nsight GPU debugger configuration file +*.nvuser + +# MFractors (Xamarin productivity tool) working folder +.mfractor/ + +# Local History for Visual Studio +.localhistory/ + +# BeatPulse healthcheck temp database +healthchecksdb \ No newline at end of file diff --git a/InputSimulatorPlus/.nuget/NuGet.Config b/InputSimulatorPlus/.nuget/NuGet.Config new file mode 100644 index 0000000..67f8ea0 --- /dev/null +++ b/InputSimulatorPlus/.nuget/NuGet.Config @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/InputSimulatorPlus/.nuget/NuGet.exe b/InputSimulatorPlus/.nuget/NuGet.exe new file mode 100644 index 0000000000000000000000000000000000000000..8f613402956f9802681f150b1cb51f8400eb628e GIT binary patch literal 1611264 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
AXHh>@<2QYNztwsT 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

Q#DE^h+og#6qzgBXJRF3#s$tjY1{%a+tNVkRI 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

_vEU-9brq$&;EsL5F>D_ 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

#7`>6~`0&Cpsiw48uW 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 z%0D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

L{ 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 + + + $(MSBuildProjectDirectory)\..\ + + + false + + + false + + + true + + + false + + + + + + + + + + + $([System.IO.Path]::Combine($(SolutionDir), ".nuget")) + $([System.IO.Path]::Combine($(ProjectDir), "packages.config")) + $([System.IO.Path]::Combine($(SolutionDir), "packages")) + + + + + $(SolutionDir).nuget + packages.config + $(SolutionDir)packages + + + + + $(NuGetToolsPath)\nuget.exe + @(PackageSource) + + "$(NuGetExePath)" + mono --runtime=v4.0.30319 $(NuGetExePath) + + $(TargetDir.Trim('\\')) + + -RequireConsent + + $(NuGetCommand) install "$(PackagesConfig)" -source "$(PackageSources)" $(RequireConsentSwitch) -o "$(PackagesDir)" + $(NuGetCommand) pack "$(ProjectPath)" -p Configuration=$(Configuration) -o "$(PackageOutputDir)" -symbols + + + + RestorePackages; + $(BuildDependsOn); + + + + + $(BuildDependsOn); + BuildPackage; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/InputSimulatorPlus/BuildProcessTemplates/DefaultTemplate.xaml b/InputSimulatorPlus/BuildProcessTemplates/DefaultTemplate.xaml new file mode 100644 index 0000000..12cc624 --- /dev/null +++ b/InputSimulatorPlus/BuildProcessTemplates/DefaultTemplate.xaml @@ -0,0 +1,602 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Assembly references and imported namespaces serialized as XML namespaces + + + True + + + + + + + + + True + + + + + + + True + + + + + + + + + + + True + + + + + + + + + + + + + + + + + + + + True + + + + + + + + + + + + + + + + + + + + + + + + + + + + True + + + + + + + + + + + + + + + + + + + True + + + + + + + + + + + + True + + + + + + + + + + + + + + True + + + + + + + + + + + + + + + + + + + True + + + + + + + + + + + + + + + + True + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + True + + + + + + + + + + + + + + + + + + + + + + True + + + + + + + + + True + + + + + + + + + + + + + + + True + + + + + + True + + + + + + + + + + + + + + + + + + + + + + + + + True + + + + + + + + + + + + + + + + + + False + + + + + + + + + + True + + + + + + + + + + + + + + + + + + + + + + + + + + True + + + + + + + + + + + + + + + + + + + + + True + + + + + + + + + + + + + + + + + + True + + + + + + + + + + + + + + + True + + + + + + + + + + + + + + + + + + + + + False + + + + + + + + + + True + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + False + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + True + + + + + + + + + + + + + + + + + + + + + + + + + False + + + + + + + + + + + + + + + + + + + + + + + + + + False + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/InputSimulatorPlus/BuildProcessTemplates/UpgradeTemplate.xaml b/InputSimulatorPlus/BuildProcessTemplates/UpgradeTemplate.xaml new file mode 100644 index 0000000..166acb2 --- /dev/null +++ b/InputSimulatorPlus/BuildProcessTemplates/UpgradeTemplate.xaml @@ -0,0 +1,76 @@ + + + + + + + + + + + + + + + + + + + + [New Microsoft.TeamFoundation.Build.Workflow.Activities.AgentSettings() With {.MaxWaitTime = New System.TimeSpan(4, 0, 0), .MaxExecutionTime = New System.TimeSpan(0, 0, 0), .TagComparison = Microsoft.TeamFoundation.Build.Workflow.Activities.TagComparison.MatchExactly }] + + + + [Microsoft.TeamFoundation.Build.Workflow.Activities.ToolPlatform.Auto] + [False] + [False] + + + + + + + + + + [Microsoft.TeamFoundation.VersionControl.Client.RecursionType.OneLevel] + [Microsoft.TeamFoundation.Build.Workflow.BuildVerbosity.Normal] + + + + All + Assembly references and imported namespaces serialized as XML namespaces + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/InputSimulatorPlus/LICENSE.md b/InputSimulatorPlus/LICENSE.md new file mode 100644 index 0000000..425687a --- /dev/null +++ b/InputSimulatorPlus/LICENSE.md @@ -0,0 +1,32 @@ +Ms-PL +Microsoft Public License (Ms-PL) + +This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software. + +1. Definitions + +The terms "reproduce," "reproduction," "derivative works," and "distribution" have the same meaning here as under U.S. copyright law. + +A "contribution" is the original software, or any additions or changes to the software. + +A "contributor" is any person that distributes its contribution under this license. + +"Licensed patents" are a contributor's patent claims that read directly on its contribution. + +2. Grant of Rights + +(A) Copyright Grant- Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create. + +(B) Patent Grant- Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software. + +3. Conditions and Limitations + +(A) No Trademark License- This license does not grant you rights to use any contributors' name, logo, or trademarks. + +(B) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically. + +(C) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software. + +(D) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license. + +(E) The software is licensed "as-is." You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement. \ No newline at end of file diff --git a/InputSimulatorPlus/README.md b/InputSimulatorPlus/README.md new file mode 100644 index 0000000..8523dde --- /dev/null +++ b/InputSimulatorPlus/README.md @@ -0,0 +1,78 @@ +# Windows Input Simulator Plus +This library is a fork of Michael Noonan's *Windows Input Simulator* (a C# wrapper around the `SendInput` functionality of Windows) and it can be used as a replacement of the original library without any source code changes. + +This fork supports scan codes, making it compatible with many applications that the original library does not support. + +## NuGet +Install-Package InputSimulatorPlus + +# Examples + +## Example: Single key press +```csharp +public void PressTheSpacebar() +{ + InputSimulator.SimulateKeyPress(VirtualKeyCode.SPACE); +} +``` + +## Example: Key-down and Key-up +```csharp +public void ShoutHello() +{ + // Simulate each key stroke + InputSimulator.SimulateKeyDown(VirtualKeyCode.SHIFT); + InputSimulator.SimulateKeyPress(VirtualKeyCode.VK_H); + InputSimulator.SimulateKeyPress(VirtualKeyCode.VK_E); + InputSimulator.SimulateKeyPress(VirtualKeyCode.VK_L); + InputSimulator.SimulateKeyPress(VirtualKeyCode.VK_L); + InputSimulator.SimulateKeyPress(VirtualKeyCode.VK_O); + InputSimulator.SimulateKeyPress(VirtualKeyCode.VK_1); + InputSimulator.SimulateKeyUp(VirtualKeyCode.SHIFT); + + // Alternatively you can simulate text entry to acheive the same end result + InputSimulator.SimulateTextEntry("HELLO!"); +} +``` + +## Example: Modified keystrokes such as CTRL-C +```csharp +public void SimulateSomeModifiedKeystrokes() +{ + // CTRL-C (effectively a copy command in many situations) + InputSimulator.SimulateModifiedKeyStroke(VirtualKeyCode.CONTROL, VirtualKeyCode.VK_C); + + // You can simulate chords with multiple modifiers + // For example CTRL-K-C whic is simulated as + // CTRL-down, K, C, CTRL-up + InputSimulator.SimulateModifiedKeyStroke(VirtualKeyCode.CONTROL, new [] {VirtualKeyCode.VK_K, VirtualKeyCode.VK_C}); + + // You can simulate complex chords with multiple modifiers and key presses + // For example CTRL-ALT-SHIFT-ESC-K which is simulated as + // CTRL-down, ALT-down, SHIFT-down, press ESC, press K, SHIFT-up, ALT-up, CTRL-up + InputSimulator.SimulateModifiedKeyStroke( + new[] { VirtualKeyCode.CONTROL, VirtualKeyCode.MENU, VirtualKeyCode.SHIFT }, + new[] { VirtualKeyCode.ESCAPE, VirtualKeyCode.VK_K }); +} +``` + +## Example: Simulate text entry +```csharp +public void SayHello() +{ + InputSimulator.SimulateTextEntry("Say hello!"); +} +``` + +## Example: Determine the state of different types of keys +```csharp +public void GetKeyStatus() +{ + // Determines if the shift key is currently down + var isShiftKeyDown = InputSimulator.IsKeyDown(VirtualKeyCode.SHIFT); + + // Determines if the caps lock key is currently in effect (toggled on) + var isCapsLockOn = InputSimulator.IsTogglingKeyInEffect(VirtualKeyCode.CAPITAL); +} +``` + diff --git a/InputSimulatorPlus/WindowsInput.SampleClient.Wpf/App.xaml b/InputSimulatorPlus/WindowsInput.SampleClient.Wpf/App.xaml new file mode 100644 index 0000000..7146b2e --- /dev/null +++ b/InputSimulatorPlus/WindowsInput.SampleClient.Wpf/App.xaml @@ -0,0 +1,8 @@ + + + + + diff --git a/InputSimulatorPlus/WindowsInput.SampleClient.Wpf/App.xaml.cs b/InputSimulatorPlus/WindowsInput.SampleClient.Wpf/App.xaml.cs new file mode 100644 index 0000000..fc9f846 --- /dev/null +++ b/InputSimulatorPlus/WindowsInput.SampleClient.Wpf/App.xaml.cs @@ -0,0 +1,16 @@ +using System; +using System.Collections.Generic; +using System.Configuration; +using System.Data; +using System.Linq; +using System.Windows; + +namespace InputSimulator.SampleClient.Wpf +{ + ///

+ /// Interaction logic for App.xaml + /// + public partial class App : Application + { + } +} diff --git a/InputSimulatorPlus/WindowsInput.SampleClient.Wpf/MainWindow.xaml b/InputSimulatorPlus/WindowsInput.SampleClient.Wpf/MainWindow.xaml new file mode 100644 index 0000000..cb15ab6 --- /dev/null +++ b/InputSimulatorPlus/WindowsInput.SampleClient.Wpf/MainWindow.xaml @@ -0,0 +1,8 @@ + + + + + diff --git a/InputSimulatorPlus/WindowsInput.SampleClient.Wpf/MainWindow.xaml.cs b/InputSimulatorPlus/WindowsInput.SampleClient.Wpf/MainWindow.xaml.cs new file mode 100644 index 0000000..1083ae3 --- /dev/null +++ b/InputSimulatorPlus/WindowsInput.SampleClient.Wpf/MainWindow.xaml.cs @@ -0,0 +1,27 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Data; +using System.Windows.Documents; +using System.Windows.Input; +using System.Windows.Media; +using System.Windows.Media.Imaging; +using System.Windows.Navigation; +using System.Windows.Shapes; + +namespace InputSimulator.SampleClient.Wpf +{ + /// + /// Interaction logic for MainWindow.xaml + /// + public partial class MainWindow : Window + { + public MainWindow() + { + InitializeComponent(); + } + } +} diff --git a/InputSimulatorPlus/WindowsInput.SampleClient.Wpf/Properties/AssemblyInfo.cs b/InputSimulatorPlus/WindowsInput.SampleClient.Wpf/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..5a98214 --- /dev/null +++ b/InputSimulatorPlus/WindowsInput.SampleClient.Wpf/Properties/AssemblyInfo.cs @@ -0,0 +1,55 @@ +using System.Reflection; +using System.Resources; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; +using System.Windows; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("InputSimulator.SampleClient.Wpf")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("Microsoft")] +[assembly: AssemblyProduct("InputSimulator.SampleClient.Wpf")] +[assembly: AssemblyCopyright("Copyright © Microsoft 2010")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +//In order to begin building localizable applications, set +//CultureYouAreCodingWith in your .csproj file +//inside a . For example, if you are using US english +//in your source files, set the to en-US. Then uncomment +//the NeutralResourceLanguage attribute below. Update the "en-US" in +//the line below to match the UICulture setting in the project file. + +//[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)] + + +[assembly: ThemeInfo( + ResourceDictionaryLocation.None, //where theme specific resource dictionaries are located + //(used if a resource is not found in the page, + // or application resource dictionaries) + ResourceDictionaryLocation.SourceAssembly //where the generic resource dictionary is located + //(used if a resource is not found in the page, + // app, or any theme specific resource dictionaries) +)] + + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/InputSimulatorPlus/WindowsInput.SampleClient.Wpf/Properties/Resources.Designer.cs b/InputSimulatorPlus/WindowsInput.SampleClient.Wpf/Properties/Resources.Designer.cs new file mode 100644 index 0000000..e5f3c11 --- /dev/null +++ b/InputSimulatorPlus/WindowsInput.SampleClient.Wpf/Properties/Resources.Designer.cs @@ -0,0 +1,71 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30128.1 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace InputSimulator.SampleClient.Wpf.Properties +{ + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources + { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() + { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager + { + get + { + if ((resourceMan == null)) + { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("InputSimulator.SampleClient.Wpf.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture + { + get + { + return resourceCulture; + } + set + { + resourceCulture = value; + } + } + } +} diff --git a/InputSimulatorPlus/WindowsInput.SampleClient.Wpf/Properties/Resources.resx b/InputSimulatorPlus/WindowsInput.SampleClient.Wpf/Properties/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/InputSimulatorPlus/WindowsInput.SampleClient.Wpf/Properties/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/InputSimulatorPlus/WindowsInput.SampleClient.Wpf/Properties/Settings.Designer.cs b/InputSimulatorPlus/WindowsInput.SampleClient.Wpf/Properties/Settings.Designer.cs new file mode 100644 index 0000000..66b865d --- /dev/null +++ b/InputSimulatorPlus/WindowsInput.SampleClient.Wpf/Properties/Settings.Designer.cs @@ -0,0 +1,30 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30128.1 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace InputSimulator.SampleClient.Wpf.Properties +{ + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "10.0.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase + { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default + { + get + { + return defaultInstance; + } + } + } +} diff --git a/InputSimulatorPlus/WindowsInput.SampleClient.Wpf/Properties/Settings.settings b/InputSimulatorPlus/WindowsInput.SampleClient.Wpf/Properties/Settings.settings new file mode 100644 index 0000000..033d7a5 --- /dev/null +++ b/InputSimulatorPlus/WindowsInput.SampleClient.Wpf/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/InputSimulatorPlus/WindowsInput.SampleClient.Wpf/WindowsInput.SampleClient.Wpf.csproj b/InputSimulatorPlus/WindowsInput.SampleClient.Wpf/WindowsInput.SampleClient.Wpf.csproj new file mode 100644 index 0000000..9d55488 --- /dev/null +++ b/InputSimulatorPlus/WindowsInput.SampleClient.Wpf/WindowsInput.SampleClient.Wpf.csproj @@ -0,0 +1,109 @@ + + + + Debug + x86 + 8.0.30703 + 2.0 + {DE70B414-25CB-4C64-82EE-3955FECDF762} + WinExe + Properties + InputSimulator.SampleClient.Wpf + InputSimulator.SampleClient.Wpf + v4.0 + Client + 512 + {60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + 4 + + + x86 + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + x86 + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + + + + + 4.0 + + + + + + + + MSBuild:Compile + Designer + + + MSBuild:Compile + Designer + + + App.xaml + Code + + + MainWindow.xaml + Code + + + + + Code + + + True + True + Resources.resx + + + True + Settings.settings + True + + + ResXFileCodeGenerator + Resources.Designer.cs + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + + + + {3549CD6F-80F8-450F-B99E-CF0A736B1F2A} + InputSimulator + + + + + \ No newline at end of file diff --git a/InputSimulatorPlus/WindowsInput.Tests/InputBuilderTests.cs b/InputSimulatorPlus/WindowsInput.Tests/InputBuilderTests.cs new file mode 100644 index 0000000..8c51ffc --- /dev/null +++ b/InputSimulatorPlus/WindowsInput.Tests/InputBuilderTests.cs @@ -0,0 +1,21 @@ +using System.Linq; +using NUnit.Framework; +using WindowsInput.Native; + +namespace WindowsInput.Tests +{ + [TestFixture] + public class InputBuilderTests + { + [Test] + public void AddKeyDown() + { + var builder = new InputBuilder(); + Assert.That(builder.ToArray(), Is.Empty); + builder.AddKeyDown(VirtualKeyCode.VK_A); + Assert.That(builder.Count(), Is.EqualTo(1)); + Assert.That(builder[0].Type, Is.EqualTo((uint)InputType.Keyboard)); + Assert.That(builder[0].Data.Keyboard.KeyCode, Is.EqualTo((ushort)VirtualKeyCode.VK_A)); + } + } +} diff --git a/InputSimulatorPlus/WindowsInput.Tests/InputSimulatorExamples.cs b/InputSimulatorPlus/WindowsInput.Tests/InputSimulatorExamples.cs new file mode 100644 index 0000000..c4cf317 --- /dev/null +++ b/InputSimulatorPlus/WindowsInput.Tests/InputSimulatorExamples.cs @@ -0,0 +1,82 @@ +using NUnit.Framework; +using WindowsInput.Native; + +namespace WindowsInput.Tests +{ + [TestFixture] + public class InputSimulatorExamples + { + [Test] + [Explicit] + public void OpenWindowsExplorer() + { + var sim = new InputSimulator(); + sim.Keyboard.ModifiedKeyStroke(VirtualKeyCode.LWIN, VirtualKeyCode.VK_E); + } + + [Test] + [Explicit] + public void SayHello() + { + var sim = new InputSimulator(); + sim.Keyboard + .ModifiedKeyStroke(VirtualKeyCode.LWIN, VirtualKeyCode.VK_R) + .Sleep(1000) + .TextEntry("notepad") + .Sleep(1000) + .KeyPress(VirtualKeyCode.RETURN) + .Sleep(1000) + .TextEntry("These are your orders if you choose to accept them...") + .TextEntry("This message will self destruct in 5 seconds.") + .Sleep(5000) + .ModifiedKeyStroke(VirtualKeyCode.MENU, VirtualKeyCode.SPACE) + .KeyPress(VirtualKeyCode.DOWN) + .KeyPress(VirtualKeyCode.RETURN); + + var i = 10; + while (i-- > 0) + { + sim.Keyboard.KeyPress(VirtualKeyCode.DOWN).Sleep(100); + } + + sim.Keyboard + .KeyPress(VirtualKeyCode.RETURN) + .Sleep(1000) + .ModifiedKeyStroke(VirtualKeyCode.MENU, VirtualKeyCode.F4) + .KeyPress(VirtualKeyCode.VK_N); + } + + [Test] + [Explicit] + public void AnotherTest() + { + var sim = new InputSimulator(); + sim.Keyboard.KeyPress(VirtualKeyCode.SPACE); + + sim.Keyboard.ModifiedKeyStroke(VirtualKeyCode.LWIN, VirtualKeyCode.VK_R) + .Sleep(1000) + .TextEntry("mspaint") + .Sleep(1000) + .KeyPress(VirtualKeyCode.RETURN) + .Sleep(1000) + .Mouse + .LeftButtonDown() + .MoveMouseToPositionOnVirtualDesktop(65535/2, 65535/2) + .LeftButtonUp(); + + } + + [Test] + [Explicit] + public void TestMouseMoveTo() + { + var sim = new InputSimulator(); + sim.Mouse + .MoveMouseTo(0, 0) + .Sleep(1000) + .MoveMouseTo(65535, 65535) + .Sleep(1000) + .MoveMouseTo(65535/2, 65535/2); + } + } +} \ No newline at end of file diff --git a/InputSimulatorPlus/WindowsInput.Tests/Properties/AssemblyInfo.cs b/InputSimulatorPlus/WindowsInput.Tests/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..749ab1e --- /dev/null +++ b/InputSimulatorPlus/WindowsInput.Tests/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("WindowsInput.UnitTests")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("Microsoft")] +[assembly: AssemblyProduct("WindowsInput.UnitTests")] +[assembly: AssemblyCopyright("Copyright © michaelnoonan 2010")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("9e1ff335-ed74-4135-92cf-5e4cf1d38344")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("0.2.0.0")] +[assembly: AssemblyFileVersion("0.2.0.0")] diff --git a/InputSimulatorPlus/WindowsInput.Tests/UnicodeText/UnicodeRange.cs b/InputSimulatorPlus/WindowsInput.Tests/UnicodeText/UnicodeRange.cs new file mode 100644 index 0000000..3522fee --- /dev/null +++ b/InputSimulatorPlus/WindowsInput.Tests/UnicodeText/UnicodeRange.cs @@ -0,0 +1,33 @@ +using System.Text; + +namespace WindowsInput.Tests.UnicodeText +{ + public class UnicodeRange + { + public string Name { get; set; } + public int Low { get; set; } + public int High { get; set; } + + public string Characters + { + get + { + var i = Low; + var sb = new StringBuilder(High - Low + 10); + while (i <= High) + { + sb.Append(char.ConvertFromUtf32(i)); + i++; + } + return sb.ToString(); + } + } + + public UnicodeRange(string name, int low, int high) + { + Name = name; + Low = low; + High = high; + } + } +} \ No newline at end of file diff --git a/InputSimulatorPlus/WindowsInput.Tests/UnicodeText/UnicodeTestForm.Designer.cs b/InputSimulatorPlus/WindowsInput.Tests/UnicodeText/UnicodeTestForm.Designer.cs new file mode 100644 index 0000000..6d5dca4 --- /dev/null +++ b/InputSimulatorPlus/WindowsInput.Tests/UnicodeText/UnicodeTestForm.Designer.cs @@ -0,0 +1,76 @@ +namespace WindowsInput.Tests.UnicodeText +{ + partial class UnicodeTestForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.RecievedTextBox = new System.Windows.Forms.TextBox(); + this.ExpectedTextBox = new System.Windows.Forms.TextBox(); + this.SuspendLayout(); + // + // RecievedTextBox + // + this.RecievedTextBox.Dock = System.Windows.Forms.DockStyle.Top; + this.RecievedTextBox.Font = new System.Drawing.Font("Segoe UI", 18F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.RecievedTextBox.Location = new System.Drawing.Point(0, 0); + this.RecievedTextBox.Name = "RecievedTextBox"; + this.RecievedTextBox.Size = new System.Drawing.Size(981, 39); + this.RecievedTextBox.TabIndex = 0; + // + // ExpectedTextBox + // + this.ExpectedTextBox.Dock = System.Windows.Forms.DockStyle.Bottom; + this.ExpectedTextBox.Font = new System.Drawing.Font("Segoe UI", 18F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.ExpectedTextBox.Location = new System.Drawing.Point(0, 40); + this.ExpectedTextBox.Name = "ExpectedTextBox"; + this.ExpectedTextBox.ReadOnly = true; + this.ExpectedTextBox.Size = new System.Drawing.Size(981, 39); + this.ExpectedTextBox.TabIndex = 1; + // + // UnicodeTestForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(981, 79); + this.Controls.Add(this.ExpectedTextBox); + this.Controls.Add(this.RecievedTextBox); + this.Name = "UnicodeTestForm"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "UnicodeTestForm"; + this.TopMost = true; + this.WindowState = System.Windows.Forms.FormWindowState.Maximized; + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.TextBox RecievedTextBox; + private System.Windows.Forms.TextBox ExpectedTextBox; + } +} \ No newline at end of file diff --git a/InputSimulatorPlus/WindowsInput.Tests/UnicodeText/UnicodeTestForm.cs b/InputSimulatorPlus/WindowsInput.Tests/UnicodeText/UnicodeTestForm.cs new file mode 100644 index 0000000..4bdab90 --- /dev/null +++ b/InputSimulatorPlus/WindowsInput.Tests/UnicodeText/UnicodeTestForm.cs @@ -0,0 +1,27 @@ +using System; +using System.Windows.Forms; + +namespace WindowsInput.Tests.UnicodeText +{ + public partial class UnicodeTestForm : Form + { + public UnicodeTestForm() + { + InitializeComponent(); + } + + public string Expected + { + get { return ExpectedTextBox.Text; } + set { ExpectedTextBox.Text = value; } + } + + public string Recieved { get { return RecievedTextBox.Text; } } + + protected override void OnLoad(EventArgs e) + { + base.OnLoad(e); + RecievedTextBox.Focus(); + } + } +} diff --git a/InputSimulatorPlus/WindowsInput.Tests/UnicodeText/UnicodeTestForm.resx b/InputSimulatorPlus/WindowsInput.Tests/UnicodeText/UnicodeTestForm.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/InputSimulatorPlus/WindowsInput.Tests/UnicodeText/UnicodeTestForm.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/InputSimulatorPlus/WindowsInput.Tests/UnicodeText/UnicodeTextTests.cs b/InputSimulatorPlus/WindowsInput.Tests/UnicodeText/UnicodeTextTests.cs new file mode 100644 index 0000000..4373dcb --- /dev/null +++ b/InputSimulatorPlus/WindowsInput.Tests/UnicodeText/UnicodeTextTests.cs @@ -0,0 +1,223 @@ +using System; +using System.Net; +using System.Threading; +using System.Threading.Tasks; +using HtmlAgilityPack; +using NUnit.Framework; + +namespace WindowsInput.Tests.UnicodeText +{ + [TestFixture] + public class UnicodeTextTests + { + private TestCaseData[] _unicodeTestCases; + public TestCaseData[] UnicodeTestCases + { + get + { + if (_unicodeTestCases == null) + { + var ranges = GetUnicodeRanges(); + _unicodeTestCases = Array.ConvertAll(ranges, BuildTestCase); + } + return _unicodeTestCases; + } + } + + private TestCaseData BuildTestCase(UnicodeRange input) + { + return new TestCaseData(input).SetName(input.Name); + } + + [Test] + [Explicit] + [TestCaseSource("UnicodeTestCases")] + public void TestUnicodeRanges(UnicodeRange range) + { + // ReSharper disable AccessToDisposedClosure + using (var form = new UnicodeTestForm + { + Expected = range.Characters + }) + { + var ready = false; + var formTask = Task.Factory.StartNew( + () => + { + form.Shown += (x, y) => ready = true; + form.ShowDialog(); + }, TaskCreationOptions.LongRunning); + + var simTask = Task.Factory.StartNew( + () => + { + while (!ready) + { + Thread.Sleep(250); + } + var sim = new InputSimulator(); + sim.Keyboard.TextEntry(range.Characters); + while (form.Recieved != form.Expected) + { + Thread.Sleep(500); + } + form.Close(); + }, TaskCreationOptions.LongRunning); + + Task.WaitAll(new[] {formTask, simTask}, TimeSpan.FromSeconds(60)); + Assert.That(form.Recieved, Is.EqualTo(form.Expected)); + } + // ReSharper restore AccessToDisposedClosure + } + + [Test] + [Explicit] + public void GetCharacterRanges() + { + using (var client = new WebClient()) + { + var html = client.DownloadString("http://jrgraphix.net/r/Unicode/"); + var htmlDoc = new HtmlDocument(); + htmlDoc.LoadHtml(html); + foreach (var link in htmlDoc.DocumentNode.SelectNodes("//a[@href]")) + { + var a = link.GetAttributeValue("href", "unknown"); + if (a.Contains("Unicode")) + { + a = "0x" + a.Replace("/r/Unicode/", "").Replace("-", ", 0x") + "),"; + Console.WriteLine("new UnicodeRange(\"" + link.InnerText + "\", " + a); + } + } + } + } + + public UnicodeRange[] GetUnicodeRanges() + { + return new[] + { + new UnicodeRange("Basic Latin", 0x0020, 0x007F), + new UnicodeRange("Block Elements", 0x2580, 0x259F), + new UnicodeRange("Latin-1 Supplement", 0x00A0, 0x00FF), + new UnicodeRange("Geometric Shapes", 0x25A0, 0x25FF), + new UnicodeRange("Latin Extended-A", 0x0100, 0x017F), + new UnicodeRange("Miscellaneous Symbols", 0x2600, 0x26FF), + new UnicodeRange("Latin Extended-B", 0x0180, 0x024F), + new UnicodeRange("Dingbats", 0x2700, 0x27BF), + new UnicodeRange("IPA Extensions", 0x0250, 0x02AF), + new UnicodeRange("Miscellaneous Mathematical Symbols-A", 0x27C0, 0x27EF), + new UnicodeRange("Spacing Modifier Letters", 0x02B0, 0x02FF), + new UnicodeRange("Supplemental Arrows-A", 0x27F0, 0x27FF), + new UnicodeRange("Combining Diacritical Marks", 0x0300, 0x036F), + new UnicodeRange("Braille Patterns", 0x2800, 0x28FF), + new UnicodeRange("Greek and Coptic", 0x0370, 0x03FF), + new UnicodeRange("Supplemental Arrows-B", 0x2900, 0x297F), + new UnicodeRange("Cyrillic", 0x0400, 0x04FF), + new UnicodeRange("Miscellaneous Mathematical Symbols-B", 0x2980, 0x29FF), + new UnicodeRange("Cyrillic Supplementary", 0x0500, 0x052F), + new UnicodeRange("Supplemental Mathematical Operators", 0x2A00, 0x2AFF), + new UnicodeRange("Armenian", 0x0530, 0x058F), + new UnicodeRange("Miscellaneous Symbols and Arrows", 0x2B00, 0x2BFF), + new UnicodeRange("Hebrew", 0x0590, 0x05FF), + new UnicodeRange("CJK Radicals Supplement", 0x2E80, 0x2EFF), + new UnicodeRange("Arabic", 0x0600, 0x06FF), + new UnicodeRange("Kangxi Radicals", 0x2F00, 0x2FDF), + new UnicodeRange("Syriac", 0x0700, 0x074F), + new UnicodeRange("Ideographic Description Characters", 0x2FF0, 0x2FFF), + new UnicodeRange("Thaana", 0x0780, 0x07BF), + new UnicodeRange("CJK Symbols and Punctuation", 0x3000, 0x303F), + new UnicodeRange("Devanagari", 0x0900, 0x097F), + new UnicodeRange("Hiragana", 0x3040, 0x309F), + new UnicodeRange("Bengali", 0x0980, 0x09FF), + new UnicodeRange("Katakana", 0x30A0, 0x30FF), + new UnicodeRange("Gurmukhi", 0x0A00, 0x0A7F), + new UnicodeRange("Bopomofo", 0x3100, 0x312F), + new UnicodeRange("Gujarati", 0x0A80, 0x0AFF), + new UnicodeRange("Hangul Compatibility Jamo", 0x3130, 0x318F), + new UnicodeRange("Oriya", 0x0B00, 0x0B7F), + new UnicodeRange("Kanbun", 0x3190, 0x319F), + new UnicodeRange("Tamil", 0x0B80, 0x0BFF), + new UnicodeRange("Bopomofo Extended", 0x31A0, 0x31BF), + new UnicodeRange("Telugu", 0x0C00, 0x0C7F), + new UnicodeRange("Katakana Phonetic Extensions", 0x31F0, 0x31FF), + new UnicodeRange("Kannada", 0x0C80, 0x0CFF), + new UnicodeRange("Enclosed CJK Letters and Months", 0x3200, 0x32FF), + new UnicodeRange("Malayalam", 0x0D00, 0x0D7F), + new UnicodeRange("CJK Compatibility", 0x3300, 0x33FF), + new UnicodeRange("Sinhala", 0x0D80, 0x0DFF), + new UnicodeRange("CJK Unified Ideographs Extension A", 0x3400, 0x4DBF), + new UnicodeRange("Thai", 0x0E00, 0x0E7F), + new UnicodeRange("Yijing Hexagram Symbols", 0x4DC0, 0x4DFF), + new UnicodeRange("Lao", 0x0E80, 0x0EFF), + new UnicodeRange("CJK Unified Ideographs", 0x4E00, 0x9FFF), + new UnicodeRange("Tibetan", 0x0F00, 0x0FFF), + new UnicodeRange("Yi Syllables", 0xA000, 0xA48F), + new UnicodeRange("Myanmar", 0x1000, 0x109F), + new UnicodeRange("Yi Radicals", 0xA490, 0xA4CF), + new UnicodeRange("Georgian", 0x10A0, 0x10FF), + new UnicodeRange("Hangul Syllables", 0xAC00, 0xD7AF), + new UnicodeRange("Hangul Jamo", 0x1100, 0x11FF), + new UnicodeRange("High Surrogates", 0xD800, 0xDB7F), + new UnicodeRange("Ethiopic", 0x1200, 0x137F), + new UnicodeRange("High Private Use Surrogates", 0xDB80, 0xDBFF), + new UnicodeRange("Cherokee", 0x13A0, 0x13FF), + new UnicodeRange("Low Surrogates", 0xDC00, 0xDFFF), + new UnicodeRange("Unified Canadian Aboriginal Syllabics", 0x1400, 0x167F), + new UnicodeRange("Private Use Area", 0xE000, 0xF8FF), + new UnicodeRange("Ogham", 0x1680, 0x169F), + new UnicodeRange("CJK Compatibility Ideographs", 0xF900, 0xFAFF), + new UnicodeRange("Runic", 0x16A0, 0x16FF), + new UnicodeRange("Alphabetic Presentation Forms", 0xFB00, 0xFB4F), + new UnicodeRange("Tagalog", 0x1700, 0x171F), + new UnicodeRange("Arabic Presentation Forms-A", 0xFB50, 0xFDFF), + new UnicodeRange("Hanunoo", 0x1720, 0x173F), + new UnicodeRange("Variation Selectors", 0xFE00, 0xFE0F), + new UnicodeRange("Buhid", 0x1740, 0x175F), + new UnicodeRange("Combining Half Marks", 0xFE20, 0xFE2F), + new UnicodeRange("Tagbanwa", 0x1760, 0x177F), + new UnicodeRange("CJK Compatibility Forms", 0xFE30, 0xFE4F), + new UnicodeRange("Khmer", 0x1780, 0x17FF), + new UnicodeRange("Small Form Variants", 0xFE50, 0xFE6F), + new UnicodeRange("Mongolian", 0x1800, 0x18AF), + new UnicodeRange("Arabic Presentation Forms-B", 0xFE70, 0xFEFF), + new UnicodeRange("Limbu", 0x1900, 0x194F), + new UnicodeRange("Halfwidth and Fullwidth Forms", 0xFF00, 0xFFEF), + new UnicodeRange("Tai Le", 0x1950, 0x197F), + new UnicodeRange("Specials", 0xFFF0, 0xFFFF), + new UnicodeRange("Khmer Symbols", 0x19E0, 0x19FF), + new UnicodeRange("Linear B Syllabary", 0x10000, 0x1007F), + new UnicodeRange("Phonetic Extensions", 0x1D00, 0x1D7F), + new UnicodeRange("Linear B Ideograms", 0x10080, 0x100FF), + new UnicodeRange("Latin Extended Additional", 0x1E00, 0x1EFF), + new UnicodeRange("Aegean Numbers", 0x10100, 0x1013F), + new UnicodeRange("Greek Extended", 0x1F00, 0x1FFF), + new UnicodeRange("Old Italic", 0x10300, 0x1032F), + new UnicodeRange("General Punctuation", 0x2000, 0x206F), + new UnicodeRange("Gothic", 0x10330, 0x1034F), + new UnicodeRange("Superscripts and Subscripts", 0x2070, 0x209F), + new UnicodeRange("Ugaritic", 0x10380, 0x1039F), + new UnicodeRange("Currency Symbols", 0x20A0, 0x20CF), + new UnicodeRange("Deseret", 0x10400, 0x1044F), + new UnicodeRange("Combining Diacritical Marks for Symbols", 0x20D0, 0x20FF), + new UnicodeRange("Shavian", 0x10450, 0x1047F), + new UnicodeRange("Letterlike Symbols", 0x2100, 0x214F), + new UnicodeRange("Osmanya", 0x10480, 0x104AF), + new UnicodeRange("Number Forms", 0x2150, 0x218F), + new UnicodeRange("Cypriot Syllabary", 0x10800, 0x1083F), + new UnicodeRange("Arrows", 0x2190, 0x21FF), + new UnicodeRange("Byzantine Musical Symbols", 0x1D000, 0x1D0FF), + new UnicodeRange("Mathematical Operators", 0x2200, 0x22FF), + new UnicodeRange("Musical Symbols", 0x1D100, 0x1D1FF), + new UnicodeRange("Miscellaneous Technical", 0x2300, 0x23FF), + new UnicodeRange("Tai Xuan Jing Symbols", 0x1D300, 0x1D35F), + new UnicodeRange("Control Pictures", 0x2400, 0x243F), + new UnicodeRange("Mathematical Alphanumeric Symbols", 0x1D400, 0x1D7FF), + new UnicodeRange("Optical Character Recognition", 0x2440, 0x245F), + new UnicodeRange("CJK Unified Ideographs Extension B", 0x20000, 0x2A6DF), + new UnicodeRange("Enclosed Alphanumerics", 0x2460, 0x24FF), + new UnicodeRange("CJK Compatibility Ideographs Supplement", 0x2F800, 0x2FA1F), + new UnicodeRange("Box Drawing", 0x2500, 0x257F), + new UnicodeRange("Tags", 0xE0000, 0xE007F) + }; + } + } +} \ No newline at end of file diff --git a/InputSimulatorPlus/WindowsInput.Tests/WindowsInput.Tests.csproj b/InputSimulatorPlus/WindowsInput.Tests/WindowsInput.Tests.csproj new file mode 100644 index 0000000..704a44d --- /dev/null +++ b/InputSimulatorPlus/WindowsInput.Tests/WindowsInput.Tests.csproj @@ -0,0 +1,100 @@ + + + + Debug + AnyCPU + 8.0.30703 + 2.0 + {93982D2F-BEAD-49F7-86A9-C68159410F28} + Library + Properties + WindowsInput.Tests + WindowsInput.Tests + v4.5 + 512 + + ..\ + true + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + false + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + false + + + true + + + WindowsInput.snk + + + + ..\packages\HtmlAgilityPack.1.4.6\lib\Net45\HtmlAgilityPack.dll + + + ..\packages\NUnit.2.6.2\lib\nunit.framework.dll + + + + + + + + + + + + + + + + + Form + + + UnicodeTestForm.cs + + + + + + + + + + UnicodeTestForm.cs + + + + + + + + {3549cd6f-80f8-450f-b99e-cf0a736b1f2a} + WindowsInput + + + + + + \ No newline at end of file diff --git a/InputSimulatorPlus/WindowsInput.Tests/WindowsInput.snk b/InputSimulatorPlus/WindowsInput.Tests/WindowsInput.snk new file mode 100644 index 0000000000000000000000000000000000000000..5104dccb329143ac6c6c5be317fa31286d81b405 GIT binary patch literal 596 zcmV-a0;~N80ssI2Bme+XQ$aES1ONa50096^58>Ulv~P8?&<8+vKCO?`9zqhzG;w1S zL70P`?)7&eW~pWD(;Mo1eQ3fpZ%Nw@zQ-ZY8?A3~_Arv!4kGN!gu`^Ou8~zd zZgi;I`Zn`LAelbEp?D4Og)V7|fIZPwxH<<9Aq8|7+t(6~aIzZJ#bRqwr16c{15vo+ zNP=s6`g85&ZWi8ZrCX95af*O_xKzfS{Jl3~qo=HKC%H(n(5ENFJSN*TJ zD~nwqif8QedHnJZE+W2$_|1NXJLokrOI=$L*PI0L#T@#Z)T6ppjaBrCk76bQ(XzsR zjP58_KwG0<^I46?VAE)20QkVoAuz%V79@mU%#7D}{?RXO>;C+LMeZjjIz!sJv5w{} zJrb-=ln{7PdmGgW`V`!P8OS|@6hW7mbE**V7MUT$VC z3uA@ZmO^3yypu#|26!%)4XylS3IILo!^!hpa%$4xgqU+eu=ci)SIC65T`18~PaTVp z^(TphKxmoVHQPIVF>C|b0|ngTr0Lf9$FWLdGVl3~+BX9I|D8+m;aoKKw9)Mni&!fc iG{j|HK~sWqX<+#_f@}Q*%}D=NuR?{PI@n6w0j+s9^dd|E literal 0 HcmV?d00001 diff --git a/InputSimulatorPlus/WindowsInput.Tests/packages.config b/InputSimulatorPlus/WindowsInput.Tests/packages.config new file mode 100644 index 0000000..0f5e6b7 --- /dev/null +++ b/InputSimulatorPlus/WindowsInput.Tests/packages.config @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/InputSimulatorPlus/WindowsInput.sln b/InputSimulatorPlus/WindowsInput.sln new file mode 100644 index 0000000..abf735d --- /dev/null +++ b/InputSimulatorPlus/WindowsInput.sln @@ -0,0 +1,33 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 15 +VisualStudioVersion = 15.0.27004.2006 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WindowsInput", "WindowsInput\WindowsInput.csproj", "{3549CD6F-80F8-450F-B99E-CF0A736B1F2A}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".nuget", ".nuget", "{C2945350-728A-4D62-93D6-FA5F5015A7C6}" + ProjectSection(SolutionItems) = preProject + .nuget\NuGet.Config = .nuget\NuGet.Config + .nuget\NuGet.exe = .nuget\NuGet.exe + .nuget\NuGet.targets = .nuget\NuGet.targets + .nuget\package.nuspec = .nuget\package.nuspec + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {3549CD6F-80F8-450F-B99E-CF0A736B1F2A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {3549CD6F-80F8-450F-B99E-CF0A736B1F2A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {3549CD6F-80F8-450F-B99E-CF0A736B1F2A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {3549CD6F-80F8-450F-B99E-CF0A736B1F2A}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {4CF19F51-46F7-4DE1-9BC3-2EEC71EE691A} + EndGlobalSection +EndGlobal diff --git a/InputSimulatorPlus/WindowsInput/IInputDeviceStateAdaptor.cs b/InputSimulatorPlus/WindowsInput/IInputDeviceStateAdaptor.cs new file mode 100644 index 0000000..5512357 --- /dev/null +++ b/InputSimulatorPlus/WindowsInput/IInputDeviceStateAdaptor.cs @@ -0,0 +1,55 @@ +using WindowsInput.Native; + +namespace WindowsInput +{ + /// + /// The contract for a service that interprets the state of input devices. + /// + public interface IInputDeviceStateAdaptor + { + /// + /// Determines whether the specified key is up or down. + /// + /// The for the key. + /// + /// true if the key is down; otherwise, false. + /// + bool IsKeyDown(VirtualKeyCode keyCode); + + /// + /// Determines whether the specified key is up or down. + /// + /// The for the key. + /// + /// true if the key is up; otherwise, false. + /// + bool IsKeyUp(VirtualKeyCode keyCode); + + /// + /// Determines whether the physical key is up or down at the time the function is called regardless of whether the application thread has read the keyboard event from the message pump. + /// + /// The for the key. + /// + /// true if the key is down; otherwise, false. + /// + bool IsHardwareKeyDown(VirtualKeyCode keyCode); + + /// + /// Determines whether the physical key is up or down at the time the function is called regardless of whether the application thread has read the keyboard event from the message pump. + /// + /// The for the key. + /// + /// true if the key is up; otherwise, false. + /// + bool IsHardwareKeyUp(VirtualKeyCode keyCode); + + /// + /// Determines whether the toggling key is toggled on (in-effect) or not. + /// + /// The for the key. + /// + /// true if the toggling key is toggled on (in-effect); otherwise, false. + /// + bool IsTogglingKeyInEffect(VirtualKeyCode keyCode); + } +} \ No newline at end of file diff --git a/InputSimulatorPlus/WindowsInput/IInputMessageDispatcher.cs b/InputSimulatorPlus/WindowsInput/IInputMessageDispatcher.cs new file mode 100644 index 0000000..e8db959 --- /dev/null +++ b/InputSimulatorPlus/WindowsInput/IInputMessageDispatcher.cs @@ -0,0 +1,20 @@ +using System; +using WindowsInput.Native; + +namespace WindowsInput +{ + /// + /// The contract for a service that dispatches messages to the appropriate destination. + /// + internal interface IInputMessageDispatcher + { + /// + /// Dispatches the specified list of messages in their specified order. + /// + /// The list of messages to be dispatched. + /// If the array is empty. + /// If the array is null. + /// If the any of the commands in the array could not be sent successfully. + void DispatchInput(INPUT[] inputs); + } +} diff --git a/InputSimulatorPlus/WindowsInput/IInputSimulator.cs b/InputSimulatorPlus/WindowsInput/IInputSimulator.cs new file mode 100644 index 0000000..e8540a2 --- /dev/null +++ b/InputSimulatorPlus/WindowsInput/IInputSimulator.cs @@ -0,0 +1,26 @@ +namespace WindowsInput +{ + /// + /// The contract for a service that simulates Keyboard and Mouse input and Hardware Input Device state detection for the Windows Platform. + /// + public interface IInputSimulator + { + /// + /// Gets the instance for simulating Keyboard input. + /// + /// The instance. + IKeyboardSimulator Keyboard { get; } + + /// + /// Gets the instance for simulating Mouse input. + /// + /// The instance. + IMouseSimulator Mouse { get; } + + /// + /// Gets the instance for determining the state of the various input devices. + /// + /// The instance. + IInputDeviceStateAdaptor InputDeviceState { get; } + } +} \ No newline at end of file diff --git a/InputSimulatorPlus/WindowsInput/IKeyboardSimulator.cs b/InputSimulatorPlus/WindowsInput/IKeyboardSimulator.cs new file mode 100644 index 0000000..a8a2e00 --- /dev/null +++ b/InputSimulatorPlus/WindowsInput/IKeyboardSimulator.cs @@ -0,0 +1,208 @@ +using System; +using System.Collections.Generic; +using WindowsInput.Native; + +namespace WindowsInput +{ + /// + /// The service contract for a keyboard simulator for the Windows platform. + /// + public interface IKeyboardSimulator + { + /// + /// Gets the instance for simulating Mouse input. + /// + /// The instance. + IMouseSimulator Mouse { get; } + + /// + /// Simulates the key down gesture for the specified key. + /// + /// The for the key. + IKeyboardSimulator KeyDown(VirtualKeyCode keyCode); + + /// + /// Simulates the key press gesture for the specified key. + /// + /// The for the key. + IKeyboardSimulator KeyPress(VirtualKeyCode keyCode); + + /// + /// Simulates a key press for each of the specified key codes in the order they are specified. + /// + /// + IKeyboardSimulator KeyPress(params VirtualKeyCode[] keyCodes); + + /// + /// Simulates the key up gesture for the specified key. + /// + /// The for the key. + IKeyboardSimulator KeyUp(VirtualKeyCode keyCode); + + /// + /// Simulates a modified keystroke where there are multiple modifiers and multiple keys like CTRL-ALT-K-C where CTRL and ALT are the modifierKeys and K and C are the keys. + /// The flow is Modifiers KeyDown in order, Keys Press in order, Modifiers KeyUp in reverse order. + /// + /// The list of s for the modifier keys. + /// The list of s for the keys to simulate. + IKeyboardSimulator ModifiedKeyStroke(IEnumerable modifierKeyCodes, IEnumerable keyCodes); + + /// + /// Manually creates a keystroke and delays the keyup by a specified number of ms. + /// The flow is Modifiers KeyDown in order, Keys Press in order, Modifiers KeyUp in reverse order. + /// + /// The list of s for the modifier keys. + /// The list of s for the keys to simulate. + /// Delay in ms between keydown and keyup of final keyCode. + IKeyboardSimulator DelayedModifiedKeyStroke(IEnumerable modifierKeyCodes, IEnumerable keyCodes, int delay); + + /// + /// Simulates a modified keystroke where there are multiple modifiers and one key like CTRL-ALT-C where CTRL and ALT are the modifierKeys and C is the key. + /// The flow is Modifiers KeyDown in order, Key Press, Modifiers KeyUp in reverse order. + /// + /// The list of s for the modifier keys. + /// The for the key. + IKeyboardSimulator ModifiedKeyStroke(IEnumerable modifierKeyCodes, VirtualKeyCode keyCode); + + /// + /// Simulates a modified keystroke where there is one modifier and multiple keys like CTRL-K-C where CTRL is the modifierKey and K and C are the keys. + /// The flow is Modifier KeyDown, Keys Press in order, Modifier KeyUp. + /// + /// The for the modifier key. + /// The list of s for the keys to simulate. + IKeyboardSimulator ModifiedKeyStroke(VirtualKeyCode modifierKey, IEnumerable keyCodes); + + /// + /// Simulates a simple modified keystroke like CTRL-C where CTRL is the modifierKey and C is the key. + /// The flow is Modifier KeyDown, Key Press, Modifier KeyUp. + /// + /// The for the modifier key. + /// The for the key. + IKeyboardSimulator ModifiedKeyStroke(VirtualKeyCode modifierKeyCode, VirtualKeyCode keyCode); + + /// + /// Calls the Win32 SendInput method to simulate a KeyDown. + /// + /// The to press + IKeyboardSimulator KeyDown(DirectInputKeyCode dikCode); + + /// + /// Calls the Win32 SendInput method to simulate a KeyUp. + /// + /// The to lift up + IKeyboardSimulator KeyUp(DirectInputKeyCode dikCode); + + /// + /// Calls the Win32 SendInput method with a KeyDown and KeyUp message in the same input sequence in order to simulate a Key PRESS. + /// + /// The to press + IKeyboardSimulator KeyPress(DirectInputKeyCode dikCode); + + /// + /// Calls the Win32 SendInput method with a KeyDown and KeyUp message in the same input sequence in order to simulate a Key PRESS. + /// + /// The to press + /// Delay in ms between keydown and keyup of final keyCode. + IKeyboardSimulator DelayedKeyPress(DirectInputKeyCode dikCode, int delay); + + + /// + /// Calls the Win32 SendInput method with a KeyUp message + /// + /// The to press + /// Delay in ms between keydown and keyup of final keyCode. + IKeyboardSimulator DelayedKeyPressUp(DirectInputKeyCode dikCode, int delay); + + /// + /// Calls the Win32 SendInput method with a KeyDown message + /// + /// The to press + /// Delay in ms between keydown and keyup of final keyCode. + IKeyboardSimulator DelayedKeyPressDown(DirectInputKeyCode dikCode, int delay); + + + /// + /// Simulates a simple modified keystroke like CTRL-C where CTRL is the modifierKey and C is the key. + /// The flow is Modifier KeyDown, Key Press, Modifier KeyUp. + /// + /// The modifier key + /// The key to simulate + IKeyboardSimulator ModifiedKeyStroke(DirectInputKeyCode modifierDikCode, DirectInputKeyCode dikCode); + + /// + /// Simulates a modified keystroke where there are multiple modifiers and one key like CTRL-ALT-C where CTRL and ALT are the modifierKeys and C is the key. + /// The flow is Modifiers KeyDown in order, Key Press, Modifiers KeyUp in reverse order. + /// + /// The list of modifier keys + /// The key to simulate + IKeyboardSimulator ModifiedKeyStroke(IEnumerable modifierDikCodes, DirectInputKeyCode dikCode); + + /// + /// Simulates a modified keystroke where there are multiple modifiers and one key like CTRL-ALT-C where CTRL and ALT are the modifierKeys and C is the key. + /// The flow is Modifiers KeyDown in order, Key Press, Modifiers KeyUp in reverse order. + /// + /// The list of modifier keys + /// The key to simulate + /// Delay in ms between keydown and keyup of final keyCode. + IKeyboardSimulator DelayedModifiedKeyStroke(IEnumerable modifierDikCodes, DirectInputKeyCode dikCode, int delay); + + /// + /// Simulates a modified keystroke where there are multiple modifiers and one key like CTRL-ALT-C where CTRL and ALT are the modifierKeys and C is the key. + /// The flow is Modifiers KeyDown in order, Key Press + /// + /// The list of modifier keys + /// The key to simulate + /// Delay in ms between keydown and keyup of final keyCode. + IKeyboardSimulator DelayedModifiedKeyStrokeDown(IEnumerable modifierDikCodes, DirectInputKeyCode dikCode, int delay); + + + /// + /// Simulates a modified keystroke where there are multiple modifiers and one key like CTRL-ALT-C where CTRL and ALT are the modifierKeys and C is the key. + /// The flow is Key Press, Modifiers KeyUp in reverse order. + /// + /// The list of modifier keys + /// The key to simulate + /// Delay in ms between keydown and keyup of final keyCode. + IKeyboardSimulator DelayedModifiedKeyStrokeUp(IEnumerable modifierDikCodes, DirectInputKeyCode dikCode, int delay); + + /// + /// Simulates a modified keystroke where there is one modifier and multiple keys like CTRL-K-C where CTRL is the modifierKey and K and C are the keys. + /// The flow is Modifier KeyDown, Keys Press in order, Modifier KeyUp. + /// + /// The modifier key + /// The list of keys to simulate + IKeyboardSimulator ModifiedKeyStroke(DirectInputKeyCode modifierDikCode, IEnumerable dikCodes); + + /// + /// Simulates a modified keystroke where there are multiple modifiers and multiple keys like CTRL-ALT-K-C where CTRL and ALT are the modifierKeys and K and C are the keys. + /// The flow is Modifiers KeyDown in order, Keys Press in order, Modifiers KeyUp in reverse order. + /// + /// The list of modifier keys + /// The list of keys to simulate + IKeyboardSimulator ModifiedKeyStroke(IEnumerable modifierDikCodes, IEnumerable dikCodes); + + /// + /// Simulates uninterrupted text entry via the keyboard. + /// + /// The text to be simulated. + IKeyboardSimulator TextEntry(string text); + + /// + /// Simulates a single character text entry via the keyboard. + /// + /// The unicode character to be simulated. + IKeyboardSimulator TextEntry(char character); + + /// + /// Sleeps the executing thread to create a pause between simulated inputs. + /// + /// The number of milliseconds to wait. + IKeyboardSimulator Sleep(int millsecondsTimeout); + + /// + /// Sleeps the executing thread to create a pause between simulated inputs. + /// + /// The time to wait. + IKeyboardSimulator Sleep(TimeSpan timeout); + } +} diff --git a/InputSimulatorPlus/WindowsInput/IMouseSimulator.cs b/InputSimulatorPlus/WindowsInput/IMouseSimulator.cs new file mode 100644 index 0000000..915f496 --- /dev/null +++ b/InputSimulatorPlus/WindowsInput/IMouseSimulator.cs @@ -0,0 +1,150 @@ +using System; + +namespace WindowsInput +{ + /// + /// The service contract for a mouse simulator for the Windows platform. + /// + public interface IMouseSimulator + { + /// + /// Gets or sets the amount of mouse wheel scrolling per click. The default value for this property is 120 and different values may cause some applications to interpret the scrolling differently than expected. + /// + int MouseWheelClickSize { get; set; } + + /// + /// Gets the instance for simulating Keyboard input. + /// + /// The instance. + IKeyboardSimulator Keyboard { get; } + + /// + /// Simulates mouse movement by the specified distance measured as a delta from the current mouse location in pixels. + /// + /// The distance in pixels to move the mouse horizontally. + /// The distance in pixels to move the mouse vertically. + IMouseSimulator MoveMouseBy(int pixelDeltaX, int pixelDeltaY); + + /// + /// Simulates mouse movement to the specified location on the primary display device. + /// + /// The destination's absolute X-coordinate on the primary display device where 0 is the extreme left hand side of the display device and 65535 is the extreme right hand side of the display device. + /// The destination's absolute Y-coordinate on the primary display device where 0 is the top of the display device and 65535 is the bottom of the display device. + IMouseSimulator MoveMouseTo(double absoluteX, double absoluteY); + + /// + /// Simulates mouse movement to the specified location on the Virtual Desktop which includes all active displays. + /// + /// The destination's absolute X-coordinate on the virtual desktop where 0 is the left hand side of the virtual desktop and 65535 is the extreme right hand side of the virtual desktop. + /// The destination's absolute Y-coordinate on the virtual desktop where 0 is the top of the virtual desktop and 65535 is the bottom of the virtual desktop. + IMouseSimulator MoveMouseToPositionOnVirtualDesktop(double absoluteX, double absoluteY); + + /// + /// Simulates a mouse left button down gesture. + /// + IMouseSimulator LeftButtonDown(); + + /// + /// Simulates a mouse left button up gesture. + /// + IMouseSimulator LeftButtonUp(); + + /// + /// Simulates a mouse left button click gesture. + /// + IMouseSimulator LeftButtonClick(); + + /// + /// Simulates a mouse left button double-click gesture. + /// + IMouseSimulator LeftButtonDoubleClick(); + + /// + /// Simulates a mouse middle button down gesture. + /// + IMouseSimulator MiddleButtonDown(); + + /// + /// Simulates a mouse middle button up gesture. + /// + IMouseSimulator MiddleButtonUp(); + + /// + /// Simulates a mouse middle button click gesture. + /// + IMouseSimulator MiddleButtonClick(); + + /// + /// Simulates a mouse middle button double-click gesture. + /// + IMouseSimulator MiddleButtonDoubleClick(); + + /// + /// Simulates a mouse right button down gesture. + /// + IMouseSimulator RightButtonDown(); + + /// + /// Simulates a mouse right button up gesture. + /// + IMouseSimulator RightButtonUp(); + + /// + /// Simulates a mouse right button click gesture. + /// + IMouseSimulator RightButtonClick(); + + /// + /// Simulates a mouse right button double-click gesture. + /// + IMouseSimulator RightButtonDoubleClick(); + + /// + /// Simulates a mouse X button down gesture. + /// + /// The button id. + IMouseSimulator XButtonDown(int buttonId); + + /// + /// Simulates a mouse X button up gesture. + /// + /// The button id. + IMouseSimulator XButtonUp(int buttonId); + + /// + /// Simulates a mouse X button click gesture. + /// + /// The button id. + IMouseSimulator XButtonClick(int buttonId); + + /// + /// Simulates a mouse X button double-click gesture. + /// + /// The button id. + IMouseSimulator XButtonDoubleClick(int buttonId); + + /// + /// Simulates mouse vertical wheel scroll gesture. + /// + /// The amount to scroll in clicks. A positive value indicates that the wheel was rotated forward, away from the user; a negative value indicates that the wheel was rotated backward, toward the user. + IMouseSimulator VerticalScroll(int scrollAmountInClicks); + + /// + /// Simulates a mouse horizontal wheel scroll gesture. Supported by Windows Vista and later. + /// + /// The amount to scroll in clicks. A positive value indicates that the wheel was rotated to the right; a negative value indicates that the wheel was rotated to the left. + IMouseSimulator HorizontalScroll(int scrollAmountInClicks); + + /// + /// Sleeps the executing thread to create a pause between simulated inputs. + /// + /// The number of milliseconds to wait. + IMouseSimulator Sleep(int millsecondsTimeout); + + /// + /// Sleeps the executing thread to create a pause between simulated inputs. + /// + /// The time to wait. + IMouseSimulator Sleep(TimeSpan timeout); + } +} \ No newline at end of file diff --git a/InputSimulatorPlus/WindowsInput/InputBuilder.cs b/InputSimulatorPlus/WindowsInput/InputBuilder.cs new file mode 100644 index 0000000..3731fde --- /dev/null +++ b/InputSimulatorPlus/WindowsInput/InputBuilder.cs @@ -0,0 +1,576 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using WindowsInput.Native; + +namespace WindowsInput +{ + /// + /// A helper class for building a list of messages ready to be sent to the native Windows API. + /// + internal class InputBuilder : IEnumerable + { + /// + /// The public list of messages being built by this instance. + /// + private readonly List _inputList; + + /// + /// Initializes a new instance of the class. + /// + public InputBuilder() + { + _inputList = new List(); + } + + /// + /// Returns the list of messages as a of messages. + /// + /// The of messages. + public INPUT[] ToArray() + { + return _inputList.ToArray(); + } + + /// + /// Returns an enumerator that iterates through the list of messages. + /// + /// + /// A that can be used to iterate through the list of messages. + /// + /// 1 + public IEnumerator GetEnumerator() + { + return _inputList.GetEnumerator(); + } + + /// + /// Returns an enumerator that iterates through the list of messages. + /// + /// + /// An object that can be used to iterate through the list of messages. + /// + /// 2 + IEnumerator IEnumerable.GetEnumerator() + { + return GetEnumerator(); + } + + /// + /// Gets the at the specified position. + /// + /// The message at the specified position. + public INPUT this[int position] + { + get + { + return _inputList[position]; + } + } + + /// + /// Determines if the is an ExtendedKey + /// + /// The key code. + /// true if the key code is an extended key; otherwise, false. + /// + /// The extended keys consist of the ALT and CTRL keys on the right-hand side of the keyboard; the INS, DEL, HOME, END, PAGE UP, PAGE DOWN, and arrow keys in the clusters to the left of the numeric keypad; the NUM LOCK key; the BREAK (CTRL+PAUSE) key; the PRINT SCRN key; and the divide (/) and ENTER keys in the numeric keypad. + /// + /// See http://msdn.microsoft.com/en-us/library/ms646267(v=vs.85).aspx Section "Extended-Key Flag" + /// + public static bool IsExtendedKey(VirtualKeyCode keyCode) + { + if (keyCode == VirtualKeyCode.MENU || + //keyCode == VirtualKeyCode.LMENU || + keyCode == VirtualKeyCode.RMENU || + keyCode == VirtualKeyCode.CONTROL || + keyCode == VirtualKeyCode.RCONTROL || + keyCode == VirtualKeyCode.INSERT || + keyCode == VirtualKeyCode.DELETE || + keyCode == VirtualKeyCode.HOME || + keyCode == VirtualKeyCode.END || + keyCode == VirtualKeyCode.PRIOR || + keyCode == VirtualKeyCode.NEXT || + keyCode == VirtualKeyCode.RIGHT || + keyCode == VirtualKeyCode.UP || + keyCode == VirtualKeyCode.LEFT || + keyCode == VirtualKeyCode.DOWN || + keyCode == VirtualKeyCode.NUMLOCK || + keyCode == VirtualKeyCode.CANCEL || + keyCode == VirtualKeyCode.SNAPSHOT || + keyCode == VirtualKeyCode.DIVIDE) + { + return true; + } + else + { + return false; + } + } + + /// + /// Adds a key down to the list of messages. + /// + /// The . + /// This instance. + public InputBuilder AddKeyDown(VirtualKeyCode keyCode) + { + // The specification says Scan is unused unless we are using KEYEVENTF_UNICODE or KEYEVENTF_SCANCODE. + // However, some applications like Microsoft's Remote Desktop Client assume it is the scan code, even + // when KEYEVENTF_SCANCODE is not set. Set the value to work around these buggy apps. + ushort scan = (ushort)NativeMethods.MapVirtualKey((uint)keyCode, NativeMethods.MapVirtualKeyMapTypes.MapvkVkToVsc); + + var down = + new INPUT + { + Type = (UInt32) InputType.Keyboard, + Data = + { + Keyboard = + new KEYBDINPUT + { + KeyCode = (UInt16) keyCode, + //Scan = (UInt16)(NativeMethods.MapVirtualKey((UInt32)keyCode, 0) & 0xFFU), + //Flags = IsExtendedKey(keyCode) ? (UInt32) KeyboardFlag.ExtendedKey : 0, + Scan = scan, + Flags = (scan > 0x7F) ? (uint) KeyboardFlag.ExtendedKey : 0, + Time = 0, + ExtraInfo = IntPtr.Zero + } + } + }; + + _inputList.Add(down); + return this; + } + + /// + /// Adds a key up to the list of messages. + /// + /// The . + /// This instance. + public InputBuilder AddKeyUp(VirtualKeyCode keyCode) + { + // The specification says Scan is unused unless we are using KEYEVENTF_UNICODE or KEYEVENTF_SCANCODE. + // However, some applications like Microsoft's Remote Desktop Client assume it is the scan code, even + // when KEYEVENTF_SCANCODE is not set. Set the value to work around these buggy apps. + ushort scan = (ushort)NativeMethods.MapVirtualKey((uint)keyCode, NativeMethods.MapVirtualKeyMapTypes.MapvkVkToVsc); + var up = + new INPUT + { + Type = (UInt32) InputType.Keyboard, + Data = + { + Keyboard = + new KEYBDINPUT + { + KeyCode = (UInt16) keyCode, + //Scan = (UInt16)(NativeMethods.MapVirtualKey((UInt32)keyCode, 0) & 0xFFU), + //Flags = (UInt32) (IsExtendedKey(keyCode) + Scan = scan, + Flags = (uint)((scan > 0x7F) + ? KeyboardFlag.KeyUp | KeyboardFlag.ExtendedKey + : KeyboardFlag.KeyUp), + Time = 0, + ExtraInfo = IntPtr.Zero + } + } + }; + + _inputList.Add(up); + return this; + } + + /// + /// Adds a key press to the list of messages which is equivalent to a key down followed by a key up. + /// + /// The . + /// This instance. + public InputBuilder AddKeyPress(VirtualKeyCode keyCode) + { + AddKeyDown(keyCode); + AddKeyUp(keyCode); + return this; + } + + /// + /// Adds the character to the list of messages. + /// + /// The to be added to the list of messages. + /// This instance. + public InputBuilder AddCharacter(char character) + { + UInt16 scanCode = character; + + var down = new INPUT + { + Type = (UInt32)InputType.Keyboard, + Data = + { + Keyboard = + new KEYBDINPUT + { + KeyCode = 0, + Scan = scanCode, + Flags = (UInt32)KeyboardFlag.Unicode, + Time = 0, + ExtraInfo = IntPtr.Zero + } + } + }; + + var up = new INPUT + { + Type = (UInt32)InputType.Keyboard, + Data = + { + Keyboard = + new KEYBDINPUT + { + KeyCode = 0, + Scan = scanCode, + Flags = + (UInt32)(KeyboardFlag.KeyUp | KeyboardFlag.Unicode), + Time = 0, + ExtraInfo = IntPtr.Zero + } + } + }; + + // Handle extended keys: + // If the scan code is preceded by a prefix byte that has the value 0xE0 (224), + // we need to include the KEYEVENTF_EXTENDEDKEY flag in the Flags property. + if ((scanCode & 0xFF00) == 0xE000) + { + down.Data.Keyboard.Flags |= (UInt32)KeyboardFlag.ExtendedKey; + up.Data.Keyboard.Flags |= (UInt32)KeyboardFlag.ExtendedKey; + } + + _inputList.Add(down); + _inputList.Add(up); + return this; + } + + /// + /// Adds all of the characters in the specified of . + /// + /// The characters to add. + /// This instance. + public InputBuilder AddCharacters(IEnumerable characters) + { + foreach (var character in characters) + { + AddCharacter(character); + } + return this; + } + + /// + /// Adds the characters in the specified . + /// + /// The string of to add. + /// This instance. + public InputBuilder AddCharacters(string characters) + { + return AddCharacters(characters.ToCharArray()); + } + + /// + /// Moves the mouse relative to its current position. + /// + /// + /// + /// This instance. + public InputBuilder AddRelativeMouseMovement(int x, int y) + { + var movement = new INPUT { Type = (UInt32)InputType.Mouse }; + movement.Data.Mouse.Flags = (UInt32)MouseFlag.Move; + movement.Data.Mouse.X = x; + movement.Data.Mouse.Y = y; + + _inputList.Add(movement); + + return this; + } + + /// + /// Move the mouse to an absolute position. + /// + /// + /// + /// This instance. + public InputBuilder AddAbsoluteMouseMovement(int absoluteX, int absoluteY) + { + var movement = new INPUT { Type = (UInt32)InputType.Mouse }; + movement.Data.Mouse.Flags = (UInt32)(MouseFlag.Move | MouseFlag.Absolute); + movement.Data.Mouse.X = absoluteX; + movement.Data.Mouse.Y = absoluteY; + + _inputList.Add(movement); + + return this; + } + + /// + /// Move the mouse to the absolute position on the virtual desktop. + /// + /// + /// + /// This instance. + public InputBuilder AddAbsoluteMouseMovementOnVirtualDesktop(int absoluteX, int absoluteY) + { + var movement = new INPUT { Type = (UInt32)InputType.Mouse }; + movement.Data.Mouse.Flags = (UInt32)(MouseFlag.Move | MouseFlag.Absolute | MouseFlag.VirtualDesk); + movement.Data.Mouse.X = absoluteX; + movement.Data.Mouse.Y = absoluteY; + + _inputList.Add(movement); + + return this; + } + + /// + /// Adds a mouse button down for the specified button. + /// + /// + /// This instance. + public InputBuilder AddMouseButtonDown(MouseButton button) + { + var buttonDown = new INPUT { Type = (UInt32)InputType.Mouse }; + buttonDown.Data.Mouse.Flags = (UInt32)ToMouseButtonDownFlag(button); + + _inputList.Add(buttonDown); + + return this; + } + + /// + /// Adds a mouse button down for the specified button. + /// + /// + /// This instance. + public InputBuilder AddMouseXButtonDown(int xButtonId) + { + var buttonDown = new INPUT { Type = (UInt32)InputType.Mouse }; + buttonDown.Data.Mouse.Flags = (UInt32)MouseFlag.XDown; + buttonDown.Data.Mouse.MouseData = (UInt32)xButtonId; + _inputList.Add(buttonDown); + + return this; + } + + /// + /// Adds a mouse button up for the specified button. + /// + /// + /// This instance. + public InputBuilder AddMouseButtonUp(MouseButton button) + { + var buttonUp = new INPUT { Type = (UInt32)InputType.Mouse }; + buttonUp.Data.Mouse.Flags = (UInt32)ToMouseButtonUpFlag(button); + _inputList.Add(buttonUp); + + return this; + } + + /// + /// Adds a mouse button up for the specified button. + /// + /// + /// This instance. + public InputBuilder AddMouseXButtonUp(int xButtonId) + { + var buttonUp = new INPUT { Type = (UInt32)InputType.Mouse }; + buttonUp.Data.Mouse.Flags = (UInt32)MouseFlag.XUp; + buttonUp.Data.Mouse.MouseData = (UInt32)xButtonId; + _inputList.Add(buttonUp); + + return this; + } + + /// + /// Adds a single click of the specified button. + /// + /// + /// This instance. + public InputBuilder AddMouseButtonClick(MouseButton button) + { + return AddMouseButtonDown(button).AddMouseButtonUp(button); + } + + /// + /// Adds a single click of the specified button. + /// + /// + /// This instance. + public InputBuilder AddMouseXButtonClick(int xButtonId) + { + return AddMouseXButtonDown(xButtonId).AddMouseXButtonUp(xButtonId); + } + + /// + /// Adds a double click of the specified button. + /// + /// + /// This instance. + public InputBuilder AddMouseButtonDoubleClick(MouseButton button) + { + return AddMouseButtonClick(button).AddMouseButtonClick(button); + } + + /// + /// Adds a double click of the specified button. + /// + /// + /// This instance. + public InputBuilder AddMouseXButtonDoubleClick(int xButtonId) + { + return AddMouseXButtonClick(xButtonId).AddMouseXButtonClick(xButtonId); + } + + /// + /// Scroll the vertical mouse wheel by the specified amount. + /// + /// + /// This instance. + public InputBuilder AddMouseVerticalWheelScroll(int scrollAmount) + { + var scroll = new INPUT { Type = (UInt32)InputType.Mouse }; + scroll.Data.Mouse.Flags = (UInt32)MouseFlag.VerticalWheel; + scroll.Data.Mouse.MouseData = (UInt32)scrollAmount; + + _inputList.Add(scroll); + + return this; + } + + /// + /// Scroll the horizontal mouse wheel by the specified amount. + /// + /// + /// This instance. + public InputBuilder AddMouseHorizontalWheelScroll(int scrollAmount) + { + var scroll = new INPUT { Type = (UInt32)InputType.Mouse }; + scroll.Data.Mouse.Flags = (UInt32)MouseFlag.HorizontalWheel; + scroll.Data.Mouse.MouseData = (UInt32)scrollAmount; + + _inputList.Add(scroll); + + return this; + } + + #region DIK scancodes + /// + /// Adds a key down to the list of Input messages. + /// + /// The . + /// This instance. + public InputBuilder AddKeyDown(DirectInputKeyCode dikCode) + { + var down = + new INPUT + { + Type = (uint)InputType.Keyboard, + Data = + { + Keyboard = + new KEYBDINPUT + { + KeyCode = 0, + Scan = (ushort)dikCode, + Flags = (uint)(((ushort)dikCode > 0x7F) + ? KeyboardFlag.ScanCode | KeyboardFlag.ExtendedKey + : KeyboardFlag.ScanCode), + Time = 0, + ExtraInfo = IntPtr.Zero + } + } + }; + + _inputList.Add(down); + return this; + } + + /// + /// Adds a key up to the list of Input messages. + /// + /// The . + /// This instance. + public InputBuilder AddKeyUp(DirectInputKeyCode dikCode) + { + var up = + new INPUT + { + Type = (uint)InputType.Keyboard, + Data = + { + Keyboard = + new KEYBDINPUT + { + KeyCode = 0, + Scan = (ushort)dikCode, + Flags = (uint)(((ushort)dikCode > 0x7F) + ? KeyboardFlag.ScanCode | KeyboardFlag.KeyUp | KeyboardFlag.ExtendedKey + : KeyboardFlag.ScanCode | KeyboardFlag.KeyUp), + Time = 0, + ExtraInfo = IntPtr.Zero + } + } + }; + + _inputList.Add(up); + return this; + } + + /// + /// Adds a key press to the list of Input messages which is equivalent to a key down followed by a key up. + /// + /// The . + /// This instance. + public InputBuilder AddKeyPress(DirectInputKeyCode dikCode) + { + AddKeyDown(dikCode); + AddKeyUp(dikCode); + return this; + } + #endregion + + private static MouseFlag ToMouseButtonDownFlag(MouseButton button) + { + switch (button) + { + case MouseButton.LeftButton: + return MouseFlag.LeftDown; + + case MouseButton.MiddleButton: + return MouseFlag.MiddleDown; + + case MouseButton.RightButton: + return MouseFlag.RightDown; + + default: + return MouseFlag.LeftDown; + } + } + + private static MouseFlag ToMouseButtonUpFlag(MouseButton button) + { + switch (button) + { + case MouseButton.LeftButton: + return MouseFlag.LeftUp; + + case MouseButton.MiddleButton: + return MouseFlag.MiddleUp; + + case MouseButton.RightButton: + return MouseFlag.RightUp; + + default: + return MouseFlag.LeftUp; + } + } + } + +} \ No newline at end of file diff --git a/InputSimulatorPlus/WindowsInput/InputSimulator.cs b/InputSimulatorPlus/WindowsInput/InputSimulator.cs new file mode 100644 index 0000000..ca051d8 --- /dev/null +++ b/InputSimulatorPlus/WindowsInput/InputSimulator.cs @@ -0,0 +1,75 @@ +using System; + +namespace WindowsInput +{ + /// + /// Implements the interface to simulate Keyboard and Mouse input and provide the state of those input devices. + /// + public class InputSimulator : IInputSimulator + { + /// + /// The instance to use for simulating keyboard input. + /// + private readonly IKeyboardSimulator _keyboardSimulator; + + /// + /// The instance to use for simulating mouse input. + /// + private readonly IMouseSimulator _mouseSimulator; + + /// + /// The instance to use for interpreting the state of the input devices. + /// + private readonly IInputDeviceStateAdaptor _inputDeviceState; + + /// + /// Initializes a new instance of the class using the specified , and instances. + /// + /// The instance to use for simulating keyboard input. + /// The instance to use for simulating mouse input. + /// The instance to use for interpreting the state of input devices. + public InputSimulator(IKeyboardSimulator keyboardSimulator, IMouseSimulator mouseSimulator, IInputDeviceStateAdaptor inputDeviceStateAdaptor) + { + _keyboardSimulator = keyboardSimulator; + _mouseSimulator = mouseSimulator; + _inputDeviceState = inputDeviceStateAdaptor; + } + + /// + /// Initializes a new instance of the class using the default , and instances. + /// + public InputSimulator() + { + _keyboardSimulator = new KeyboardSimulator(this); + _mouseSimulator = new MouseSimulator(this); + _inputDeviceState = new WindowsInputDeviceStateAdaptor(); + } + + /// + /// Gets the instance for simulating Keyboard input. + /// + /// The instance. + public IKeyboardSimulator Keyboard + { + get { return _keyboardSimulator; } + } + + /// + /// Gets the instance for simulating Mouse input. + /// + /// The instance. + public IMouseSimulator Mouse + { + get { return _mouseSimulator; } + } + + /// + /// Gets the instance for determining the state of the various input devices. + /// + /// The instance. + public IInputDeviceStateAdaptor InputDeviceState + { + get { return _inputDeviceState; } + } + } +} \ No newline at end of file diff --git a/InputSimulatorPlus/WindowsInput/KeyboardSimulator.cs b/InputSimulatorPlus/WindowsInput/KeyboardSimulator.cs new file mode 100644 index 0000000..f5ca121 --- /dev/null +++ b/InputSimulatorPlus/WindowsInput/KeyboardSimulator.cs @@ -0,0 +1,481 @@ +using System; +using System.Collections.Generic; +using System.Threading; +using WindowsInput.Native; +using System.Linq; + +namespace WindowsInput +{ + /// + /// Implements the interface by calling the an to simulate Keyboard gestures. + /// + public class KeyboardSimulator : IKeyboardSimulator + { + private readonly IInputSimulator _inputSimulator; + + /// + /// The instance of the to use for dispatching messages. + /// + private readonly IInputMessageDispatcher _messageDispatcher; + + /// + /// Initializes a new instance of the class using an instance of a for dispatching messages. + /// + /// The that owns this instance. + public KeyboardSimulator(IInputSimulator inputSimulator) + { + if (inputSimulator == null) throw new ArgumentNullException("inputSimulator"); + + _inputSimulator = inputSimulator; + _messageDispatcher = new WindowsInputMessageDispatcher(); + } + + /// + /// Initializes a new instance of the class using the specified for dispatching messages. + /// + /// The that owns this instance. + /// The to use for dispatching messages. + /// If null is passed as the . + internal KeyboardSimulator(IInputSimulator inputSimulator, IInputMessageDispatcher messageDispatcher) + { + if (inputSimulator == null) throw new ArgumentNullException("inputSimulator"); + + if (messageDispatcher == null) + throw new InvalidOperationException( + string.Format("The {0} cannot operate with a null {1}. Please provide a valid {1} instance to use for dispatching {2} messages.", + typeof(KeyboardSimulator).Name, typeof(IInputMessageDispatcher).Name, typeof(INPUT).Name)); + + _inputSimulator = inputSimulator; + _messageDispatcher = messageDispatcher; + } + + /// + /// Gets the instance for simulating Mouse input. + /// + /// The instance. + public IMouseSimulator Mouse { get { return _inputSimulator.Mouse; } } + + private void ModifiersDown(InputBuilder builder, IEnumerable modifierKeyCodes) + { + if (modifierKeyCodes == null) return; + foreach (var key in modifierKeyCodes) builder.AddKeyDown(key); + } + + private void ModifiersUp(InputBuilder builder, IEnumerable modifierKeyCodes) + { + if (modifierKeyCodes == null) return; + + // Key up in reverse (I miss LINQ) + var stack = new Stack(modifierKeyCodes); + while (stack.Count > 0) builder.AddKeyUp(stack.Pop()); + } + + private void KeysPress(InputBuilder builder, IEnumerable keyCodes) + { + if (keyCodes == null) return; + foreach (var key in keyCodes) builder.AddKeyPress(key); + } + + /// + /// Sends the list of messages using the instance. + /// + /// The of messages to send. + private void SendSimulatedInput(INPUT[] inputList) + { + _messageDispatcher.DispatchInput(inputList); + } + + /// + /// Calls the Win32 SendInput method to simulate a KeyDown. + /// + /// The to press + public IKeyboardSimulator KeyDown(VirtualKeyCode keyCode) + { + var inputList = new InputBuilder().AddKeyDown(keyCode).ToArray(); + SendSimulatedInput(inputList); + return this; + } + + /// + /// Calls the Win32 SendInput method to simulate a KeyUp. + /// + /// The to lift up + public IKeyboardSimulator KeyUp(VirtualKeyCode keyCode) + { + var inputList = new InputBuilder().AddKeyUp(keyCode).ToArray(); + SendSimulatedInput(inputList); + return this; + } + + /// + /// Calls the Win32 SendInput method with a KeyDown and KeyUp message in the same input sequence in order to simulate a Key PRESS. + /// + /// The to press + public IKeyboardSimulator KeyPress(VirtualKeyCode keyCode) + { + var inputList = new InputBuilder().AddKeyPress(keyCode).ToArray(); + SendSimulatedInput(inputList); + return this; + } + + /// + /// Simulates a key press for each of the specified key codes in the order they are specified. + /// + /// + public IKeyboardSimulator KeyPress(params VirtualKeyCode[] keyCodes) + { + var builder = new InputBuilder(); + KeysPress(builder, keyCodes); + SendSimulatedInput(builder.ToArray()); + return this; + } + + /// + /// Simulates a simple modified keystroke like CTRL-C where CTRL is the modifierKey and C is the key. + /// The flow is Modifier KeyDown, Key Press, Modifier KeyUp. + /// + /// The modifier key + /// The key to simulate + public IKeyboardSimulator ModifiedKeyStroke(VirtualKeyCode modifierKeyCode, VirtualKeyCode keyCode) + { + ModifiedKeyStroke(new[] { modifierKeyCode }, new[] { keyCode }); + return this; + } + + /// + /// Simulates a modified keystroke where there are multiple modifiers and one key like CTRL-ALT-C where CTRL and ALT are the modifierKeys and C is the key. + /// The flow is Modifiers KeyDown in order, Key Press, Modifiers KeyUp in reverse order. + /// + /// The list of modifier keys + /// The key to simulate + public IKeyboardSimulator ModifiedKeyStroke(IEnumerable modifierKeyCodes, VirtualKeyCode keyCode) + { + ModifiedKeyStroke(modifierKeyCodes, new[] {keyCode}); + return this; + } + + /// + /// Simulates a modified keystroke where there is one modifier and multiple keys like CTRL-K-C where CTRL is the modifierKey and K and C are the keys. + /// The flow is Modifier KeyDown, Keys Press in order, Modifier KeyUp. + /// + /// The modifier key + /// The list of keys to simulate + public IKeyboardSimulator ModifiedKeyStroke(VirtualKeyCode modifierKey, IEnumerable keyCodes) + { + ModifiedKeyStroke(new [] {modifierKey}, keyCodes); + return this; + } + + /// + /// Simulates a modified keystroke where there are multiple modifiers and multiple keys like CTRL-ALT-K-C where CTRL and ALT are the modifierKeys and K and C are the keys. + /// The flow is Modifiers KeyDown in order, Keys Press in order, Modifiers KeyUp in reverse order. + /// + /// The list of modifier keys + /// The list of keys to simulate + public IKeyboardSimulator ModifiedKeyStroke(IEnumerable modifierKeyCodes, IEnumerable keyCodes) + { + var builder = new InputBuilder(); + ModifiersDown(builder, modifierKeyCodes); + KeysPress(builder, keyCodes); + ModifiersUp(builder, modifierKeyCodes); + + SendSimulatedInput(builder.ToArray()); + return this; + } + + /// + /// Manually creates a keystroke and delays the keyup by a specified number of ms. + /// The flow is Modifiers KeyDown in order, Keys Press in order, Modifiers KeyUp in reverse order. + /// + /// The list of modifier keys + /// The list of keys to simulate + /// Delay in ms between keydown and keyup of final keyCode. 50ms should be minimum + public IKeyboardSimulator DelayedModifiedKeyStroke(IEnumerable modifierKeyCodes, IEnumerable keyCodes, int delay) + { + foreach (var keyCode in modifierKeyCodes) + { + var inputList = new InputBuilder().AddKeyDown(keyCode).ToArray(); + SendSimulatedInput(inputList); + } + + foreach (var keyCode in keyCodes) + { + var inputList = new InputBuilder().AddKeyDown(keyCode).ToArray(); + SendSimulatedInput(inputList); + } + + Thread.Sleep(delay); + + + foreach (var keyCode in keyCodes.Reverse()) + { + var inputList = new InputBuilder().AddKeyUp(keyCode).ToArray(); + SendSimulatedInput(inputList); + } + + foreach (var keyCode in modifierKeyCodes.Reverse()) + { + var inputList = new InputBuilder().AddKeyUp(keyCode).ToArray(); + SendSimulatedInput(inputList); + } + + return this; + } + + /// + /// Calls the Win32 SendInput method with a stream of KeyDown and KeyUp messages in order to simulate uninterrupted text entry via the keyboard. + /// + /// The text to be simulated. + public IKeyboardSimulator TextEntry(string text) + { + if (text.Length > UInt32.MaxValue / 2) throw new ArgumentException(string.Format("The text parameter is too long. It must be less than {0} characters.", UInt32.MaxValue / 2), "text"); + var inputList = new InputBuilder().AddCharacters(text).ToArray(); + SendSimulatedInput(inputList); + return this; + } + + /// + /// Simulates a single character text entry via the keyboard. + /// + /// The unicode character to be simulated. + public IKeyboardSimulator TextEntry(char character) + { + var inputList = new InputBuilder().AddCharacter(character).ToArray(); + SendSimulatedInput(inputList); + return this; + } + + /// + /// Sleeps the executing thread to create a pause between simulated inputs. + /// + /// The number of milliseconds to wait. + public IKeyboardSimulator Sleep(int millsecondsTimeout) + { + Thread.Sleep(millsecondsTimeout); + return this; + } + + /// + /// Sleeps the executing thread to create a pause between simulated inputs. + /// + /// The time to wait. + public IKeyboardSimulator Sleep(TimeSpan timeout) + { + Thread.Sleep(timeout); + return this; + } + + + #region DIK scancodes + /// + /// Calls the Win32 SendInput method to simulate a KeyDown. + /// + /// The to press + public IKeyboardSimulator KeyDown(DirectInputKeyCode dikCode) + { + var inputList = new InputBuilder().AddKeyDown(dikCode).ToArray(); + SendSimulatedInput(inputList); + return this; + } + + /// + /// Calls the Win32 SendInput method to simulate a KeyUp. + /// + /// The to lift up + public IKeyboardSimulator KeyUp(DirectInputKeyCode dikCode) + { + var inputList = new InputBuilder().AddKeyUp(dikCode).ToArray(); + SendSimulatedInput(inputList); + return this; + } + + /// + /// Calls the Win32 SendInput method with a KeyDown and KeyUp message in the same input sequence in order to simulate a Key PRESS. + /// + /// The to press + public IKeyboardSimulator KeyPress(DirectInputKeyCode dikCode) + { + var inputList = + new InputBuilder() + .AddKeyDown(dikCode) + .AddKeyUp(dikCode) + .ToArray(); + SendSimulatedInput(inputList); + return this; + } + + /// + /// Calls the Win32 SendInput method with a KeyDown and KeyUp message in the same input sequence in order to simulate a Key PRESS. + /// + /// The to press + /// Delay in ms between keydown and keyup of final keyCode. 50ms should be minimum + public IKeyboardSimulator DelayedKeyPress(DirectInputKeyCode dikCode, int delay) + { + DelayedKeyPressDown(dikCode, delay); + + Thread.Sleep(delay); + + DelayedKeyPressUp(dikCode, delay); + + return this; + } + + /// + /// Calls the Win32 SendInput method with a KeyDown message + /// + /// The to press + /// Delay in ms between keydown and keyup of final keyCode. 50ms should be minimum + public IKeyboardSimulator DelayedKeyPressDown(DirectInputKeyCode dikCode, int delay) + { + var inputList1 = new InputBuilder().AddKeyDown(dikCode).ToArray(); + SendSimulatedInput(inputList1); + + return this; + } + + /// + /// Calls the Win32 SendInput method with a KeyUp message + /// + /// The to press + /// Delay in ms between keydown and keyup of final keyCode. 50ms should be minimum + public IKeyboardSimulator DelayedKeyPressUp(DirectInputKeyCode dikCode, int delay) + { + var inputList2 = new InputBuilder().AddKeyUp(dikCode).ToArray(); + SendSimulatedInput(inputList2); + + return this; + } + + /// + /// Simulates a simple modified keystroke like CTRL-C where CTRL is the modifierKey and C is the key. + /// The flow is Modifier KeyDown, Key Press, Modifier KeyUp. + /// + /// The modifier key + /// The key to simulate + public IKeyboardSimulator ModifiedKeyStroke(DirectInputKeyCode modifierDikCode, DirectInputKeyCode dikCode) + { + ModifiedKeyStroke(new[] { modifierDikCode }, new[] { dikCode }); + return this; + } + + /// + /// Simulates a modified keystroke where there are multiple modifiers and one key like CTRL-ALT-C where CTRL and ALT are the modifierKeys and C is the key. + /// The flow is Modifiers KeyDown in order, Key Press, Modifiers KeyUp in reverse order. + /// + /// The list of modifier keys + /// The key to simulate + public IKeyboardSimulator ModifiedKeyStroke(IEnumerable modifierDikCodes, DirectInputKeyCode dikCode) + { + ModifiedKeyStroke(modifierDikCodes, new[] { dikCode }); + return this; + } + + /// + /// Simulates a modified keystroke where there is one modifier and multiple keys like CTRL-K-C where CTRL is the modifierKey and K and C are the keys. + /// The flow is Modifier KeyDown, Keys Press in order, Modifier KeyUp. + /// + /// The modifier key + /// The list of keys to simulate + public IKeyboardSimulator ModifiedKeyStroke(DirectInputKeyCode modifierDikCode, IEnumerable dikCodes) + { + ModifiedKeyStroke(new[] { modifierDikCode }, dikCodes); + return this; + } + + /// + /// Simulates a modified keystroke where there are multiple modifiers and multiple keys like CTRL-ALT-K-C where CTRL and ALT are the modifierKeys and K and C are the keys. + /// The flow is Modifiers KeyDown in order, Keys Press in order, Modifiers KeyUp in reverse order. + /// + /// The list of modifier keys + /// The list of keys to simulate + public IKeyboardSimulator ModifiedKeyStroke(IEnumerable modifierDikCodes, IEnumerable dikCodes) + { + var builder = new InputBuilder(); + ModifiersDown(builder, modifierDikCodes); + KeysPress(builder, dikCodes); + ModifiersUp(builder, modifierDikCodes); + SendSimulatedInput(builder.ToArray()); + return this; + } + + /// + /// Simulates a modified keystroke where there are multiple modifiers and multiple keys like CTRL-ALT-K-C where CTRL and ALT are the modifierKeys and K and C are the keys. + /// The flow is Modifiers KeyDown in order, Keys Press in order, Modifiers KeyUp in reverse order. + /// + /// The list of modifier keys + /// The list of keys to simulate + /// Delay in ms between keydown and keyup of final keyCode. 50ms should be minimum + public IKeyboardSimulator DelayedModifiedKeyStroke(IEnumerable modifierDikCodes, DirectInputKeyCode dikCode, int delay) + { + DelayedModifiedKeyStrokeDown(modifierDikCodes, dikCode, delay); + + Thread.Sleep(delay); + + DelayedModifiedKeyStrokeUp(modifierDikCodes, dikCode, delay); + + return this; + } + + /// + /// Simulates a modified keystroke where there are multiple modifiers and multiple keys like CTRL-ALT-K-C where CTRL and ALT are the modifierKeys and K and C are the keys. + /// The flow is Modifiers KeyDown in order, Keys Press in order + /// + /// The list of modifier keys + /// The list of keys to simulate + /// Delay in ms between keydown and keyup of final keyCode. 50ms should be minimum + public IKeyboardSimulator DelayedModifiedKeyStrokeDown(IEnumerable modifierDikCodes, DirectInputKeyCode dikCode, int delay) + { + foreach (var keyCode in modifierDikCodes) + { + var inputList = new InputBuilder().AddKeyDown(keyCode).ToArray(); + SendSimulatedInput(inputList); + } + + KeyDown(dikCode); + + return this; + } + + /// + /// Simulates a modified keystroke where there are multiple modifiers and multiple keys like CTRL-ALT-K-C where CTRL and ALT are the modifierKeys and K and C are the keys. + /// The flow is Keys Press in order, Modifiers KeyUp in reverse order. + /// + /// The list of modifier keys + /// The list of keys to simulate + /// Delay in ms between keydown and keyup of final keyCode. 50ms should be minimum + public IKeyboardSimulator DelayedModifiedKeyStrokeUp(IEnumerable modifierDikCodes, DirectInputKeyCode dikCode, int delay) + { + KeyUp(dikCode); + + foreach (var keyCode in modifierDikCodes.Reverse()) + { + var inputList = new InputBuilder().AddKeyUp(keyCode).ToArray(); + SendSimulatedInput(inputList); + } + + return this; + } + + private void ModifiersDown(InputBuilder builder, IEnumerable modifierDikCodes) + { + if (modifierDikCodes == null) return; + foreach (var dik in modifierDikCodes) builder.AddKeyDown(dik); + } + + private void ModifiersUp(InputBuilder builder, IEnumerable modifierDikCodes) + { + if (modifierDikCodes == null) return; + + // Key up in reverse (I miss LINQ) + var stack = new Stack(modifierDikCodes); + while (stack.Count > 0) builder.AddKeyUp(stack.Pop()); + } + + private void KeysPress(InputBuilder builder, IEnumerable dikCodes) + { + if (dikCodes == null) return; + foreach (var dik in dikCodes) builder.AddKeyPress(dik); + } + #endregion + } +} \ No newline at end of file diff --git a/InputSimulatorPlus/WindowsInput/MouseButton.cs b/InputSimulatorPlus/WindowsInput/MouseButton.cs new file mode 100644 index 0000000..b96ddab --- /dev/null +++ b/InputSimulatorPlus/WindowsInput/MouseButton.cs @@ -0,0 +1,23 @@ +namespace WindowsInput +{ + /// + /// The mouse button + /// + public enum MouseButton + { + /// + /// Left mouse button + /// + LeftButton, + + /// + /// Middle mouse button + /// + MiddleButton, + + /// + /// Right moust button + /// + RightButton, + } +} \ No newline at end of file diff --git a/InputSimulatorPlus/WindowsInput/MouseSimulator.cs b/InputSimulatorPlus/WindowsInput/MouseSimulator.cs new file mode 100644 index 0000000..084ca69 --- /dev/null +++ b/InputSimulatorPlus/WindowsInput/MouseSimulator.cs @@ -0,0 +1,313 @@ +using System; +using System.Threading; +using WindowsInput.Native; + +namespace WindowsInput +{ + /// + /// Implements the interface by calling the an to simulate Mouse gestures. + /// + public class MouseSimulator : IMouseSimulator + { + /// + /// Gets or sets the amount of mouse wheel scrolling per click. The default value for this property is 120 and different values may cause some applications to interpret the scrolling differently than expected. + /// + public int MouseWheelClickSize { get; set; } = 120; + + private readonly IInputSimulator _inputSimulator; + + /// + /// The instance of the to use for dispatching messages. + /// + private readonly IInputMessageDispatcher _messageDispatcher; + + /// + /// Initializes a new instance of the class using an instance of a for dispatching messages. + /// + /// The that owns this instance. + public MouseSimulator(IInputSimulator inputSimulator) + { + if (inputSimulator == null) throw new ArgumentNullException("inputSimulator"); + + _inputSimulator = inputSimulator; + _messageDispatcher = new WindowsInputMessageDispatcher(); + } + + /// + /// Initializes a new instance of the class using the specified for dispatching messages. + /// + /// The that owns this instance. + /// The to use for dispatching messages. + /// If null is passed as the . + internal MouseSimulator(IInputSimulator inputSimulator, IInputMessageDispatcher messageDispatcher) + { + if (inputSimulator == null) + throw new ArgumentNullException("inputSimulator"); + + if (messageDispatcher == null) + throw new InvalidOperationException( + string.Format("The {0} cannot operate with a null {1}. Please provide a valid {1} instance to use for dispatching {2} messages.", + typeof(MouseSimulator).Name, typeof(IInputMessageDispatcher).Name, typeof(INPUT).Name)); + + _inputSimulator = inputSimulator; + _messageDispatcher = messageDispatcher; + } + + /// + /// Gets the instance for simulating Keyboard input. + /// + /// The instance. + public IKeyboardSimulator Keyboard { get { return _inputSimulator.Keyboard; } } + + /// + /// Sends the list of messages using the instance. + /// + /// The of messages to send. + private void SendSimulatedInput(INPUT[] inputList) + { + _messageDispatcher.DispatchInput(inputList); + } + + /// + /// Simulates mouse movement by the specified distance measured as a delta from the current mouse location in pixels. + /// + /// The distance in pixels to move the mouse horizontally. + /// The distance in pixels to move the mouse vertically. + public IMouseSimulator MoveMouseBy(int pixelDeltaX, int pixelDeltaY) + { + var inputList = new InputBuilder().AddRelativeMouseMovement(pixelDeltaX, pixelDeltaY).ToArray(); + SendSimulatedInput(inputList); + return this; + } + + /// + /// Simulates mouse movement to the specified location on the primary display device. + /// + /// The destination's absolute X-coordinate on the primary display device where 0 is the extreme left hand side of the display device and 65535 is the extreme right hand side of the display device. + /// The destination's absolute Y-coordinate on the primary display device where 0 is the top of the display device and 65535 is the bottom of the display device. + public IMouseSimulator MoveMouseTo(double absoluteX, double absoluteY) + { + var inputList = new InputBuilder().AddAbsoluteMouseMovement((int)Math.Truncate(absoluteX), (int)Math.Truncate(absoluteY)).ToArray(); + SendSimulatedInput(inputList); + return this; + } + + /// + /// Simulates mouse movement to the specified location on the Virtual Desktop which includes all active displays. + /// + /// The destination's absolute X-coordinate on the virtual desktop where 0 is the left hand side of the virtual desktop and 65535 is the extreme right hand side of the virtual desktop. + /// The destination's absolute Y-coordinate on the virtual desktop where 0 is the top of the virtual desktop and 65535 is the bottom of the virtual desktop. + public IMouseSimulator MoveMouseToPositionOnVirtualDesktop(double absoluteX, double absoluteY) + { + var inputList = new InputBuilder().AddAbsoluteMouseMovementOnVirtualDesktop((int)Math.Truncate(absoluteX), (int)Math.Truncate(absoluteY)).ToArray(); + SendSimulatedInput(inputList); + return this; + } + + /// + /// Simulates a mouse left button down gesture. + /// + public IMouseSimulator LeftButtonDown() + { + var inputList = new InputBuilder().AddMouseButtonDown(MouseButton.LeftButton).ToArray(); + SendSimulatedInput(inputList); + return this; + } + + /// + /// Simulates a mouse left button up gesture. + /// + public IMouseSimulator LeftButtonUp() + { + var inputList = new InputBuilder().AddMouseButtonUp(MouseButton.LeftButton).ToArray(); + SendSimulatedInput(inputList); + return this; + } + + /// + /// Simulates a mouse left-click gesture. + /// + public IMouseSimulator LeftButtonClick() + { + var inputList = new InputBuilder().AddMouseButtonClick(MouseButton.LeftButton).ToArray(); + SendSimulatedInput(inputList); + return this; + } + + /// + /// Simulates a mouse left button double-click gesture. + /// + public IMouseSimulator LeftButtonDoubleClick() + { + var inputList = new InputBuilder().AddMouseButtonDoubleClick(MouseButton.LeftButton).ToArray(); + SendSimulatedInput(inputList); + return this; + } + + /// + /// Simulates a mouse middle button down gesture. + /// + public IMouseSimulator MiddleButtonDown() + { + var inputList = new InputBuilder().AddMouseButtonDown(MouseButton.MiddleButton).ToArray(); + SendSimulatedInput(inputList); + return this; + } + + /// + /// Simulates a mouse middle button up gesture. + /// + public IMouseSimulator MiddleButtonUp() + { + var inputList = new InputBuilder().AddMouseButtonUp(MouseButton.MiddleButton).ToArray(); + SendSimulatedInput(inputList); + return this; + } + + /// + /// Simulates a mouse middle button click gesture. + /// + public IMouseSimulator MiddleButtonClick() + { + var inputList = new InputBuilder().AddMouseButtonClick(MouseButton.MiddleButton).ToArray(); + SendSimulatedInput(inputList); + return this; + } + + /// + /// Simulates a mouse middle button double click gesture. + /// + public IMouseSimulator MiddleButtonDoubleClick() + { + var inputList = new InputBuilder().AddMouseButtonDoubleClick(MouseButton.MiddleButton).ToArray(); + SendSimulatedInput(inputList); + return this; + } + + /// + /// Simulates a mouse right button down gesture. + /// + public IMouseSimulator RightButtonDown() + { + var inputList = new InputBuilder().AddMouseButtonDown(MouseButton.RightButton).ToArray(); + SendSimulatedInput(inputList); + return this; + } + + /// + /// Simulates a mouse right button up gesture. + /// + public IMouseSimulator RightButtonUp() + { + var inputList = new InputBuilder().AddMouseButtonUp(MouseButton.RightButton).ToArray(); + SendSimulatedInput(inputList); + return this; + } + + /// + /// Simulates a mouse right button click gesture. + /// + public IMouseSimulator RightButtonClick() + { + var inputList = new InputBuilder().AddMouseButtonClick(MouseButton.RightButton).ToArray(); + SendSimulatedInput(inputList); + return this; + } + + /// + /// Simulates a mouse right button double-click gesture. + /// + public IMouseSimulator RightButtonDoubleClick() + { + var inputList = new InputBuilder().AddMouseButtonDoubleClick(MouseButton.RightButton).ToArray(); + SendSimulatedInput(inputList); + return this; + } + + /// + /// Simulates a mouse X button down gesture. + /// + /// The button id. + public IMouseSimulator XButtonDown(int buttonId) + { + var inputList = new InputBuilder().AddMouseXButtonDown(buttonId).ToArray(); + SendSimulatedInput(inputList); + return this; + } + + /// + /// Simulates a mouse X button up gesture. + /// + /// The button id. + public IMouseSimulator XButtonUp(int buttonId) + { + var inputList = new InputBuilder().AddMouseXButtonUp(buttonId).ToArray(); + SendSimulatedInput(inputList); + return this; + } + + /// + /// Simulates a mouse X button click gesture. + /// + /// The button id. + public IMouseSimulator XButtonClick(int buttonId) + { + var inputList = new InputBuilder().AddMouseXButtonClick(buttonId).ToArray(); + SendSimulatedInput(inputList); + return this; + } + + /// + /// Simulates a mouse X button double-click gesture. + /// + /// The button id. + public IMouseSimulator XButtonDoubleClick(int buttonId) + { + var inputList = new InputBuilder().AddMouseXButtonDoubleClick(buttonId).ToArray(); + SendSimulatedInput(inputList); + return this; + } + + /// + /// Simulates mouse vertical wheel scroll gesture. + /// + /// The amount to scroll in clicks. A positive value indicates that the wheel was rotated forward, away from the user; a negative value indicates that the wheel was rotated backward, toward the user. + public IMouseSimulator VerticalScroll(int scrollAmountInClicks) + { + var inputList = new InputBuilder().AddMouseVerticalWheelScroll(scrollAmountInClicks * MouseWheelClickSize).ToArray(); + SendSimulatedInput(inputList); + return this; + } + + /// + /// Simulates a mouse horizontal wheel scroll gesture. Supported by Windows Vista and later. + /// + /// The amount to scroll in clicks. A positive value indicates that the wheel was rotated to the right; a negative value indicates that the wheel was rotated to the left. + public IMouseSimulator HorizontalScroll(int scrollAmountInClicks) + { + var inputList = new InputBuilder().AddMouseHorizontalWheelScroll(scrollAmountInClicks * MouseWheelClickSize).ToArray(); + SendSimulatedInput(inputList); + return this; + } + + /// + /// Sleeps the executing thread to create a pause between simulated inputs. + /// + /// The number of milliseconds to wait. + public IMouseSimulator Sleep(int millsecondsTimeout) + { + Thread.Sleep(millsecondsTimeout); + return this; + } + + /// + /// Sleeps the executing thread to create a pause between simulated inputs. + /// + /// The time to wait. + public IMouseSimulator Sleep(TimeSpan timeout) + { + Thread.Sleep(timeout); + return this; + } + } +} \ No newline at end of file diff --git a/InputSimulatorPlus/WindowsInput/Native/DirectInputKeyCode.cs b/InputSimulatorPlus/WindowsInput/Native/DirectInputKeyCode.cs new file mode 100644 index 0000000..3ee73ab --- /dev/null +++ b/InputSimulatorPlus/WindowsInput/Native/DirectInputKeyCode.cs @@ -0,0 +1,925 @@ +namespace WindowsInput.Native +{ + /// + /// The list of DirectInput keyboard scan codes from dinput.h in dxsdk + /// + public enum DirectInputKeyCode + { + /// + /// Escape key + /// + DikEscape = 0x01, + /// + /// '1' key on main keyboard + /// + Dik1 = 0x02, + /// + /// '2' key on main keyboard + /// + Dik2 = 0x03, + /// + /// '3' key on main keyboard + /// + Dik3 = 0x04, + /// + /// '4' key on main keyboard + /// + Dik4 = 0x05, + /// + /// '5' key on main keyboard + /// + Dik5 = 0x06, + /// + /// '6' key on main keyboard + /// + Dik6 = 0x07, + /// + /// '7' key on main keyboard + /// + Dik7 = 0x08, + /// + /// '8' key on main keyboard + /// + Dik8 = 0x09, + /// + /// '9' key on main keyboard + /// + Dik9 = 0x0A, + /// + /// '0' key on main keyboard + /// + Dik0 = 0x0B, + /// + /// '-' key on main keyboard + /// + DikMinus = 0x0C, + /// + /// '=' key + /// + DikEquals = 0x0D, + /// + /// Backspace key + /// + DikBack = 0x0E, + /// + /// Tab key + /// + DikTab = 0x0F, + /// + /// 'q' key + /// + DikQ = 0x10, + /// + /// 'w' key + /// + DikW = 0x11, + /// + /// 'e' key + /// + DikE = 0x12, + /// + /// 'r' key + /// + DikR = 0x13, + /// + /// 't' key + /// + DikT = 0x14, + /// + /// 'y' key + /// + DikY = 0x15, + /// + /// 'u' key + /// + DikU = 0x16, + /// + /// 'i' key + /// + DikI = 0x17, + /// + /// 'o' key + /// + DikO = 0x18, + /// + /// 'p' key + /// + DikP = 0x19, + /// + /// '[' key??? + /// + DikLbracket = 0x1A, + /// + /// ']' key??? + /// + DikRbracket = 0x1B, + /// + /// 'enter' key on main keyboard + /// + DikReturn = 0x1C, + /// + /// Left control key + /// + DikLcontrol = 0x1D, + /// + /// 'a' key + /// + DikA = 0x1E, + /// + /// 's' key + /// + DikS = 0x1F, + /// + /// 'd' key + /// + DikD = 0x20, + /// + /// 'f' key + /// + DikF = 0x21, + /// + /// 'g' key + /// + DikG = 0x22, + /// + /// 'h' key + /// + DikH = 0x23, + /// + /// 'j' key + /// + DikJ = 0x24, + /// + /// 'k' key + /// + DikK = 0x25, + /// + /// 'l' key + /// + DikL = 0x26, + /// + /// ';' key + /// + DikSemicolon = 0x27, + /// + /// ' key + /// + DikApostrophe = 0x28, + /// + /// '`' key (Accent grave) + /// + DikGrave = 0x29, + /// + /// Left shift key + /// + DikLshift = 0x2A, + /// + /// '\' key + /// + DikBackslash = 0x2B, + /// + /// 'z' key + /// + DikZ = 0x2C, + /// + /// 'x' key + /// + DikX = 0x2D, + /// + /// 'c' key + /// + DikC = 0x2E, + /// + /// 'v' key + /// + DikV = 0x2F, + /// + /// 'b' key + /// + DikB = 0x30, + /// + /// 'n' key + /// + DikN = 0x31, + /// + /// 'm' key + /// + DikM = 0x32, + /// + /// ',' key + /// + DikComma = 0x33, + /// + /// '.' key on main keyboard + /// + DikPeriod = 0x34, + /// + /// '/' key on main keyboard + /// + DikSlash = 0x35, + /// + /// Right shift key + /// + DikRshift = 0x36, + /// + /// '*' key on numeric keypad + /// + DikMultiply = 0x37, + /// + /// Left alt key + /// + DikLmenu = 0x38, + /// + /// ' ' key + /// + DikSpace = 0x39, + /// + /// Caps lock key + /// + DikCapital = 0x3A, + /// + /// 'F1' key + /// + DikF1 = 0x3B, + /// + /// 'F2' key + /// + DikF2 = 0x3C, + /// + /// 'F3' key + /// + DikF3 = 0x3D, + /// + /// 'F4' key + /// + DikF4 = 0x3E, + /// + /// 'F5' key + /// + DikF5 = 0x3F, + /// + /// 'F6' key + /// + DikF6 = 0x40, + /// + /// 'F7' key + /// + DikF7 = 0x41, + /// + /// 'F8' key + /// + DikF8 = 0x42, + /// + /// 'F9' key + /// + DikF9 = 0x43, + /// + /// 'F10' key + /// + DikF10 = 0x44, + /// + /// Numlock key + /// + DikNumlock = 0x45, + /// + /// Scroll lock key + /// + DikScroll = 0x46 /* Scroll Lock */, + /// + /// '7' key on numeric keypad + /// + DikNumpad7 = 0x47, + /// + /// '8' key on numeric keypad + /// + DikNumpad8 = 0x48, + /// + /// '9' key on numeric keypad + /// + DikNumpad9 = 0x49, + /// + /// '-' key on numeric keypad + /// + DikSubtract = 0x4A, + /// + /// '4' key on numeric keypad + /// + DikNumpad4 = 0x4B, + /// + /// '5' key on numeric keypad + /// + DikNumpad5 = 0x4C, + /// + /// '6' key on numeric keypad + /// + DikNumpad6 = 0x4D, + /// + /// '+' key on numeric keypad + /// + DikAdd = 0x4E, + /// + /// '1' key on numeric keypad + /// + DikNumpad1 = 0x4F, + /// + /// '2' key on numeric keypad + /// + DikNumpad2 = 0x50, + /// + /// '3' key on numeric keypad + /// + DikNumpad3 = 0x51, + /// + /// '0' key on numeric keypad + /// + DikNumpad0 = 0x52, + /// + /// '.' key on numeric keypad + /// + DikDecimal = 0x53, + /// + /// PrintScreen key + /// + DikPrintscreen = 0x54, + /// + /// <> or \| on RT 102-key keyboard (Non-U.S.) + /// + DikOem102 = 0x56, + /// + /// 'F11' key + /// + DikF11 = 0x57, + /// + /// 'F12' key + /// + DikF12 = 0x58, + /// + /// 'F12' key + /// + DikNumeric5 = 0x59, + /// + /// OEM key (VirtualKeyCode 0xEE) + /// + DikOemEe = 0x5A, + /// + /// OEM key (VirtualKeyCode 0xF1) + /// + DikOemF1 = 0x5B, + /// + /// OEM key (VirtualKeyCode 0xF1) + /// + DikOemEa = 0x5C, + /// + /// Erase EOF key + /// + DikEraseEof = 0x5D, + /// + /// OEM key (VirtualKeyCode 0xF5) + /// + DikOemF5 = 0x5E, + /// + /// OEM key (VirtualKeyCode 0xF3) + /// + DikOemF3 = 0x5F, + /// + /// 'Zoom' key + /// + DikZoom = 0x62, + /// + /// 'HELP' key + /// + DikHelp = 0x63, + /// + /// 'F13' key (NEC PC98) + /// + DikF13 = 0x64, + /// + /// 'F14' key (NEC PC98) + /// + DikF14 = 0x65, + /// + /// 'F15' key (NEC PC98) + /// + DikF15 = 0x66, + /// + /// 'F16' key + /// + DikF16 = 0x67, + /// + /// 'F16' key + /// + DikF17 = 0x68, + /// + /// 'F16' key + /// + DikF18 = 0x69, + /// + /// 'F16' key + /// + DikF19 = 0x6A, + /// + /// 'F16' key + /// + DikF20 = 0x6B, + /// + /// 'F16' key + /// + DikF21 = 0x6C, + /// + /// 'F16' key + /// + DikF22 = 0x6D, + /// + /// 'F16' key + /// + DikF23 = 0x6E, + /// + /// OEM key (VirtualKeyCode 0xED) + /// + DikOemEd = 0x6F, + /// + /// Japanese keyboard + /// + DikKana = 0x70, + /// + /// OEM key (VirtualKeyCode 0xE9) + /// + DikOemE9 = 0x71, + /// + /// /? on Brazilian keyboard + /// + DikAbntC1 = 0x73, + /// + /// F24 key + /// + DikF24 = 0x76, + /// + /// Japanese keyboard + /// + DikConvert = 0x79, + /// + /// Japanese keyboard + /// + DikNoconvert = 0x7B, + /// + /// Japanese keyboard + /// + DikYen = 0x7D, + /// + /// Numpad . on Brazilian keyboard + /// + DikAbntC2 = 0x7E, + /// + /// '=' on numeric keypad (NEC PC98) + /// + DikNumpadequals = 0x8D, + /// + /// Previous Track key (DIK_CIRCUMFLEX on Japanese keyboard) + /// + DikPrevtrack = 0x90, + /// + /// NEC PC98 + /// + DikAt = 0x91, + /// + /// NEC PC98 + /// + DikColon = 0x92, + /// + /// NEC PC98 + /// + DikUnderline = 0x93, + /// + /// Japanese keyboard + /// + DikKanji = 0x94, + /// + /// NEC PC98 + /// + DikStop = 0x95, + /// + /// Japan AX + /// + DikAx = 0x96, + /// + /// J3100 + /// + DikUnlabeled = 0x97, + /// + /// Next Track key + /// + DikNexttrack = 0x99, + /// + /// Enter key on numeric keypad + /// + DikNumpadenter = 0x9C, + /// + /// Right control key + /// + DikRcontrol = 0x9D, + /// + /// Mute key + /// + DikMute = 0xA0, + /// + /// Calculator key + /// + DikCalculator = 0xA1, + /// + /// Play/Pause key + /// + DikPlaypause = 0xA2, + /// + /// Media Stop key + /// + DikMediastop = 0xA4, + /// + /// Volume down key + /// + DikVolumedown = 0xAE, + /// + /// Volume up key + /// + DikVolumeup = 0xB0, + /// + /// Web home key + /// + DikWebhome = 0xB2, + /// + /// ',' key on numeric keypad + /// + DikNumpadcomma = 0xB3, + /// + /// '/' key on numeric keypad + /// + DikDivide = 0xB5, + /// + /// ??? + /// + DikSysrq = 0xB7, + /// + /// Right alt key + /// + DikRmenu = 0xB8, + /// + /// Pause key + /// + DikPause = 0xC5, + /// + /// Home key on arrow keypad + /// + DikHome = 0xC7, + /// + /// Up arrow key on arrow keypad + /// + DikUp = 0xC8, + /// + /// PageUp key on arrow keypad + /// + DikPrior = 0xC9, + /// + /// Left arrow key on arrow keypad + /// + DikLeft = 0xCB, + /// + /// Right arrow key on arrow keypad + /// + DikRight = 0xCD, + /// + /// End key on arrow keypad + /// + DikEnd = 0xCF, + /// + /// Down arrow key on arrow keypad + /// + DikDown = 0xD0, + /// + /// PageDown key on arrow keypad + /// + DikNext = 0xD1, + /// + /// Insert key on arrow keypad + /// + DikInsert = 0xD2, + /// + /// Delete key on arrow keypad + /// + DikDelete = 0xD3, + /// + /// Left Windows key + /// + DikLwin = 0xDB, + /// + /// Right Windows key + /// + DikRwin = 0xDC, + /// + /// AppMenu key + /// + DikApps = 0xDD, + /// + /// System power key + /// + DikPower = 0xDE, + /// + /// System sleep key + /// + DikSleep = 0xDF, + /// + /// System wake key + /// + DikWake = 0xE3, + /// + /// Web search key + /// + DikWebsearch = 0xE5, + /// + /// Web favorites key + /// + DikWebfavorites = 0xE6, + /// + /// Web refresh key + /// + DikWebrefresh = 0xE7, + /// + /// Web stop key + /// + DikWebstop = 0xE8, + /// + /// Web forward key + /// + DikWebforward = 0xE9, + /// + /// Web back key + /// + DikWebback = 0xEA, + /// + /// My computer key + /// + DikMycomputer = 0xEB, + /// + /// Mail key + /// + DikMail = 0xEC, + /// + /// Media select + /// + DikMediaselect = 0xED, + /// + /// PageUp key on arrow keypad + /// + DikPageUp = DikPrior, + /// + /// PageDown key on arrow keypad + /// + DikPageDown = DikNext, + /// + /// Backspace key + /// + DikBackspace = DikBack, + /// + /// '*' key on numeric keypad + /// + DikNumpadStar = DikMultiply, + /// + /// Left alt key + /// + DikLalt = DikLmenu, + /// + /// Caps lock key + /// + DikCapslock = DikCapital, + /// + /// '-' key on numeric keypad + /// + DikNumpadMinus = DikSubtract, + /// + /// '+' key on numeric keypad + /// + DikNumpadPlus = DikAdd, + /// + /// '.' key on numeric keypad + /// + DikNumpadPeriod = DikDecimal, + /// + /// '/' key on numeric keypad + /// + DikNumpadSlash = DikDivide, + /// + /// Right alt key + /// + DikRalt = DikRmenu, + /// + /// Up arrow key on arrow keypad + /// + DikUparrow = DikUp, + /// + /// PageUp key on arrow keypad + /// + DikPgup = DikPrior, + /// + /// Left arrow key on arrow keypad + /// + DikLeftarrow = DikLeft, + /// + /// Right arrow key on arrow keypad + /// + DikRightarrow = DikRight, + /// + /// Down arrow key on arrow keypad + /// + DikDownarrow = DikDown, + /// + /// PageDown key on arrow keypad + /// + DikPgdn = DikNext, + + /// + /// + DikEnter = DikReturn, + /// + /// + DikNumpad_Equals = DikNumpadequals, + /// + /// + DikNumpad_Enter = DikNumpadenter, + /// + /// + DikNumpad_Comma = DikNumpadcomma, + + /// + /// + DikNumpad_Divide = DikNumpadSlash, + /// + /// + DikNumpadDivide = DikNumpadSlash, + /// + /// + DikNumpad_Multiply = DikNumpadStar, + /// + /// + DikNumpadMultiply = DikNumpadStar, + /// + /// + DikNumpad_Subtract = DikNumpadMinus, + /// + /// + DikNumpadSubtract = DikNumpadMinus, + /// + /// + DikNumpad_Decimal = DikNumpadPeriod, + /// + /// + DikNumpadDecimal = DikNumpadPeriod, + /// + /// + DikNumpad_Add = DikNumpadPlus, + /// + /// + DikNumpadAdd = DikNumpadPlus, + /// + /// + DikNumpad_7 = DikNumpad7, + /// + /// + DikNumpad_8 = DikNumpad8, + /// + /// + DikNumpad_9 = DikNumpad9, + /// + /// + DikNumpad_4 = DikNumpad4, + /// + /// + DikNumpad_5 = DikNumpad5, + /// + /// + DikNumpad_6 = DikNumpad6, + /// + /// + DikNumpad_1 = DikNumpad1, + /// + /// + DikNumpad_2 = DikNumpad2, + /// + /// + DikNumpad_3 = DikNumpad3, + /// + /// + DikNumpad_0 = DikNumpad0, + /// + /// + DikLeftBracket = DikLbracket, + /// + /// + DikRightBracket = DikRbracket, + + /// + /// + DikLeftAlt = DikLmenu, + /// + /// + DikRightAlt = DikRmenu, + /// + /// + DikRightControl = DikRcontrol, + /// + /// + DikLeftControl = DikLcontrol, + /// + /// + DikRightShift = DikRshift, + /// + /// + DikLeftShift = DikLshift + + + /* + //DikCircumflex = DikPrevtrack, + + Dikß = 0x0C, + Dikü = 0, + Dikö = 0, + Dikä = 0, + Diké = 0, + Dikè = 0, + Dikç = 0, + Dikà = 0, + Dikù = 0, + + DikAcute = 0, + DikCircumflex = 0, + DikPlus = 0, + DikHash = 0, + + DikSuperscriptTwo = 0, + DikAmpersand = 0, + DikDoubleQuote = 0, + DikLeftParenthesis = 0, + DikRightParenthesis = 0, + DikDollar = 0, + DikAsterisk = 0, + DikExclamationPoint = 0 + + DikScrollLock = 0x46, + DikABNT_C1 = 0x73, + DikABNT_C2 = 0x7E, + DikWebFavourites = 0, + DikGreenModifier = 0, + DikOrangeModifier = 0, + DikSection = 0, + DikClear = 0, + DikLeftBracket = 0, + DikRightBracket = 0, + DikUnderline = 0, + DikLessThan = 0, + DikGreaterThan = 0, + DikTilde = 0, + DikRing = 0, + DikUmlaut = 0, + DikHalf = 0, + DikDollar = 0, + DikSuperscriptTwo = 0, + DikAmpersand = 0, + DikDoubleQuote = 0, + DikLeftParenthesis = 0, + DikRightParenthesis = 0, + DikAsterisk = 0, + DikExclamationPoint = 0, + DikMacron = 0, + DikOverline = 0, + DikBreve = 0, + DikOverdot = 0, + DikHookAbove = 0, + DikRingAbove = 0, + DikDoubleAcute = 0, + DikCaron = 0, + DikVerticalLineAbove = 0, + DikDoubleVerticalLineAbove = 0, + DikDoubleGrave = 0, + DikCandrabindu = 0, + DikInvertedBreve = 0, + DikTurnedCommaAbove = 0, + DikCommaAbove = 0, + DikReversedCommaAbove = 0, + DikCommaAboveRight = 0, + DikGraveBelow = 0, + DikAcuteBelow = 0, + DikLeftTackBelow = 0, + DikRightTackBelow = 0, + DikLeftAngleAbove = 0, + DikHorn = 0, + DikLeftHalfRingBelow = 0, + DikUpTackBelow = 0, + DikDownTackBelow = 0, + DikPlusSignBelow = 0, + DikCedilla = 0*/ + + + + + + + + } +} \ No newline at end of file diff --git a/InputSimulatorPlus/WindowsInput/Native/HARDWAREINPUT.cs b/InputSimulatorPlus/WindowsInput/Native/HARDWAREINPUT.cs new file mode 100644 index 0000000..de621d5 --- /dev/null +++ b/InputSimulatorPlus/WindowsInput/Native/HARDWAREINPUT.cs @@ -0,0 +1,28 @@ +using System; + +namespace WindowsInput.Native +{ +#pragma warning disable 649 + /// + /// The HARDWAREINPUT structure contains information about a simulated message generated by an input device other than a keyboard or mouse. (see: http://msdn.microsoft.com/en-us/library/ms646269(VS.85).aspx) + /// Declared in Winuser.h, include Windows.h + /// + internal struct HARDWAREINPUT + { + /// + /// Value specifying the message generated by the input hardware. + /// + public UInt32 Msg; + + /// + /// Specifies the low-order word of the lParam parameter for uMsg. + /// + public UInt16 ParamL; + + /// + /// Specifies the high-order word of the lParam parameter for uMsg. + /// + public UInt16 ParamH; + } +#pragma warning restore 649 +} diff --git a/InputSimulatorPlus/WindowsInput/Native/INPUT.cs b/InputSimulatorPlus/WindowsInput/Native/INPUT.cs new file mode 100644 index 0000000..10ef88a --- /dev/null +++ b/InputSimulatorPlus/WindowsInput/Native/INPUT.cs @@ -0,0 +1,30 @@ +using System; + +namespace WindowsInput.Native +{ +#pragma warning disable 649 + /// + /// The INPUT structure is used by SendInput to store information for synthesizing input events such as keystrokes, mouse movement, and mouse clicks. (see: http://msdn.microsoft.com/en-us/library/ms646270(VS.85).aspx) + /// Declared in Winuser.h, include Windows.h + /// + /// + /// This structure contains information identical to that used in the parameter list of the keybd_event or mouse_event function. + /// Windows 2000/XP: INPUT_KEYBOARD supports nonkeyboard input methods, such as handwriting recognition or voice recognition, as if it were text input by using the KEYEVENTF_UNICODE flag. For more information, see the remarks section of KEYBDINPUT. + /// + internal struct INPUT + { + /// + /// Specifies the type of the input event. This member can be one of the following values. + /// - The event is a mouse event. Use the mi structure of the union. + /// - The event is a keyboard event. Use the ki structure of the union. + /// - Windows 95/98/Me: The event is from input hardware other than a keyboard or mouse. Use the hi structure of the union. + /// + public UInt32 Type; + + /// + /// The data structure that contains information about the simulated Mouse, Keyboard or Hardware event. + /// + public MOUSEKEYBDHARDWAREINPUT Data; + } +#pragma warning restore 649 +} diff --git a/InputSimulatorPlus/WindowsInput/Native/InputType.cs b/InputSimulatorPlus/WindowsInput/Native/InputType.cs new file mode 100644 index 0000000..231b362 --- /dev/null +++ b/InputSimulatorPlus/WindowsInput/Native/InputType.cs @@ -0,0 +1,23 @@ +namespace WindowsInput.Native +{ + /// + /// Specifies the type of the input event. This member can be one of the following values. + /// + internal enum InputType : uint // UInt32 + { + /// + /// INPUT_MOUSE = 0x00 (The event is a mouse event. Use the mi structure of the union.) + /// + Mouse = 0, + + /// + /// INPUT_KEYBOARD = 0x01 (The event is a keyboard event. Use the ki structure of the union.) + /// + Keyboard = 1, + + /// + /// INPUT_HARDWARE = 0x02 (Windows 95/98/Me: The event is from input hardware other than a keyboard or mouse. Use the hi structure of the union.) + /// + Hardware = 2, + } +} diff --git a/InputSimulatorPlus/WindowsInput/Native/KEYBDINPUT.cs b/InputSimulatorPlus/WindowsInput/Native/KEYBDINPUT.cs new file mode 100644 index 0000000..03a4097 --- /dev/null +++ b/InputSimulatorPlus/WindowsInput/Native/KEYBDINPUT.cs @@ -0,0 +1,46 @@ +using System; + +namespace WindowsInput.Native +{ +#pragma warning disable 649 + /// + /// The KEYBDINPUT structure contains information about a simulated keyboard event. (see: http://msdn.microsoft.com/en-us/library/ms646271(VS.85).aspx) + /// Declared in Winuser.h, include Windows.h + /// + /// + /// Windows 2000/XP: INPUT_KEYBOARD supports nonkeyboard-input methods—such as handwriting recognition or voice recognition—as if it were text input by using the KEYEVENTF_UNICODE flag. If KEYEVENTF_UNICODE is specified, SendInput sends a WM_KEYDOWN or WM_KEYUP message to the foreground thread's message queue with wParam equal to VK_PACKET. Once GetMessage or PeekMessage obtains this message, passing the message to TranslateMessage posts a WM_CHAR message with the Unicode character originally specified by wScan. This Unicode character will automatically be converted to the appropriate ANSI value if it is posted to an ANSI window. + /// Windows 2000/XP: Set the KEYEVENTF_SCANCODE flag to define keyboard input in terms of the scan code. This is useful to simulate a physical keystroke regardless of which keyboard is currently being used. The virtual key value of a key may alter depending on the current keyboard layout or what other keys were pressed, but the scan code will always be the same. + /// + internal struct KEYBDINPUT + { + /// + /// Specifies a virtual-key code. The code must be a value in the range 1 to 254. The Winuser.h header file provides macro definitions (VK_*) for each value. If the dwFlags member specifies KEYEVENTF_UNICODE, wVk must be 0. + /// + public UInt16 KeyCode; + + /// + /// Specifies a hardware scan code for the key. If dwFlags specifies KEYEVENTF_UNICODE, wScan specifies a Unicode character which is to be sent to the foreground application. + /// + public UInt16 Scan; + + /// + /// Specifies various aspects of a keystroke. This member can be certain combinations of the following values. + /// KEYEVENTF_EXTENDEDKEY - If specified, the scan code was preceded by a prefix byte that has the value 0xE0 (224). + /// KEYEVENTF_KEYUP - If specified, the key is being released. If not specified, the key is being pressed. + /// KEYEVENTF_SCANCODE - If specified, wScan identifies the key and wVk is ignored. + /// KEYEVENTF_UNICODE - Windows 2000/XP: If specified, the system synthesizes a VK_PACKET keystroke. The wVk parameter must be zero. This flag can only be combined with the KEYEVENTF_KEYUP flag. For more information, see the Remarks section. + /// + public UInt32 Flags; + + /// + /// Time stamp for the event, in milliseconds. If this parameter is zero, the system will provide its own time stamp. + /// + public UInt32 Time; + + /// + /// Specifies an additional value associated with the keystroke. Use the GetMessageExtraInfo function to obtain this information. + /// + public IntPtr ExtraInfo; + } +#pragma warning restore 649 +} diff --git a/InputSimulatorPlus/WindowsInput/Native/KeyboardFlag.cs b/InputSimulatorPlus/WindowsInput/Native/KeyboardFlag.cs new file mode 100644 index 0000000..f270788 --- /dev/null +++ b/InputSimulatorPlus/WindowsInput/Native/KeyboardFlag.cs @@ -0,0 +1,31 @@ +using System; + +namespace WindowsInput.Native +{ + /// + /// Specifies various aspects of a keystroke. This member can be certain combinations of the following values. + /// + [Flags] + internal enum KeyboardFlag : uint // UInt32 + { + /// + /// KEYEVENTF_EXTENDEDKEY = 0x0001 (If specified, the scan code was preceded by a prefix byte that has the value 0xE0 (224).) + /// + ExtendedKey = 0x0001, + + /// + /// KEYEVENTF_KEYUP = 0x0002 (If specified, the key is being released. If not specified, the key is being pressed.) + /// + KeyUp = 0x0002, + + /// + /// KEYEVENTF_UNICODE = 0x0004 (If specified, wScan identifies the key and wVk is ignored.) + /// + Unicode = 0x0004, + + /// + /// KEYEVENTF_SCANCODE = 0x0008 (Windows 2000/XP: If specified, the system synthesizes a VK_PACKET keystroke. The wVk parameter must be zero. This flag can only be combined with the KEYEVENTF_KEYUP flag. For more information, see the Remarks section.) + /// + ScanCode = 0x0008, + } +} diff --git a/InputSimulatorPlus/WindowsInput/Native/MOUSEINPUT.cs b/InputSimulatorPlus/WindowsInput/Native/MOUSEINPUT.cs new file mode 100644 index 0000000..496ff0a --- /dev/null +++ b/InputSimulatorPlus/WindowsInput/Native/MOUSEINPUT.cs @@ -0,0 +1,56 @@ +using System; + +namespace WindowsInput.Native +{ +#pragma warning disable 649 + /// + /// The MOUSEINPUT structure contains information about a simulated mouse event. (see: http://msdn.microsoft.com/en-us/library/ms646273(VS.85).aspx) + /// Declared in Winuser.h, include Windows.h + /// + /// + /// If the mouse has moved, indicated by MOUSEEVENTF_MOVE, dx and dy specify information about that movement. The information is specified as absolute or relative integer values. + /// If MOUSEEVENTF_ABSOLUTE value is specified, dx and dy contain normalized absolute coordinates between 0 and 65,535. The event procedure maps these coordinates onto the display surface. Coordinate (0,0) maps onto the upper-left corner of the display surface; coordinate (65535,65535) maps onto the lower-right corner. In a multimonitor system, the coordinates map to the primary monitor. + /// Windows 2000/XP: If MOUSEEVENTF_VIRTUALDESK is specified, the coordinates map to the entire virtual desktop. + /// If the MOUSEEVENTF_ABSOLUTE value is not specified, dx and dy specify movement relative to the previous mouse event (the last reported position). Positive values mean the mouse moved right (or down); negative values mean the mouse moved left (or up). + /// Relative mouse motion is subject to the effects of the mouse speed and the two-mouse threshold values. A user sets these three values with the Pointer Speed slider of the Control Panel's Mouse Properties sheet. You can obtain and set these values using the SystemParametersInfo function. + /// The system applies two tests to the specified relative mouse movement. If the specified distance along either the x or y axis is greater than the first mouse threshold value, and the mouse speed is not zero, the system doubles the distance. If the specified distance along either the x or y axis is greater than the second mouse threshold value, and the mouse speed is equal to two, the system doubles the distance that resulted from applying the first threshold test. It is thus possible for the system to multiply specified relative mouse movement along the x or y axis by up to four times. + /// + internal struct MOUSEINPUT + { + /// + /// Specifies the absolute position of the mouse, or the amount of motion since the last mouse event was generated, depending on the value of the dwFlags member. Absolute data is specified as the x coordinate of the mouse; relative data is specified as the number of pixels moved. + /// + public Int32 X; + + /// + /// Specifies the absolute position of the mouse, or the amount of motion since the last mouse event was generated, depending on the value of the dwFlags member. Absolute data is specified as the y coordinate of the mouse; relative data is specified as the number of pixels moved. + /// + public Int32 Y; + + /// + /// If dwFlags contains MOUSEEVENTF_WHEEL, then mouseData specifies the amount of wheel movement. A positive value indicates that the wheel was rotated forward, away from the user; a negative value indicates that the wheel was rotated backward, toward the user. One wheel click is defined as WHEEL_DELTA, which is 120. + /// Windows Vista: If dwFlags contains MOUSEEVENTF_HWHEEL, then dwData specifies the amount of wheel movement. A positive value indicates that the wheel was rotated to the right; a negative value indicates that the wheel was rotated to the left. One wheel click is defined as WHEEL_DELTA, which is 120. + /// Windows 2000/XP: IfdwFlags does not contain MOUSEEVENTF_WHEEL, MOUSEEVENTF_XDOWN, or MOUSEEVENTF_XUP, then mouseData should be zero. + /// If dwFlags contains MOUSEEVENTF_XDOWN or MOUSEEVENTF_XUP, then mouseData specifies which X buttons were pressed or released. This value may be any combination of the following flags. + /// + public UInt32 MouseData; + + /// + /// A set of bit flags that specify various aspects of mouse motion and button clicks. The bits in this member can be any reasonable combination of the following values. + /// The bit flags that specify mouse button status are set to indicate changes in status, not ongoing conditions. For example, if the left mouse button is pressed and held down, MOUSEEVENTF_LEFTDOWN is set when the left button is first pressed, but not for subsequent motions. Similarly, MOUSEEVENTF_LEFTUP is set only when the button is first released. + /// You cannot specify both the MOUSEEVENTF_WHEEL flag and either MOUSEEVENTF_XDOWN or MOUSEEVENTF_XUP flags simultaneously in the dwFlags parameter, because they both require use of the mouseData field. + /// + public UInt32 Flags; + + /// + /// Time stamp for the event, in milliseconds. If this parameter is 0, the system will provide its own time stamp. + /// + public UInt32 Time; + + /// + /// Specifies an additional value associated with the mouse event. An application calls GetMessageExtraInfo to obtain this extra information. + /// + public IntPtr ExtraInfo; + } +#pragma warning restore 649 +} \ No newline at end of file diff --git a/InputSimulatorPlus/WindowsInput/Native/MOUSEKEYBDHARDWAREINPUT.cs b/InputSimulatorPlus/WindowsInput/Native/MOUSEKEYBDHARDWAREINPUT.cs new file mode 100644 index 0000000..0700f8e --- /dev/null +++ b/InputSimulatorPlus/WindowsInput/Native/MOUSEKEYBDHARDWAREINPUT.cs @@ -0,0 +1,31 @@ +using System.Runtime.InteropServices; + +namespace WindowsInput.Native +{ +#pragma warning disable 649 + /// + /// The combined/overlayed structure that includes Mouse, Keyboard and Hardware Input message data (see: http://msdn.microsoft.com/en-us/library/ms646270(VS.85).aspx) + /// + [StructLayout(LayoutKind.Explicit)] + internal struct MOUSEKEYBDHARDWAREINPUT + { + /// + /// The definition. + /// + [FieldOffset(0)] + public MOUSEINPUT Mouse; + + /// + /// The definition. + /// + [FieldOffset(0)] + public KEYBDINPUT Keyboard; + + /// + /// The definition. + /// + [FieldOffset(0)] + public HARDWAREINPUT Hardware; + } +#pragma warning restore 649 +} diff --git a/InputSimulatorPlus/WindowsInput/Native/MouseFlag.cs b/InputSimulatorPlus/WindowsInput/Native/MouseFlag.cs new file mode 100644 index 0000000..f86b1d1 --- /dev/null +++ b/InputSimulatorPlus/WindowsInput/Native/MouseFlag.cs @@ -0,0 +1,76 @@ +using System; + +namespace WindowsInput.Native +{ + /// + /// The set of MouseFlags for use in the Flags property of the structure. (See: http://msdn.microsoft.com/en-us/library/ms646273(VS.85).aspx) + /// + [Flags] + internal enum MouseFlag : uint // UInt32 + { + /// + /// Specifies that movement occurred. + /// + Move = 0x0001, + + /// + /// Specifies that the left button was pressed. + /// + LeftDown = 0x0002, + + /// + /// Specifies that the left button was released. + /// + LeftUp = 0x0004, + + /// + /// Specifies that the right button was pressed. + /// + RightDown = 0x0008, + + /// + /// Specifies that the right button was released. + /// + RightUp = 0x0010, + + /// + /// Specifies that the middle button was pressed. + /// + MiddleDown = 0x0020, + + /// + /// Specifies that the middle button was released. + /// + MiddleUp = 0x0040, + + /// + /// Windows 2000/XP: Specifies that an X button was pressed. + /// + XDown = 0x0080, + + /// + /// Windows 2000/XP: Specifies that an X button was released. + /// + XUp = 0x0100, + + /// + /// Windows NT/2000/XP: Specifies that the wheel was moved, if the mouse has a wheel. The amount of movement is specified in mouseData. + /// + VerticalWheel = 0x0800, + + /// + /// Specifies that the wheel was moved horizontally, if the mouse has a wheel. The amount of movement is specified in mouseData. Windows 2000/XP: Not supported. + /// + HorizontalWheel = 0x1000, + + /// + /// Windows 2000/XP: Maps coordinates to the entire desktop. Must be used with MOUSEEVENTF_ABSOLUTE. + /// + VirtualDesk = 0x4000, + + /// + /// Specifies that the dx and dy members contain normalized absolute coordinates. If the flag is not set, dxand dy contain relative data (the change in position since the last reported position). This flag can be set, or not set, regardless of what kind of mouse or other pointing device, if any, is connected to the system. For further information about relative mouse motion, see the following Remarks section. + /// + Absolute = 0x8000, + } +} diff --git a/InputSimulatorPlus/WindowsInput/Native/NativeMethods.cs b/InputSimulatorPlus/WindowsInput/Native/NativeMethods.cs new file mode 100644 index 0000000..2e84654 --- /dev/null +++ b/InputSimulatorPlus/WindowsInput/Native/NativeMethods.cs @@ -0,0 +1,158 @@ +using System; +using System.Runtime.InteropServices; + +namespace WindowsInput.Native +{ + /// + /// References all of the Native Windows API methods for the WindowsInput functionality. + /// + internal static class NativeMethods + { + /// + /// The GetAsyncKeyState function determines whether a key is up or down at the time the function is called, and whether the key was pressed after a previous call to GetAsyncKeyState. (See: http://msdn.microsoft.com/en-us/library/ms646293(VS.85).aspx) + /// + /// Specifies one of 256 possible virtual-key codes. For more information, see Virtual Key Codes. Windows NT/2000/XP: You can use left- and right-distinguishing constants to specify certain keys. See the Remarks section for further information. + /// + /// If the function succeeds, the return value specifies whether the key was pressed since the last call to GetAsyncKeyState, and whether the key is currently up or down. If the most significant bit is set, the key is down, and if the least significant bit is set, the key was pressed after the previous call to GetAsyncKeyState. However, you should not rely on this last behavior; for more information, see the Remarks. + /// + /// Windows NT/2000/XP: The return value is zero for the following cases: + /// - The current desktop is not the active desktop + /// - The foreground thread belongs to another process and the desktop does not allow the hook or the journal record. + /// + /// Windows 95/98/Me: The return value is the global asynchronous key state for each virtual key. The system does not check which thread has the keyboard focus. + /// + /// Windows 95/98/Me: Windows 95 does not support the left- and right-distinguishing constants. If you call GetAsyncKeyState with these constants, the return value is zero. + /// + /// + /// The GetAsyncKeyState function works with mouse buttons. However, it checks on the state of the physical mouse buttons, not on the logical mouse buttons that the physical buttons are mapped to. For example, the call GetAsyncKeyState(VK_LBUTTON) always returns the state of the left physical mouse button, regardless of whether it is mapped to the left or right logical mouse button. You can determine the system's current mapping of physical mouse buttons to logical mouse buttons by calling + /// Copy CodeGetSystemMetrics(SM_SWAPBUTTON) which returns TRUE if the mouse buttons have been swapped. + /// + /// Although the least significant bit of the return value indicates whether the key has been pressed since the last query, due to the pre-emptive multitasking nature of Windows, another application can call GetAsyncKeyState and receive the "recently pressed" bit instead of your application. The behavior of the least significant bit of the return value is retained strictly for compatibility with 16-bit Windows applications (which are non-preemptive) and should not be relied upon. + /// + /// You can use the virtual-key code constants VK_SHIFT, VK_CONTROL, and VK_MENU as values for the vKey parameter. This gives the state of the SHIFT, CTRL, or ALT keys without distinguishing between left and right. + /// + /// Windows NT/2000/XP: You can use the following virtual-key code constants as values for vKey to distinguish between the left and right instances of those keys. + /// + /// Code Meaning + /// VK_LSHIFT Left-shift key. + /// VK_RSHIFT Right-shift key. + /// VK_LCONTROL Left-control key. + /// VK_RCONTROL Right-control key. + /// VK_LMENU Left-menu key. + /// VK_RMENU Right-menu key. + /// + /// These left- and right-distinguishing constants are only available when you call the GetKeyboardState, SetKeyboardState, GetAsyncKeyState, GetKeyState, and MapVirtualKey functions. + /// + [DllImport("user32.dll", SetLastError = true)] + public static extern Int16 GetAsyncKeyState(UInt16 virtualKeyCode); + + /// + /// The GetKeyState function retrieves the status of the specified virtual key. The status specifies whether the key is up, down, or toggled (on, off alternating each time the key is pressed). (See: http://msdn.microsoft.com/en-us/library/ms646301(VS.85).aspx) + /// + /// + /// Specifies a virtual key. If the desired virtual key is a letter or digit (A through Z, a through z, or 0 through 9), nVirtKey must be set to the ASCII value of that character. For other keys, it must be a virtual-key code. + /// If a non-English keyboard layout is used, virtual keys with values in the range ASCII A through Z and 0 through 9 are used to specify most of the character keys. For example, for the German keyboard layout, the virtual key of value ASCII O (0x4F) refers to the "o" key, whereas VK_OEM_1 refers to the "o with umlaut" key. + /// + /// + /// The return value specifies the status of the specified virtual key, as follows: + /// If the high-order bit is 1, the key is down; otherwise, it is up. + /// If the low-order bit is 1, the key is toggled. A key, such as the CAPS LOCK key, is toggled if it is turned on. The key is off and untoggled if the low-order bit is 0. A toggle key's indicator light (if any) on the keyboard will be on when the key is toggled, and off when the key is untoggled. + /// + /// + /// The key status returned from this function changes as a thread reads key messages from its message queue. The status does not reflect the interrupt-level state associated with the hardware. Use the GetAsyncKeyState function to retrieve that information. + /// An application calls GetKeyState in response to a keyboard-input message. This function retrieves the state of the key when the input message was generated. + /// To retrieve state information for all the virtual keys, use the GetKeyboardState function. + /// An application can use the virtual-key code constants VK_SHIFT, VK_CONTROL, and VK_MENU as values for the nVirtKey parameter. This gives the status of the SHIFT, CTRL, or ALT keys without distinguishing between left and right. An application can also use the following virtual-key code constants as values for nVirtKey to distinguish between the left and right instances of those keys. + /// VK_LSHIFT + /// VK_RSHIFT + /// VK_LCONTROL + /// VK_RCONTROL + /// VK_LMENU + /// VK_RMENU + /// + /// These left- and right-distinguishing constants are available to an application only through the GetKeyboardState, SetKeyboardState, GetAsyncKeyState, GetKeyState, and MapVirtualKey functions. + /// + [DllImport("user32.dll", SetLastError = true)] + public static extern Int16 GetKeyState(UInt16 virtualKeyCode); + + /// + /// The SendInput function synthesizes keystrokes, mouse motions, and button clicks. + /// + /// Number of structures in the Inputs array. + /// Pointer to an array of INPUT structures. Each structure represents an event to be inserted into the keyboard or mouse input stream. + /// Specifies the size, in bytes, of an INPUT structure. If cbSize is not the size of an INPUT structure, the function fails. + /// The function returns the number of events that it successfully inserted into the keyboard or mouse input stream. If the function returns zero, the input was already blocked by another thread. To get extended error information, call GetLastError.Microsoft Windows Vista. This function fails when it is blocked by User Interface Privilege Isolation (UIPI). Note that neither GetLastError nor the return value will indicate the failure was caused by UIPI blocking. + /// + /// Microsoft Windows Vista. This function is subject to UIPI. Applications are permitted to inject input only into applications that are at an equal or lesser integrity level. + /// The SendInput function inserts the events in the INPUT structures serially into the keyboard or mouse input stream. These events are not interspersed with other keyboard or mouse input events inserted either by the user (with the keyboard or mouse) or by calls to keybd_event, mouse_event, or other calls to SendInput. + /// This function does not reset the keyboard's current state. Any keys that are already pressed when the function is called might interfere with the events that this function generates. To avoid this problem, check the keyboard's state with the GetAsyncKeyState function and correct as necessary. + /// + [DllImport("user32.dll", SetLastError = true)] + public static extern UInt32 SendInput(UInt32 numberOfInputs, INPUT[] inputs, Int32 sizeOfInputStructure); + + /// + /// The GetMessageExtraInfo function retrieves the extra message information for the current thread. Extra message information is an application- or driver-defined value associated with the current thread's message queue. + /// + /// + /// To set a thread's extra message information, use the SetMessageExtraInfo function. + [DllImport("user32.dll")] + public static extern IntPtr GetMessageExtraInfo(); + + /// + /// The MapVirtualKey function translates (maps) a virtual-key code into a scan + /// code or character value, or translates a scan code into a virtual-key code + /// + /// [in] Specifies the virtual-key code or scan code for a key. + /// How this value is interpreted depends on the value of the uMapType parameter + /// + /// [in] Specifies the translation to perform. The value of this + /// parameter depends on the value of the uCode parameter. + /// + /// Either a scan code, a virtual-key code, or a character value, depending on + /// the value of uCode and uMapType. If there is no translation, the return value is zero + /// + [DllImport("user32.dll")] + public static extern int MapVirtualKey(uint uCode, MapVirtualKeyMapTypes uMapType); + + /// + /// The set of valid MapTypes used in MapVirtualKey + /// + public enum MapVirtualKeyMapTypes : uint + { + /// + /// uCode is a virtual-key code and is translated into a scan code. + /// If it is a virtual-key code that does not distinguish between left- and + /// right-hand keys, the left-hand scan code is returned. + /// If there is no translation, the function returns 0. + /// + MapvkVkToVsc = 0x00, + + /// + /// uCode is a scan code and is translated into a virtual-key code that + /// does not distinguish between left- and right-hand keys. If there is no + /// translation, the function returns 0. + /// + MapvkVscToVk = 0x01, + + /// + /// uCode is a virtual-key code and is translated into an unshifted + /// character value in the low-order word of the return value. Dead keys (diacritics) + /// are indicated by setting the top bit of the return value. If there is no + /// translation, the function returns 0. + /// + MapvkVkToChar = 0x02, + + /// + /// Windows NT/2000/XP: uCode is a scan code and is translated into a + /// virtual-key code that distinguishes between left- and right-hand keys. If + /// there is no translation, the function returns 0. + /// + MapvkVscToVkEx = 0x03, + + /// + /// Not currently documented + /// + MapvkVkToVscEx = 0x04 + } + } +} \ No newline at end of file diff --git a/InputSimulatorPlus/WindowsInput/Native/VirtualKeyCode.cs b/InputSimulatorPlus/WindowsInput/Native/VirtualKeyCode.cs new file mode 100644 index 0000000..8c35c62 --- /dev/null +++ b/InputSimulatorPlus/WindowsInput/Native/VirtualKeyCode.cs @@ -0,0 +1,960 @@ +using System; + +namespace WindowsInput.Native +{ + /// + /// The list of VirtualKeyCodes (see: http://msdn.microsoft.com/en-us/library/ms645540(VS.85).aspx) + /// + public enum VirtualKeyCode //: UInt16 + { + /// + /// Left mouse button + /// + LBUTTON = 0x01, + + /// + /// Right mouse button + /// + RBUTTON = 0x02, + + /// + /// Control-break processing + /// + CANCEL = 0x03, + + /// + /// Middle mouse button (three-button mouse) - NOT contiguous with LBUTTON and RBUTTON + /// + MBUTTON = 0x04, + + /// + /// Windows 2000/XP: X1 mouse button - NOT contiguous with LBUTTON and RBUTTON + /// + XBUTTON1 = 0x05, + + /// + /// Windows 2000/XP: X2 mouse button - NOT contiguous with LBUTTON and RBUTTON + /// + XBUTTON2 = 0x06, + + // 0x07 : Undefined + + /// + /// BACKSPACE key + /// + BACK = 0x08, + + /// + /// TAB key + /// + TAB = 0x09, + + // 0x0A - 0x0B : Reserved + + /// + /// CLEAR key + /// + CLEAR = 0x0C, + + /// + /// ENTER key + /// + RETURN = 0x0D, + + // 0x0E - 0x0F : Undefined + + /// + /// SHIFT key + /// + SHIFT = 0x10, + + /// + /// CTRL key + /// + CONTROL = 0x11, + + /// + /// ALT key + /// + MENU = 0x12, + + /// + /// PAUSE key + /// + PAUSE = 0x13, + + /// + /// CAPS LOCK key + /// + CAPITAL = 0x14, + + /// + /// Input Method Editor (IME) Kana mode + /// + KANA = 0x15, + + /// + /// IME Hanguel mode (maintained for compatibility; use HANGUL) + /// + HANGEUL = 0x15, + + /// + /// IME Hangul mode + /// + HANGUL = 0x15, + + // 0x16 : Undefined + + /// + /// IME Junja mode + /// + JUNJA = 0x17, + + /// + /// IME final mode + /// + FINAL = 0x18, + + /// + /// IME Hanja mode + /// + HANJA = 0x19, + + /// + /// IME Kanji mode + /// + KANJI = 0x19, + + // 0x1A : Undefined + + /// + /// ESC key + /// + ESCAPE = 0x1B, + + /// + /// IME convert + /// + CONVERT = 0x1C, + + /// + /// IME nonconvert + /// + NONCONVERT = 0x1D, + + /// + /// IME accept + /// + ACCEPT = 0x1E, + + /// + /// IME mode change request + /// + MODECHANGE = 0x1F, + + /// + /// SPACEBAR + /// + SPACE = 0x20, + + /// + /// PAGE UP key + /// + PRIOR = 0x21, + + /// + /// PAGE DOWN key + /// + NEXT = 0x22, + + /// + /// END key + /// + END = 0x23, + + /// + /// HOME key + /// + HOME = 0x24, + + /// + /// LEFT ARROW key + /// + LEFT = 0x25, + + /// + /// UP ARROW key + /// + UP = 0x26, + + /// + /// RIGHT ARROW key + /// + RIGHT = 0x27, + + /// + /// DOWN ARROW key + /// + DOWN = 0x28, + + /// + /// SELECT key + /// + SELECT = 0x29, + + /// + /// PRINT key + /// + PRINT = 0x2A, + + /// + /// EXECUTE key + /// + EXECUTE = 0x2B, + + /// + /// PRINT SCREEN key + /// + SNAPSHOT = 0x2C, + + /// + /// INS key + /// + INSERT = 0x2D, + + /// + /// DEL key + /// + DELETE = 0x2E, + + /// + /// HELP key + /// + HELP = 0x2F, + + /// + /// 0 key + /// + VK_0 = 0x30, + + /// + /// 1 key + /// + VK_1 = 0x31, + + /// + /// 2 key + /// + VK_2 = 0x32, + + /// + /// 3 key + /// + VK_3 = 0x33, + + /// + /// 4 key + /// + VK_4 = 0x34, + + /// + /// 5 key + /// + VK_5 = 0x35, + + /// + /// 6 key + /// + VK_6 = 0x36, + + /// + /// 7 key + /// + VK_7 = 0x37, + + /// + /// 8 key + /// + VK_8 = 0x38, + + /// + /// 9 key + /// + VK_9 = 0x39, + + // + // 0x3A - 0x40 : Udefined + // + + /// + /// A key + /// + VK_A = 0x41, + + /// + /// B key + /// + VK_B = 0x42, + + /// + /// C key + /// + VK_C = 0x43, + + /// + /// D key + /// + VK_D = 0x44, + + /// + /// E key + /// + VK_E = 0x45, + + /// + /// F key + /// + VK_F = 0x46, + + /// + /// G key + /// + VK_G = 0x47, + + /// + /// H key + /// + VK_H = 0x48, + + /// + /// I key + /// + VK_I = 0x49, + + /// + /// J key + /// + VK_J = 0x4A, + + /// + /// K key + /// + VK_K = 0x4B, + + /// + /// L key + /// + VK_L = 0x4C, + + /// + /// M key + /// + VK_M = 0x4D, + + /// + /// N key + /// + VK_N = 0x4E, + + /// + /// O key + /// + VK_O = 0x4F, + + /// + /// P key + /// + VK_P = 0x50, + + /// + /// Q key + /// + VK_Q = 0x51, + + /// + /// R key + /// + VK_R = 0x52, + + /// + /// S key + /// + VK_S = 0x53, + + /// + /// T key + /// + VK_T = 0x54, + + /// + /// U key + /// + VK_U = 0x55, + + /// + /// V key + /// + VK_V = 0x56, + + /// + /// W key + /// + VK_W = 0x57, + + /// + /// X key + /// + VK_X = 0x58, + + /// + /// Y key + /// + VK_Y = 0x59, + + /// + /// Z key + /// + VK_Z = 0x5A, + + /// + /// Left Windows key (Microsoft Natural keyboard) + /// + LWIN = 0x5B, + + /// + /// Right Windows key (Natural keyboard) + /// + RWIN = 0x5C, + + /// + /// Applications key (Natural keyboard) + /// + APPS = 0x5D, + + // 0x5E : reserved + + /// + /// Computer Sleep key + /// + SLEEP = 0x5F, + + /// + /// Numeric keypad 0 key + /// + NUMPAD0 = 0x60, + + /// + /// Numeric keypad 1 key + /// + NUMPAD1 = 0x61, + + /// + /// Numeric keypad 2 key + /// + NUMPAD2 = 0x62, + + /// + /// Numeric keypad 3 key + /// + NUMPAD3 = 0x63, + + /// + /// Numeric keypad 4 key + /// + NUMPAD4 = 0x64, + + /// + /// Numeric keypad 5 key + /// + NUMPAD5 = 0x65, + + /// + /// Numeric keypad 6 key + /// + NUMPAD6 = 0x66, + + /// + /// Numeric keypad 7 key + /// + NUMPAD7 = 0x67, + + /// + /// Numeric keypad 8 key + /// + NUMPAD8 = 0x68, + + /// + /// Numeric keypad 9 key + /// + NUMPAD9 = 0x69, + + /// + /// Multiply key + /// + MULTIPLY = 0x6A, + + /// + /// Add key + /// + ADD = 0x6B, + + /// + /// Separator key + /// + SEPARATOR = 0x6C, + + /// + /// Subtract key + /// + SUBTRACT = 0x6D, + + /// + /// Decimal key + /// + DECIMAL = 0x6E, + + /// + /// Divide key + /// + DIVIDE = 0x6F, + + /// + /// F1 key + /// + F1 = 0x70, + + /// + /// F2 key + /// + F2 = 0x71, + + /// + /// F3 key + /// + F3 = 0x72, + + /// + /// F4 key + /// + F4 = 0x73, + + /// + /// F5 key + /// + F5 = 0x74, + + /// + /// F6 key + /// + F6 = 0x75, + + /// + /// F7 key + /// + F7 = 0x76, + + /// + /// F8 key + /// + F8 = 0x77, + + /// + /// F9 key + /// + F9 = 0x78, + + /// + /// F10 key + /// + F10 = 0x79, + + /// + /// F11 key + /// + F11 = 0x7A, + + /// + /// F12 key + /// + F12 = 0x7B, + + /// + /// F13 key + /// + F13 = 0x7C, + + /// + /// F14 key + /// + F14 = 0x7D, + + /// + /// F15 key + /// + F15 = 0x7E, + + /// + /// F16 key + /// + F16 = 0x7F, + + /// + /// F17 key + /// + F17 = 0x80, + + /// + /// F18 key + /// + F18 = 0x81, + + /// + /// F19 key + /// + F19 = 0x82, + + /// + /// F20 key + /// + F20 = 0x83, + + /// + /// F21 key + /// + F21 = 0x84, + + /// + /// F22 key + /// + F22 = 0x85, + + /// + /// F23 key + /// + F23 = 0x86, + + /// + /// F24 key + /// + F24 = 0x87, + + // + // 0x88 - 0x8F : Unassigned + // + + /// + /// NUM LOCK key + /// + NUMLOCK = 0x90, + + /// + /// SCROLL LOCK key + /// + SCROLL = 0x91, + + // 0x92 - 0x96 : OEM Specific + + // 0x97 - 0x9F : Unassigned + + // + // L* & R* - left and right Alt, Ctrl and Shift virtual keys. + // Used only as parameters to GetAsyncKeyState() and GetKeyState(). + // No other API or message will distinguish left and right keys in this way. + // + + /// + /// Left SHIFT key - Used only as parameters to GetAsyncKeyState() and GetKeyState() + /// + LSHIFT = 0xA0, + + /// + /// Right SHIFT key - Used only as parameters to GetAsyncKeyState() and GetKeyState() + /// + RSHIFT = 0xA1, + + /// + /// Left CONTROL key - Used only as parameters to GetAsyncKeyState() and GetKeyState() + /// + LCONTROL = 0xA2, + + /// + /// Right CONTROL key - Used only as parameters to GetAsyncKeyState() and GetKeyState() + /// + RCONTROL = 0xA3, + + /// + /// Left MENU key - Used only as parameters to GetAsyncKeyState() and GetKeyState() + /// + LMENU = 0xA4, + + /// + /// Right MENU key - Used only as parameters to GetAsyncKeyState() and GetKeyState() + /// + RMENU = 0xA5, + + /// + /// Windows 2000/XP: Browser Back key + /// + BROWSER_BACK = 0xA6, + + /// + /// Windows 2000/XP: Browser Forward key + /// + BROWSER_FORWARD = 0xA7, + + /// + /// Windows 2000/XP: Browser Refresh key + /// + BROWSER_REFRESH = 0xA8, + + /// + /// Windows 2000/XP: Browser Stop key + /// + BROWSER_STOP = 0xA9, + + /// + /// Windows 2000/XP: Browser Search key + /// + BROWSER_SEARCH = 0xAA, + + /// + /// Windows 2000/XP: Browser Favorites key + /// + BROWSER_FAVORITES = 0xAB, + + /// + /// Windows 2000/XP: Browser Start and Home key + /// + BROWSER_HOME = 0xAC, + + /// + /// Windows 2000/XP: Volume Mute key + /// + VOLUME_MUTE = 0xAD, + + /// + /// Windows 2000/XP: Volume Down key + /// + VOLUME_DOWN = 0xAE, + + /// + /// Windows 2000/XP: Volume Up key + /// + VOLUME_UP = 0xAF, + + /// + /// Windows 2000/XP: Next Track key + /// + MEDIA_NEXT_TRACK = 0xB0, + + /// + /// Windows 2000/XP: Previous Track key + /// + MEDIA_PREV_TRACK = 0xB1, + + /// + /// Windows 2000/XP: Stop Media key + /// + MEDIA_STOP = 0xB2, + + /// + /// Windows 2000/XP: Play/Pause Media key + /// + MEDIA_PLAY_PAUSE = 0xB3, + + /// + /// Windows 2000/XP: Start Mail key + /// + LAUNCH_MAIL = 0xB4, + + /// + /// Windows 2000/XP: Select Media key + /// + LAUNCH_MEDIA_SELECT = 0xB5, + + /// + /// Windows 2000/XP: Start Application 1 key + /// + LAUNCH_APP1 = 0xB6, + + /// + /// Windows 2000/XP: Start Application 2 key + /// + LAUNCH_APP2 = 0xB7, + + // + // 0xB8 - 0xB9 : Reserved + // + + /// + /// Used for miscellaneous characters; it can vary by keyboard. Windows 2000/XP: For the US standard keyboard, the ';:' key + /// + OEM_1 = 0xBA, + + /// + /// Windows 2000/XP: For any country/region, the '+' key + /// + OEM_PLUS = 0xBB, + + /// + /// Windows 2000/XP: For any country/region, the ',' key + /// + OEM_COMMA = 0xBC, + + /// + /// Windows 2000/XP: For any country/region, the '-' key + /// + OEM_MINUS = 0xBD, + + /// + /// Windows 2000/XP: For any country/region, the '.' key + /// + OEM_PERIOD = 0xBE, + + /// + /// Used for miscellaneous characters; it can vary by keyboard. Windows 2000/XP: For the US standard keyboard, the '/?' key + /// + OEM_2 = 0xBF, + + /// + /// Used for miscellaneous characters; it can vary by keyboard. Windows 2000/XP: For the US standard keyboard, the '`~' key + /// + OEM_3 = 0xC0, + + // + // 0xC1 - 0xD7 : Reserved + // + + // + // 0xD8 - 0xDA : Unassigned + // + + /// + /// Used for miscellaneous characters; it can vary by keyboard. Windows 2000/XP: For the US standard keyboard, the '[{' key + /// + OEM_4 = 0xDB, + + /// + /// Used for miscellaneous characters; it can vary by keyboard. Windows 2000/XP: For the US standard keyboard, the '\|' key + /// + OEM_5 = 0xDC, + + /// + /// Used for miscellaneous characters; it can vary by keyboard. Windows 2000/XP: For the US standard keyboard, the ']}' key + /// + OEM_6 = 0xDD, + + /// + /// Used for miscellaneous characters; it can vary by keyboard. Windows 2000/XP: For the US standard keyboard, the 'single-quote/double-quote' key + /// + OEM_7 = 0xDE, + + /// + /// Used for miscellaneous characters; it can vary by keyboard. + /// + OEM_8 = 0xDF, + + // + // 0xE0 : Reserved + // + + // + // 0xE1 : OEM Specific + // + + /// + /// Windows 2000/XP: Either the angle bracket key or the backslash key on the RT 102-key keyboard + /// + OEM_102 = 0xE2, + + // + // (0xE3-E4) : OEM specific + // + + /// + /// Windows 95/98/Me, Windows NT 4.0, Windows 2000/XP: IME PROCESS key + /// + PROCESSKEY = 0xE5, + + // + // 0xE6 : OEM specific + // + + /// + /// Windows 2000/XP: Used to pass Unicode characters as if they were keystrokes. The PACKET key is the low word of a 32-bit Virtual Key value used for non-keyboard input methods. For more information, see Remark in KEYBDINPUT, SendInput, WM_KEYDOWN, and WM_KEYUP + /// + PACKET = 0xE7, + + // + // 0xE8 : Unassigned + // + + // + // 0xE9-F5 : OEM specific + // + + /// + /// Attn key + /// + ATTN = 0xF6, + + /// + /// CrSel key + /// + CRSEL = 0xF7, + + /// + /// ExSel key + /// + EXSEL = 0xF8, + + /// + /// Erase EOF key + /// + EREOF = 0xF9, + + /// + /// Play key + /// + PLAY = 0xFA, + + /// + /// Zoom key + /// + ZOOM = 0xFB, + + /// + /// Reserved + /// + NONAME = 0xFC, + + /// + /// PA1 key + /// + PA1 = 0xFD, + + /// + /// Clear key + /// + OEM_CLEAR = 0xFE, + } + + /// + /// Extension class for VirtualKeyCode + /// + public static class VKExtend + { + /// + /// Returns the equivalent virtualkey for an input character + /// + /// + /// Character to input + /// + public static VirtualKeyCode FromChar(this VirtualKeyCode VK, char InputChar) + { + InputChar = Convert.ToChar(InputChar.ToString().ToUpper()); + int code = (byte)InputChar; + return (VirtualKeyCode)code; + } + } +} diff --git a/InputSimulatorPlus/WindowsInput/Native/XButton.cs b/InputSimulatorPlus/WindowsInput/Native/XButton.cs new file mode 100644 index 0000000..5b61024 --- /dev/null +++ b/InputSimulatorPlus/WindowsInput/Native/XButton.cs @@ -0,0 +1,18 @@ +namespace WindowsInput.Native +{ + /// + /// XButton definitions for use in the MouseData property of the structure. (See: http://msdn.microsoft.com/en-us/library/ms646273(VS.85).aspx) + /// + internal enum XButton : uint + { + /// + /// Set if the first X button is pressed or released. + /// + XButton1 = 0x0001, + + /// + /// Set if the second X button is pressed or released. + /// + XButton2 = 0x0002, + } +} diff --git a/InputSimulatorPlus/WindowsInput/Properties/AssemblyInfo.cs b/InputSimulatorPlus/WindowsInput/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..73f8db8 --- /dev/null +++ b/InputSimulatorPlus/WindowsInput/Properties/AssemblyInfo.cs @@ -0,0 +1,38 @@ +using System; +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("WindowsInputPlus")] +[assembly: AssemblyDescription("Fork of the original Windows Input Simulator with scan code support for increased compatibility.")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("Theodoros Chatzigiannakis")] +[assembly: AssemblyProduct("WindowsInputPlus")] +[assembly: AssemblyCopyright("Copyright © michaelnoonan 2010, Copyright © Theodoros Chatzigiannakis 2018")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] +[assembly: CLSCompliant(true)] +[assembly: InternalsVisibleTo("WindowsInput.Tests,PublicKey=00240000048000009400000006020000002400005253413100040000010001004d0fe1ddb5b46f75b2d00740763ead8fd41e4212ca347163134409b7e9e99c80f3eef5772166a965ecd31bea7c7d68c2356f49db0ebec721cf1bad6f71f63092d90e22eccb84c374b0ae91553c6e74a8dbfa36f34520993ec0a1780df0852e698a803dd155b83a070f21057417dbd7128e70b21ad5c5626b51a4f18dd70351b8")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("a04b3cc4-a36c-4597-b0a9-d6f16dd6dcf6")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.7.0")] \ No newline at end of file diff --git a/InputSimulatorPlus/WindowsInput/WindowsInput.csproj b/InputSimulatorPlus/WindowsInput/WindowsInput.csproj new file mode 100644 index 0000000..9fab198 --- /dev/null +++ b/InputSimulatorPlus/WindowsInput/WindowsInput.csproj @@ -0,0 +1,95 @@ + + + + Debug + AnyCPU + 9.0.30729 + 2.0 + {3549CD6F-80F8-450F-B99E-CF0A736B1F2A} + Library + Properties + WindowsInput + WindowsInput + v4.7.2 + 512 + + + + + 3.5 + + + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + bin\Debug\WindowsInput.xml + true + AllRules.ruleset + false + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + bin\Release\WindowsInput.xml + AllRules.ruleset + false + + + true + + + WindowsInput.snk + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/InputSimulatorPlus/WindowsInput/WindowsInput.nuspec b/InputSimulatorPlus/WindowsInput/WindowsInput.nuspec new file mode 100644 index 0000000..91955d0 --- /dev/null +++ b/InputSimulatorPlus/WindowsInput/WindowsInput.nuspec @@ -0,0 +1,19 @@ + + + + InputSimulatorPlus + 1.0.7.0 + Windows Input Simulator Plus + Michael Noonan, Theodoros Chatzigiannakis + TChatzigiannakis + false + https://github.com/TChatzigiannakis/InputSimulatorPlus + This package is a fork of the Windows Input Simulator package. If you have encountered applications that do not receive input from the original Windows Input Simulator, try replacing it with this package instead. + + Copyright 2009-2018 + c# windows input + + + + + \ No newline at end of file diff --git a/InputSimulatorPlus/WindowsInput/WindowsInput.snk b/InputSimulatorPlus/WindowsInput/WindowsInput.snk new file mode 100644 index 0000000000000000000000000000000000000000..5104dccb329143ac6c6c5be317fa31286d81b405 GIT binary patch literal 596 zcmV-a0;~N80ssI2Bme+XQ$aES1ONa50096^58>Ulv~P8?&<8+vKCO?`9zqhzG;w1S zL70P`?)7&eW~pWD(;Mo1eQ3fpZ%Nw@zQ-ZY8?A3~_Arv!4kGN!gu`^Ou8~zd zZgi;I`Zn`LAelbEp?D4Og)V7|fIZPwxH<<9Aq8|7+t(6~aIzZJ#bRqwr16c{15vo+ zNP=s6`g85&ZWi8ZrCX95af*O_xKzfS{Jl3~qo=HKC%H(n(5ENFJSN*TJ zD~nwqif8QedHnJZE+W2$_|1NXJLokrOI=$L*PI0L#T@#Z)T6ppjaBrCk76bQ(XzsR zjP58_KwG0<^I46?VAE)20QkVoAuz%V79@mU%#7D}{?RXO>;C+LMeZjjIz!sJv5w{} zJrb-=ln{7PdmGgW`V`!P8OS|@6hW7mbE**V7MUT$VC z3uA@ZmO^3yypu#|26!%)4XylS3IILo!^!hpa%$4xgqU+eu=ci)SIC65T`18~PaTVp z^(TphKxmoVHQPIVF>C|b0|ngTr0Lf9$FWLdGVl3~+BX9I|D8+m;aoKKw9)Mni&!fc iG{j|HK~sWqX<+#_f@}Q*%}D=NuR?{PI@n6w0j+s9^dd|E literal 0 HcmV?d00001 diff --git a/InputSimulatorPlus/WindowsInput/WindowsInputDeviceStateAdaptor.cs b/InputSimulatorPlus/WindowsInput/WindowsInputDeviceStateAdaptor.cs new file mode 100644 index 0000000..4a43f70 --- /dev/null +++ b/InputSimulatorPlus/WindowsInput/WindowsInputDeviceStateAdaptor.cs @@ -0,0 +1,157 @@ +using System; +using WindowsInput.Native; + +namespace WindowsInput +{ + /// + /// An implementation of for Windows by calling the native and methods. + /// + public class WindowsInputDeviceStateAdaptor : IInputDeviceStateAdaptor + { + + /// + /// Determines whether the specified key is up or down by calling the GetKeyState function. (See: http://msdn.microsoft.com/en-us/library/ms646301(VS.85).aspx) + /// + /// The for the key. + /// + /// true if the key is down; otherwise, false. + /// + /// + /// The key status returned from this function changes as a thread reads key messages from its message queue. The status does not reflect the interrupt-level state associated with the hardware. Use the GetAsyncKeyState function to retrieve that information. + /// An application calls GetKeyState in response to a keyboard-input message. This function retrieves the state of the key when the input message was generated. + /// To retrieve state information for all the virtual keys, use the GetKeyboardState function. + /// An application can use the virtual-key code constants VK_SHIFT, VK_CONTROL, and VK_MENU as values for Bthe nVirtKey parameter. This gives the status of the SHIFT, CTRL, or ALT keys without distinguishing between left and right. An application can also use the following virtual-key code constants as values for nVirtKey to distinguish between the left and right instances of those keys. + /// VK_LSHIFT + /// VK_RSHIFT + /// VK_LCONTROL + /// VK_RCONTROL + /// VK_LMENU + /// VK_RMENU + /// + /// These left- and right-distinguishing constants are available to an application only through the GetKeyboardState, SetKeyboardState, GetAsyncKeyState, GetKeyState, and MapVirtualKey functions. + /// + public bool IsKeyDown(VirtualKeyCode keyCode) + { + Int16 result = NativeMethods.GetKeyState((UInt16)keyCode); + return (result < 0); + } + + /// + /// Determines whether the specified key is up or downby calling the function. (See: http://msdn.microsoft.com/en-us/library/ms646301(VS.85).aspx) + /// + /// The for the key. + /// + /// true if the key is up; otherwise, false. + /// + /// + /// The key status returned from this function changes as a thread reads key messages from its message queue. The status does not reflect the interrupt-level state associated with the hardware. Use the GetAsyncKeyState function to retrieve that information. + /// An application calls GetKeyState in response to a keyboard-input message. This function retrieves the state of the key when the input message was generated. + /// To retrieve state information for all the virtual keys, use the GetKeyboardState function. + /// An application can use the virtual-key code constants VK_SHIFT, VK_CONTROL, and VK_MENU as values for Bthe nVirtKey parameter. This gives the status of the SHIFT, CTRL, or ALT keys without distinguishing between left and right. An application can also use the following virtual-key code constants as values for nVirtKey to distinguish between the left and right instances of those keys. + /// VK_LSHIFT + /// VK_RSHIFT + /// VK_LCONTROL + /// VK_RCONTROL + /// VK_LMENU + /// VK_RMENU + /// + /// These left- and right-distinguishing constants are available to an application only through the GetKeyboardState, SetKeyboardState, GetAsyncKeyState, GetKeyState, and MapVirtualKey functions. + /// + public bool IsKeyUp(VirtualKeyCode keyCode) + { + return !IsKeyDown(keyCode); + } + + /// + /// Determines whether the physical key is up or down at the time the function is called regardless of whether the application thread has read the keyboard event from the message pump by calling the function. (See: http://msdn.microsoft.com/en-us/library/ms646293(VS.85).aspx) + /// + /// The for the key. + /// + /// true if the key is down; otherwise, false. + /// + /// + /// The GetAsyncKeyState function works with mouse buttons. However, it checks on the state of the physical mouse buttons, not on the logical mouse buttons that the physical buttons are mapped to. For example, the call GetAsyncKeyState(VK_LBUTTON) always returns the state of the left physical mouse button, regardless of whether it is mapped to the left or right logical mouse button. You can determine the system's current mapping of physical mouse buttons to logical mouse buttons by calling + /// Copy CodeGetSystemMetrics(SM_SWAPBUTTON) which returns TRUE if the mouse buttons have been swapped. + /// + /// Although the least significant bit of the return value indicates whether the key has been pressed since the last query, due to the pre-emptive multitasking nature of Windows, another application can call GetAsyncKeyState and receive the "recently pressed" bit instead of your application. The behavior of the least significant bit of the return value is retained strictly for compatibility with 16-bit Windows applications (which are non-preemptive) and should not be relied upon. + /// + /// You can use the virtual-key code constants VK_SHIFT, VK_CONTROL, and VK_MENU as values for the vKey parameter. This gives the state of the SHIFT, CTRL, or ALT keys without distinguishing between left and right. + /// + /// Windows NT/2000/XP: You can use the following virtual-key code constants as values for vKey to distinguish between the left and right instances of those keys. + /// + /// Code Meaning + /// VK_LSHIFT Left-shift key. + /// VK_RSHIFT Right-shift key. + /// VK_LCONTROL Left-control key. + /// VK_RCONTROL Right-control key. + /// VK_LMENU Left-menu key. + /// VK_RMENU Right-menu key. + /// + /// These left- and right-distinguishing constants are only available when you call the GetKeyboardState, SetKeyboardState, GetAsyncKeyState, GetKeyState, and MapVirtualKey functions. + /// + public bool IsHardwareKeyDown(VirtualKeyCode keyCode) + { + var result = NativeMethods.GetAsyncKeyState((UInt16)keyCode); + return (result < 0); + } + + /// + /// Determines whether the physical key is up or down at the time the function is called regardless of whether the application thread has read the keyboard event from the message pump by calling the function. (See: http://msdn.microsoft.com/en-us/library/ms646293(VS.85).aspx) + /// + /// The for the key. + /// + /// true if the key is up; otherwise, false. + /// + /// + /// The GetAsyncKeyState function works with mouse buttons. However, it checks on the state of the physical mouse buttons, not on the logical mouse buttons that the physical buttons are mapped to. For example, the call GetAsyncKeyState(VK_LBUTTON) always returns the state of the left physical mouse button, regardless of whether it is mapped to the left or right logical mouse button. You can determine the system's current mapping of physical mouse buttons to logical mouse buttons by calling + /// Copy CodeGetSystemMetrics(SM_SWAPBUTTON) which returns TRUE if the mouse buttons have been swapped. + /// + /// Although the least significant bit of the return value indicates whether the key has been pressed since the last query, due to the pre-emptive multitasking nature of Windows, another application can call GetAsyncKeyState and receive the "recently pressed" bit instead of your application. The behavior of the least significant bit of the return value is retained strictly for compatibility with 16-bit Windows applications (which are non-preemptive) and should not be relied upon. + /// + /// You can use the virtual-key code constants VK_SHIFT, VK_CONTROL, and VK_MENU as values for the vKey parameter. This gives the state of the SHIFT, CTRL, or ALT keys without distinguishing between left and right. + /// + /// Windows NT/2000/XP: You can use the following virtual-key code constants as values for vKey to distinguish between the left and right instances of those keys. + /// + /// Code Meaning + /// VK_LSHIFT Left-shift key. + /// VK_RSHIFT Right-shift key. + /// VK_LCONTROL Left-control key. + /// VK_RCONTROL Right-control key. + /// VK_LMENU Left-menu key. + /// VK_RMENU Right-menu key. + /// + /// These left- and right-distinguishing constants are only available when you call the GetKeyboardState, SetKeyboardState, GetAsyncKeyState, GetKeyState, and MapVirtualKey functions. + /// + public bool IsHardwareKeyUp(VirtualKeyCode keyCode) + { + return !IsHardwareKeyDown(keyCode); + } + + /// + /// Determines whether the toggling key is toggled on (in-effect) or not by calling the function. (See: http://msdn.microsoft.com/en-us/library/ms646301(VS.85).aspx) + /// + /// The for the key. + /// + /// true if the toggling key is toggled on (in-effect); otherwise, false. + /// + /// + /// The key status returned from this function changes as a thread reads key messages from its message queue. The status does not reflect the interrupt-level state associated with the hardware. Use the GetAsyncKeyState function to retrieve that information. + /// An application calls GetKeyState in response to a keyboard-input message. This function retrieves the state of the key when the input message was generated. + /// To retrieve state information for all the virtual keys, use the GetKeyboardState function. + /// An application can use the virtual-key code constants VK_SHIFT, VK_CONTROL, and VK_MENU as values for the nVirtKey parameter. This gives the status of the SHIFT, CTRL, or ALT keys without distinguishing between left and right. An application can also use the following virtual-key code constants as values for nVirtKey to distinguish between the left and right instances of those keys. + /// VK_LSHIFT + /// VK_RSHIFT + /// VK_LCONTROL + /// VK_RCONTROL + /// VK_LMENU + /// VK_RMENU + /// + /// These left- and right-distinguishing constants are available to an application only through the GetKeyboardState, SetKeyboardState, GetAsyncKeyState, GetKeyState, and MapVirtualKey functions. + /// + public bool IsTogglingKeyInEffect(VirtualKeyCode keyCode) + { + Int16 result = NativeMethods.GetKeyState((UInt16)keyCode); + return (result & 0x01) == 0x01; + } + } +} \ No newline at end of file diff --git a/InputSimulatorPlus/WindowsInput/WindowsInputMessageDispatcher.cs b/InputSimulatorPlus/WindowsInput/WindowsInputMessageDispatcher.cs new file mode 100644 index 0000000..d978152 --- /dev/null +++ b/InputSimulatorPlus/WindowsInput/WindowsInputMessageDispatcher.cs @@ -0,0 +1,28 @@ +using System; +using System.Runtime.InteropServices; +using WindowsInput.Native; + +namespace WindowsInput +{ + /// + /// Implements the by calling SendInput. + /// + internal class WindowsInputMessageDispatcher : IInputMessageDispatcher + { + /// + /// Dispatches the specified list of messages in their specified order by issuing a single called to SendInput. + /// + /// The list of messages to be dispatched. + /// If the array is empty. + /// If the array is null. + /// If the any of the commands in the array could not be sent successfully. + public void DispatchInput(INPUT[] inputs) + { + if (inputs == null) throw new ArgumentNullException("inputs"); + if (inputs.Length == 0) throw new ArgumentException("The input array was empty", "inputs"); + var successful = NativeMethods.SendInput((UInt32)inputs.Length, inputs, Marshal.SizeOf(typeof (INPUT))); + if (successful != inputs.Length) + throw new Exception("Some simulated input commands were not sent successfully. The most common reason for this happening are the security features of Windows including User Interface Privacy Isolation (UIPI). Your application can only send commands to applications of the same or lower elevation. Similarly certain commands are restricted to Accessibility/UIAutomation applications. Refer to the project home page and the code samples for more information."); + } + } +} \ No newline at end of file diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..985ff02 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2019 mhwlng + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 0000000..1598113 --- /dev/null +++ b/README.md @@ -0,0 +1,104 @@ +# streamdeck-starcitizen + +**WORK IN PROGRESS** + +TODO : + +* Test multiple language keyboards (only lightly tested 3.13 with US keyboard) + +* Automatically update binding in streamdeck plugin when changing binding in Star Citizen options screen (now streamdeck.exe has to be restarted) + +* Add more logging to pluginlog.log + +* Allow switching between LIVE and PTU versions. (Currently gets binding only from LIVE installation) + +**Elgato Stream Deck button plugin for Star Citizen** + +This plugin connects to Star Citizen to get the key bindings. + +Credit goes to https://github.com/SCToolsfactory/SCJMapper-V2 for all the code to get the defaultProfile.xml from the pk4 file etc. + +The button works in a similar way, to the streamdeck 'Hotkey' button type. +So, there is only one image and there is no game state feedback for these buttons. +The differences with the 'Hotkey' buttons are, that it gets the keyboard binding from the game. +When the stream deck button is pushed, the 'key down' event is sent to the keyboard +and only after the stream deck button is released, the 'key up' event is sent to the keyboard. + +A sound can be played when pressing a button. + +**You can clear the sound path, by clicking on the label in front of the file picker edit box.** + +The buttons can also be used with multi-action buttons. + +After you install the plugin in the streamdeck software, then there will be a new button type in the streamdeck software. + +Choose a button in the streamdeck software (drag and drop), then choose a Star Citizen function for that button (that must have a keyboard binding in Star Citizen!) and then choose any picture for that button. + +Add an image to a button in this way: + +![Button Image](https://i.imgur.com/xkgy7uZ.png) +Animated gif files are supported. + + +When the plugin is first started, it finds and opens the game file : + +`C:\Program Files\Roberts Space Industries\StarCitizen\LIVE\Data.p4k` + +and extracts `defaultProfile.xml` and also english text resources. This could take more than 10 seconds. + +Compressed versions (files ending in .scj) are cached in the plugin directory and should be automatically refreshed, the next time Star Citizen is updated to a new version. + +You can also delete the .scj files and restart the plugin, to extract the files from the p4k file again. + +For easier debugging, installation and testing, `defaultProfile.xml`, `dropdowntemplate.html` and `keybindings.csv` files are created in the plugin directory. + +The plugin uses all the active keyboard bindings from `defaultProfile.xml` and then overrules some of the bindings, with any custom keyboard bindings from this file : + +`C:\Program Files\Roberts Space Industries\StarCitizen\LIVE\USER\Client\0\Profiles\default\actionmaps.xml` + +The `dropdowntemplate.html` can be used to update the `%appdata%\Elgato\StreamDeck\Plugins\com.mhwlng.starcitizen.sdPlugin\PropertyInspector\StarCitizen\Static.html` file. + + + +The plugin installer is here: https://github.com/mhwlng/streamdeck-starcitizen/releases + +To install the plugin, double click the file `com.mhwlng.starcitizen.streamDeckPlugin` which should install the plugin. + +(This only works, if the plugin not already installed. Otherwise you will need to uninstall or remove the plugin first.) + +This .streamDeckPlugin file is a zip file and the contents are simply copied to : + +`%appdata%\Elgato\StreamDeck\Plugins\com.mhwlng.starcitizen.sdPlugin` + +To update to a new version : + +Stop the Stream Deck application: + +`c:\Program Files\Elgato\StreamDeck\StreamDeck.exe` + +Then delete the `%appdata%\Elgato\StreamDeck\Plugins\com.mhwlng.starcitizen.sdPlugin` directory. (make a backup copy first) + +Then start the streamdeck software again. + +Then double click the file `com.mhwlng.starcitizen.streamDeckPlugin` as usual. + +MAKE SURE that you save any images, profiles etc. that you put in these directories yourself, BEFORE deleting the directory. +And put them back after the installation. +The plugin installer doesn't come with button images. + +The button configurations are not stored in the plugin directory. + +After uninstalling and re-installing the plugin, all the button definition should still be there. + +The com.mhwlng.starcitizen.sdPlugin directory contains a pluginlog.log file, which may be useful for troubleshooting. + +Thanks to : + +https://github.com/BarRaider/streamdeck-tools + +https://github.com/SCToolsfactory/SCJMapper-V2 + +https://github.com/ishaaniMittal/inputsimulator + +https://nerdordie.com/product/stream-deck-key-icons/ + diff --git a/starcitizen.sln b/starcitizen.sln new file mode 100644 index 0000000..1d0a0d0 --- /dev/null +++ b/starcitizen.sln @@ -0,0 +1,31 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.31515.178 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "starcitizen", "starcitizen\starcitizen.csproj", "{761FCC88-EAF9-4C7A-BBFD-139D186437A5}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WindowsInput", "InputSimulatorPlus\WindowsInput\WindowsInput.csproj", "{3549CD6F-80F8-450F-B99E-CF0A736B1F2A}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {761FCC88-EAF9-4C7A-BBFD-139D186437A5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {761FCC88-EAF9-4C7A-BBFD-139D186437A5}.Debug|Any CPU.Build.0 = Debug|Any CPU + {761FCC88-EAF9-4C7A-BBFD-139D186437A5}.Release|Any CPU.ActiveCfg = Release|Any CPU + {761FCC88-EAF9-4C7A-BBFD-139D186437A5}.Release|Any CPU.Build.0 = Release|Any CPU + {3549CD6F-80F8-450F-B99E-CF0A736B1F2A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {3549CD6F-80F8-450F-B99E-CF0A736B1F2A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {3549CD6F-80F8-450F-B99E-CF0A736B1F2A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {3549CD6F-80F8-450F-B99E-CF0A736B1F2A}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {D814FC9C-53B9-4CB1-B46E-AF2604D640B2} + EndGlobalSection +EndGlobal diff --git a/starcitizen/App.config b/starcitizen/App.config new file mode 100644 index 0000000..a68f059 --- /dev/null +++ b/starcitizen/App.config @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/starcitizen/Audio/AudioPlaybackEngine .cs b/starcitizen/Audio/AudioPlaybackEngine .cs new file mode 100644 index 0000000..818617c --- /dev/null +++ b/starcitizen/Audio/AudioPlaybackEngine .cs @@ -0,0 +1,61 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using NAudio.Wave; +using NAudio.Wave.SampleProviders; + +namespace starcitizen +{ + class AudioPlaybackEngine : IDisposable + { + private readonly IWavePlayer outputDevice; + private readonly MixingSampleProvider mixer; + + public AudioPlaybackEngine(int sampleRate = 44100, int channelCount = 2) + { + outputDevice = new WaveOutEvent(); + mixer = new MixingSampleProvider(WaveFormat.CreateIeeeFloatWaveFormat(sampleRate, channelCount)); + mixer.ReadFully = true; + outputDevice.Init(mixer); + outputDevice.Play(); + } + + public void PlaySound(string fileName) + { + var input = new AudioFileReader(fileName); + AddMixerInput(new AutoDisposeFileReader(input)); + } + + private ISampleProvider ConvertToRightChannelCount(ISampleProvider input) + { + if (input.WaveFormat.Channels == mixer.WaveFormat.Channels) + { + return input; + } + if (input.WaveFormat.Channels == 1 && mixer.WaveFormat.Channels == 2) + { + return new MonoToStereoSampleProvider(input); + } + throw new NotImplementedException("Not yet implemented this channel count conversion"); + } + + public void PlaySound(CachedSound sound) + { + AddMixerInput(new CachedSoundSampleProvider(sound)); + } + + private void AddMixerInput(ISampleProvider input) + { + mixer.AddMixerInput(ConvertToRightChannelCount(input)); + } + + public void Dispose() + { + outputDevice.Dispose(); + } + + public static readonly AudioPlaybackEngine Instance = new AudioPlaybackEngine(44100, 2); + } +} diff --git a/starcitizen/Audio/AutoDisposeFileReader.cs b/starcitizen/Audio/AutoDisposeFileReader.cs new file mode 100644 index 0000000..4046888 --- /dev/null +++ b/starcitizen/Audio/AutoDisposeFileReader.cs @@ -0,0 +1,35 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using NAudio.Wave; + +namespace starcitizen +{ + class AutoDisposeFileReader : ISampleProvider + { + private readonly AudioFileReader reader; + private bool isDisposed; + public AutoDisposeFileReader(AudioFileReader reader) + { + this.reader = reader; + this.WaveFormat = reader.WaveFormat; + } + + public int Read(float[] buffer, int offset, int count) + { + if (isDisposed) + return 0; + int read = reader.Read(buffer, offset, count); + if (read == 0) + { + reader.Dispose(); + isDisposed = true; + } + return read; + } + + public WaveFormat WaveFormat { get; private set; } + } +} diff --git a/starcitizen/Audio/CachedSound.cs b/starcitizen/Audio/CachedSound.cs new file mode 100644 index 0000000..a77a19a --- /dev/null +++ b/starcitizen/Audio/CachedSound.cs @@ -0,0 +1,31 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using NAudio.Wave; + +namespace starcitizen +{ + class CachedSound + { + public float[] AudioData { get; private set; } + public WaveFormat WaveFormat { get; private set; } + public CachedSound(string audioFileName) + { + using (var audioFileReader = new AudioFileReader(audioFileName)) + { + // TODO: could add resampling in here if required + WaveFormat = audioFileReader.WaveFormat; + var wholeFile = new List((int)(audioFileReader.Length / 4)); + var readBuffer = new float[audioFileReader.WaveFormat.SampleRate * audioFileReader.WaveFormat.Channels]; + int samplesRead; + while ((samplesRead = audioFileReader.Read(readBuffer, 0, readBuffer.Length)) > 0) + { + wholeFile.AddRange(readBuffer.Take(samplesRead)); + } + AudioData = wholeFile.ToArray(); + } + } + } +} diff --git a/starcitizen/Audio/CachedSoundSampleProvider.cs b/starcitizen/Audio/CachedSoundSampleProvider.cs new file mode 100644 index 0000000..092150f --- /dev/null +++ b/starcitizen/Audio/CachedSoundSampleProvider.cs @@ -0,0 +1,31 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using NAudio.Wave; + +namespace starcitizen +{ + class CachedSoundSampleProvider : ISampleProvider + { + private readonly CachedSound cachedSound; + private long position; + + public CachedSoundSampleProvider(CachedSound cachedSound) + { + this.cachedSound = cachedSound; + } + + public int Read(float[] buffer, int offset, int count) + { + var availableSamples = cachedSound.AudioData.Length - position; + var samplesToCopy = Math.Min(availableSamples, count); + Array.Copy(cachedSound.AudioData, position, buffer, offset, samplesToCopy); + position += samplesToCopy; + return (int)samplesToCopy; + } + + public WaveFormat WaveFormat { get { return cachedSound.WaveFormat; } } + } +} diff --git a/starcitizen/Buttons/StarCitizenBase.cs b/starcitizen/Buttons/StarCitizenBase.cs new file mode 100644 index 0000000..d7322c5 --- /dev/null +++ b/starcitizen/Buttons/StarCitizenBase.cs @@ -0,0 +1,149 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Runtime.InteropServices; +using System.Threading; +using System.Threading.Tasks; +using WindowsInput; +using WindowsInput.Native; +using BarRaider.SdTools; + +namespace starcitizen.Buttons +{ + public abstract class StarCitizenBase : PluginBase + { + [DllImport("user32.dll")] + private static extern uint MapVirtualKeyEx(uint uCode, uint uMapType, IntPtr dwhkl); + + [DllImport("user32.dll", CharSet = CharSet.Auto, ExactSpelling = true)] + private static extern IntPtr GetForegroundWindow(); + + [DllImport("user32.dll", CharSet = CharSet.Auto, ExactSpelling = true)] + private static extern int GetWindowThreadProcessId(IntPtr handleWindow, out int lpdwProcessID); + + [DllImport("user32.dll", CharSet = CharSet.Auto, ExactSpelling = true)] + private static extern IntPtr GetKeyboardLayout(int WindowsThreadProcessID); + + private static Dictionary _lastStatus = new Dictionary(); + + protected bool InputRunning; + protected bool ForceStop = false; + protected StarCitizenBase(SDConnection connection, InitialPayload payload) : base(connection, payload) + { + //Logger.Instance.LogMessage(TracingLevel.INFO, "aa"); + } + + public override void Dispose() + { + //Logger.Instance.LogMessage(TracingLevel.INFO, "bb"); + } + + public override void KeyReleased(KeyPayload payload) { } + + + public override void OnTick() + { + //Logger.Instance.LogMessage(TracingLevel.INFO, "dd"); + + //var deviceInfo = Connection.DeviceInfo(); + + } + + public override void ReceivedGlobalSettings(ReceivedGlobalSettingsPayload payload) { } + + private void SendInputDown(string inputText) + { + var text = inputText; + + for (var idx = 0; idx < text.Length && !ForceStop; idx++) + { + var macro = CommandTools.ExtractMacro(text, idx); + idx += macro.Length - 1; + macro = macro.Substring(1, macro.Length - 2); + + HandleMacroDown(macro); + } + } + + private void SendInputUp(string inputText) + { + var text = inputText; + + for (var idx = 0; idx < text.Length && !ForceStop; idx++) + { + var macro = CommandTools.ExtractMacro(text, idx); + idx += macro.Length - 1; + macro = macro.Substring(1, macro.Length - 2); + + HandleMacroUp(macro); + } + } + + private void HandleMacroDown(string macro) + { + var keyStrokes = CommandTools.ExtractKeyStrokes(macro); + + // Actually initiate the keystrokes + if (keyStrokes.Count > 0) + { + var iis = new InputSimulator(); + var keyCode = keyStrokes.Last(); + keyStrokes.Remove(keyCode); + + if (keyStrokes.Count > 0) + { + iis.Keyboard.DelayedModifiedKeyStrokeDown(keyStrokes.Select(ks => ks), keyCode, 40); + + } + else // Single Keycode + { + iis.Keyboard.DelayedKeyPressDown(keyCode, 40); + } + } + } + + + private void HandleMacroUp(string macro) + { + var keyStrokes = CommandTools.ExtractKeyStrokes(macro); + + // Actually initiate the keystrokes + if (keyStrokes.Count > 0) + { + var iis = new InputSimulator(); + var keyCode = keyStrokes.Last(); + keyStrokes.Remove(keyCode); + + if (keyStrokes.Count > 0) + { + iis.Keyboard.DelayedModifiedKeyStrokeUp(keyStrokes.Select(ks => ks), keyCode, 40); + + } + else // Single Keycode + { + iis.Keyboard.DelayedKeyPressUp(keyCode, 40); + } + } + } + + protected void SendKeypressDown(string keyInfo) + { + if (!string.IsNullOrEmpty(keyInfo)) + { + SendInputDown("{" + keyInfo + "}"); + } + } + + + protected void SendKeypressUp(string keyInfo) + { + if (!string.IsNullOrEmpty(keyInfo)) + { + SendInputUp("{" + keyInfo + "}"); + } + } + + + + } +} diff --git a/starcitizen/Buttons/Static.cs b/starcitizen/Buttons/Static.cs new file mode 100644 index 0000000..ef6a241 --- /dev/null +++ b/starcitizen/Buttons/Static.cs @@ -0,0 +1,157 @@ +using System; +using System.IO; +using System.Threading.Tasks; +using System.Windows.Input; +using WindowsInput.Native; +using BarRaider.SdTools; +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; + +// ReSharper disable StringLiteralTypo + +namespace starcitizen.Buttons +{ + + [PluginActionId("com.mhwlng.starcitizen.static")] + public class Static : StarCitizenBase + { + protected class PluginSettings + { + public static PluginSettings CreateDefaultSettings() + { + var instance = new PluginSettings + { + Function = string.Empty, + }; + + return instance; + } + + [JsonProperty(PropertyName = "function")] + public string Function { get; set; } + + [FilenameProperty] + [JsonProperty(PropertyName = "clickSound")] + public string ClickSoundFilename { get; set; } + + } + + + PluginSettings settings; + private CachedSound _clickSound = null; + + + public Static(SDConnection connection, InitialPayload payload) : base(connection, payload) + { + if (payload.Settings == null || payload.Settings.Count == 0) + { + //Logger.Instance.LogMessage(TracingLevel.DEBUG, "Repeating Static Constructor #1"); + + settings = PluginSettings.CreateDefaultSettings(); + Connection.SetSettingsAsync(JObject.FromObject(settings)).Wait(); + + } + else + { + //Logger.Instance.LogMessage(TracingLevel.DEBUG, "Repeating Static Constructor #2"); + + settings = payload.Settings.ToObject(); + HandleFileNames(); + } + + } + + + public override void KeyPressed(KeyPayload payload) + { + if (InputRunning || Program.dpReader == null) + { + ForceStop = true; + return; + } + + ForceStop = false; + + var action = Program.dpReader.GetBinding(settings.Function); + if (action != null) + { + Logger.Instance.LogMessage(TracingLevel.INFO, CommandTools.ConvertKeyString(action.Keyboard)); + + SendKeypressDown(CommandTools.ConvertKeyString(action.Keyboard)); + } + + if (_clickSound != null) + { + try + { + AudioPlaybackEngine.Instance.PlaySound(_clickSound); + } + catch (Exception ex) + { + Logger.Instance.LogMessage(TracingLevel.FATAL, $"PlaySound: {ex}"); + } + + } + + } + + public override void KeyReleased(KeyPayload payload) + { + + if (InputRunning || Program.dpReader == null) + { + ForceStop = true; + return; + } + + ForceStop = false; + + var action = Program.dpReader.GetBinding(settings.Function); + if (action != null) + { + Logger.Instance.LogMessage(TracingLevel.INFO, CommandTools.ConvertKeyString(action.Keyboard)); + + SendKeypressUp(CommandTools.ConvertKeyString(action.Keyboard)); + } + + } + + public override void Dispose() + { + base.Dispose(); + + //Logger.Instance.LogMessage(TracingLevel.DEBUG, "Destructor called #1"); + } + + + public override void ReceivedSettings(ReceivedSettingsPayload payload) + { + //Logger.Instance.LogMessage(TracingLevel.DEBUG, "ReceivedSettings"); + + // New in StreamDeck-Tools v2.0: + BarRaider.SdTools.Tools.AutoPopulateSettings(settings, payload.Settings); + HandleFileNames(); + } + + private void HandleFileNames() + { + _clickSound = null; + if (File.Exists(settings.ClickSoundFilename)) + { + try + { + _clickSound = new CachedSound(settings.ClickSoundFilename); + } + catch (Exception ex) + { + Logger.Instance.LogMessage(TracingLevel.FATAL, $"CachedSound: {settings.ClickSoundFilename} {ex}"); + + _clickSound = null; + settings.ClickSoundFilename = null; + } + } + + Connection.SetSettingsAsync(JObject.FromObject(settings)).Wait(); + } + } +} diff --git a/starcitizen/CommandTools.cs b/starcitizen/CommandTools.cs new file mode 100644 index 0000000..5c868c0 --- /dev/null +++ b/starcitizen/CommandTools.cs @@ -0,0 +1,189 @@ +using BarRaider.SdTools; +using System; +using System.Collections.Generic; +using System.Text.RegularExpressions; +using WindowsInput.Native; + +namespace starcitizen +{ + internal static class CommandTools + { + internal const char MACRO_START_CHAR = '{'; + internal const string MACRO_END = "}}"; + internal const string REGEX_MACRO = @"^\{(\{[^\{\}]+\})+\}$"; + internal const string REGEX_SUB_COMMAND = @"(\{[^\{\}]+\})"; + + public static string ConvertKeyString(string keyboard) + { + var keys = keyboard.Split('+'); + keyboard = ""; + foreach (var key in keys) + { + keyboard += "{" + FromSCKeyboardCmd(key) + "}"; + } + + return keyboard; + } + + private static DirectInputKeyCode FromSCKeyboardCmd(string scKey) + { + switch (scKey) + { + // handle modifiers first + case "lalt": return DirectInputKeyCode.DikLmenu; + case "ralt": return DirectInputKeyCode.DikRmenu; + case "lshift": return DirectInputKeyCode.DikLeftShift; + case "rshift": return DirectInputKeyCode.DikRightShift; + case "lctrl": return DirectInputKeyCode.DikLeftControl; + case "rctrl": return DirectInputKeyCode.DikRightControl; + + // function keys first + case "f1": return DirectInputKeyCode.DikF1; + case "f2": return DirectInputKeyCode.DikF2; + case "f3": return DirectInputKeyCode.DikF3; + case "f4": return DirectInputKeyCode.DikF4; + case "f5": return DirectInputKeyCode.DikF5; + case "f6": return DirectInputKeyCode.DikF6; + case "f7": return DirectInputKeyCode.DikF7; + case "f8": return DirectInputKeyCode.DikF8; + case "f9": return DirectInputKeyCode.DikF9; + case "f10": return DirectInputKeyCode.DikF10; + case "f11": return DirectInputKeyCode.DikF11; + case "f12": return DirectInputKeyCode.DikF12; + case "f13": return DirectInputKeyCode.DikF13; + case "f14": return DirectInputKeyCode.DikF14; + case "f15": return DirectInputKeyCode.DikF15; + + // all keys where the DX name does not match the SC name + // Numpad + case "numlock": return DirectInputKeyCode.DikNumlock; + + case "np_divide": return DirectInputKeyCode.DikDivide; + case "np_multiply": return DirectInputKeyCode.DikMultiply; + case "np_subtract": return DirectInputKeyCode.DikSubtract; + case "np_add": return DirectInputKeyCode.DikAdd; + case "np_period": return DirectInputKeyCode.DikDecimal; + case "np_enter": return DirectInputKeyCode.DikNumpadenter; + case "np_0": return DirectInputKeyCode.DikNumpad0; + case "np_1": return DirectInputKeyCode.DikNumpad1; + case "np_2": return DirectInputKeyCode.DikNumpad2; + case "np_3": return DirectInputKeyCode.DikNumpad3; + case "np_4": return DirectInputKeyCode.DikNumpad4; + case "np_5": return DirectInputKeyCode.DikNumpad5; + case "np_6": return DirectInputKeyCode.DikNumpad6; + case "np_7": return DirectInputKeyCode.DikNumpad7; + case "np_8": return DirectInputKeyCode.DikNumpad8; + case "np_9": return DirectInputKeyCode.DikNumpad9; + // Digits + case "0": return DirectInputKeyCode.Dik0; + case "1": return DirectInputKeyCode.Dik1; + case "2": return DirectInputKeyCode.Dik2; + case "3": return DirectInputKeyCode.Dik3; + case "4": return DirectInputKeyCode.Dik4; + case "5": return DirectInputKeyCode.Dik5; + case "6": return DirectInputKeyCode.Dik6; + case "7": return DirectInputKeyCode.Dik7; + case "8": return DirectInputKeyCode.Dik8; + case "9": return DirectInputKeyCode.Dik9; + // navigation + case "insert": return DirectInputKeyCode.DikInsert; + case "home": return DirectInputKeyCode.DikHome; + case "delete": return DirectInputKeyCode.DikDelete; + case "end": return DirectInputKeyCode.DikEnd; + case "pgup": return DirectInputKeyCode.DikPageUp; + case "pgdown": return DirectInputKeyCode.DikPageDown; + case "print": return DirectInputKeyCode.DikPrintscreen; + case "scrolllock": return DirectInputKeyCode.DikScroll; + case "pause": return DirectInputKeyCode.DikPause; + // Arrows + case "up": return DirectInputKeyCode.DikUp; + case "down": return DirectInputKeyCode.DikDown; + case "left": return DirectInputKeyCode.DikLeft; + case "right": return DirectInputKeyCode.DikRight; + // non letters + case "escape": return DirectInputKeyCode.DikEscape; + case "minus": return DirectInputKeyCode.DikMinus; + case "equals": return DirectInputKeyCode.DikEquals; + case "grave": return DirectInputKeyCode.DikGrave; + case "underline": return DirectInputKeyCode.DikUnderline; + case "backspace": return DirectInputKeyCode.DikBackspace; + case "tab": return DirectInputKeyCode.DikTab; + case "lbracket": return DirectInputKeyCode.DikLbracket; + case "rbracket": return DirectInputKeyCode.DikRbracket; + case "enter": return DirectInputKeyCode.DikReturn; + case "capslock": return DirectInputKeyCode.DikCapital; + case "colon": return DirectInputKeyCode.DikColon; + case "backslash": return DirectInputKeyCode.DikBackslash; + case "comma": return DirectInputKeyCode.DikComma; + case "period": return DirectInputKeyCode.DikPeriod; + case "slash": return DirectInputKeyCode.DikSlash; + case "space": return DirectInputKeyCode.DikSpace; + case "semicolon": return DirectInputKeyCode.DikSemicolon; + case "apostrophe": return DirectInputKeyCode.DikApostrophe; + + // all where the lowercase DX name matches the SC name + default: + var letter = "Dik" + scKey.ToUpperInvariant(); + if (Enum.TryParse(letter, out DirectInputKeyCode dxKey)) + { + return dxKey; + } + else + { + return DirectInputKeyCode.DikEscape; + } + } + + } + + + internal static string ExtractMacro(string text, int position) + { + try + { + var endPosition = text.IndexOf(MACRO_END, position); + + // Found an end, let's verify it's actually a macro + if (endPosition > position) + { + // Use Regex to verify it's really a macro + var match = Regex.Match(text.Substring(position, endPosition - position + MACRO_END.Length), REGEX_MACRO); + if (match.Length > 0) + { + return match.Value; + } + } + } + catch (Exception ex) + { + Logger.Instance.LogMessage(TracingLevel.FATAL, $"ExtractMacro Exception: {ex}"); + } + + return null; + } + + internal static List ExtractKeyStrokes(string macroText) + { + var keyStrokes = new List(); + + try + { + var matches = Regex.Matches(macroText, REGEX_SUB_COMMAND); + foreach (var match in matches) + { + var matchText = match.ToString().ToUpperInvariant().Replace("{", "").Replace("}", ""); + + var stroke = (DirectInputKeyCode)Enum.Parse(typeof(DirectInputKeyCode), matchText, true); + + keyStrokes.Add(stroke); + } + } + catch (Exception ex) + { + Logger.Instance.LogMessage(TracingLevel.FATAL, $"ExtractKeyStrokes Exception: {ex}"); + } + + return keyStrokes; + } + } +} diff --git a/starcitizen/CryXMLlib/Conversions.cs b/starcitizen/CryXMLlib/Conversions.cs new file mode 100644 index 0000000..f9df2ca --- /dev/null +++ b/starcitizen/CryXMLlib/Conversions.cs @@ -0,0 +1,103 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Runtime.InteropServices; + +namespace SCJMapper_V2.CryXMLlib +{ + internal static class Extensions + { + /// + /// Get the array slice between the two indexes. + /// ... Inclusive for start index, exclusive end + /// + public static T[] SliceE( this T[] source, UInt32 start, UInt32 end ) + { + // Handles negative ends. + if ( end < 0 ) { + end = ( UInt32 )source.Length + end; + } + UInt32 len = end - start; + + // Return new array. + T[] res = new T[len]; + /* + for ( int i = 0; i < len; i++ ) { + resOLD[i] = source[i + start]; + } + */ + Array.ConstrainedCopy( source, ( int )start, res, 0, ( int )len ); + return res; + } + + /// + /// Get the array slice between the two indexes. + /// ... Inclusive for start index, length. + /// + public static T[] SliceL( this T[] source, UInt32 offset, UInt32 length ) + { + UInt32 end = offset + length; + // Handles negative ends. + if ( end < 0 ) { + end = ( UInt32 )source.Length + end; + } + UInt32 len = end - offset; + + // Return new array. + T[] res = new T[len]; + /* + for ( int i = 0; i < len; i++ ) { + res[i] = source[i + offset]; + } + */ + Array.ConstrainedCopy( source, ( int )offset, res, 0, ( int )len ); + return res; + } + } + + + + internal class Conversions + { + + /// + /// Converts a number of ASCII chars into a string + /// + /// Mem Location of the ASCII Chars + /// Max number of ASCII chars to convert, stops at \0 however + /// The converted string + static public string ToString( byte[] byteArr, uint size = 999 ) + { + string s = ""; + for ( uint i = 0; i < size; i++ ) { + if ( byteArr[i] != 0 ) + s += Char.ConvertFromUtf32( byteArr[i] ); + else + break; // stop at char 0 + } + return s; + } + + /// + /// Allocates and reads bytes of the size of one record + /// and returns the allocated bytes are structure - allowing structured access to binary data + /// Note: there is no error checking whatsoever here - so better make sure everything is OK + /// + /// The record type to read + /// A binary reader + /// The read record + public static T ByteToType( byte[] bytes, UInt32 offset = 0 ) + { + byte[] _bytes = bytes.SliceL( offset, ( UInt32 )Marshal.SizeOf( typeof( T ) ) ); // lets see if this works with Alloc below.. + + GCHandle handle = GCHandle.Alloc( _bytes, GCHandleType.Pinned ); + T theStructure = ( T )Marshal.PtrToStructure( handle.AddrOfPinnedObject( ), typeof( T ) ); + handle.Free( ); + + return theStructure; + } + + + } +} diff --git a/starcitizen/CryXMLlib/CryIXml.cs b/starcitizen/CryXMLlib/CryIXml.cs new file mode 100644 index 0000000..e5fc92c --- /dev/null +++ b/starcitizen/CryXMLlib/CryIXml.cs @@ -0,0 +1,171 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace SCJMapper_V2.CryXMLlib +{ + /// + /// Derived work from CryEngine: IXml.h: + /// + /// Crytek Engine Source File. + /// Copyright (C), Crytek Studios, 2002. + /// ------------------------------------------------------------------------- + /// File name: ixml.h + /// Version: v1.00 + /// Created: 16/7/2002 by Timur. + /// Compilers: Visual Studio.NET + /// Description: + // ------------------------------------------------------------------------- + /// + + + /// + /// kind of typedef (curtesy http://www.codeproject.com/Questions/141385/typedef-in-C) + // Summary: + // Special string wrapper for xml nodes. + /// + public struct XmlString + { + // A struct's fields should not be exposed + private string value; + + // As we are using implicit conversions we can keep the constructor private + private XmlString( string value ) + { + this.value = value; + } + + /// + /// Implicitly converts a XmlString to a . + /// + /// The to convert. + /// A new XmlString with the specified value. + public static implicit operator XmlString( string value ) + { + return new XmlString( value ); + } + /// + /// Implicitly converts a XmlString to a . + /// + /// The XmlString to convert. + /// + /// A that is the specified XmlString's value. + /// + public static implicit operator string( XmlString record ) + { + return record.value; + } + + public static XmlString c_str( byte[] sz, uint len = 999 ) + { + return Conversions.ToString( sz, len ); + } + } + + + /// + /// Abstract IXmlNode class + /// Notes: + /// Never use IXmlNode directly instead use reference counted XmlNodeRef. + /// See also: + /// XmlNodeRef + /// + public abstract class IXmlNode + { + + /// + /// Gets XML node tag. + /// + /// + public abstract string getTag( ); + + /// + /// Returns true if a given tag equal to node tag. + /// + /// The tag + /// True if it is the tag of the node + public abstract bool isTag( string tag ); + + /// + /// Checks if attributes with specified key exist. + /// + /// The attribute key + /// True if this attribute exists + public abstract bool haveAttr( string key ); + + // + /// + /// Gets XML Node attributes count + /// + /// The number of attributes of this node + public abstract int getNumAttributes( ); + + /// + /// Returns attribute key and value by attribute index. + /// + /// The attribute index 0.. + /// Out: the attribute key + /// Out: the attribute value + /// True if returned key and value are valid + public abstract bool getAttributeByIndex( int index, out string key, out string value ); + + /// + /// Gets XML Node attribute for specified key. + /// + /// The attribute key + /// The attribute value or an empty string if it does not exist + public abstract string getAttr( string key ); + + /// + /// Gets XML Node attribute for specified key. + /// + /// The attribute key + /// Out: the attribute value + /// True if the attribute with key exists and the returned value is valid + public abstract bool getAttr( string key, out string value ); + + /// + /// Gets attribute value of node. + /// + /// The attribute key + /// Out: the attribute value as XmlString + /// True if the attribute with key exists and the returned value is valid + public abstract bool getAttr( string key, out XmlString value ); + + /// + /// Gets number of child XML nodes. + /// + /// The number of child nodes of this node + public abstract int getChildCount( ); + + /// + /// Gets XML Node child nodes. + /// + /// The child index of the node to return + /// A valid nodeRef or null if the element does not exist + public abstract CryXmlNodeRef getChild( int i ); + + /// + /// Finds node with specified tag. + /// + /// The node tag of the child node to return + /// A valid nodeRef or null if the element does not exist + public abstract CryXmlNodeRef findChild( string tag ); + + /// + /// Gets parent XML node. + /// + /// A valid nodeRef or null if the element does not exist + public abstract CryXmlNodeRef getParent( ); + + /// + /// Returns content of this node. + /// + /// The node content as string + public abstract string getContent( ); + + } + + +} diff --git a/starcitizen/CryXMLlib/CryXmlBinContext.cs b/starcitizen/CryXMLlib/CryXmlBinContext.cs new file mode 100644 index 0000000..d9d7704 --- /dev/null +++ b/starcitizen/CryXMLlib/CryXmlBinContext.cs @@ -0,0 +1,47 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace SCJMapper_V2.CryXMLlib +{ + /// + /// Derived work from CryEngine: XMLBinaryHeaders.h: + /// CryEngine Source File. + /// Copyright (C), Crytek Studios, 2001-2006. + /// ------------------------------------------------------------------------- + /// File name: xml.h + /// Created: 21/04/2006 by Timur. + /// Description: + /// ------------------------------------------------------------------------- + /// + /// + + + /// + /// Memory context of the binary XML file + /// + internal class CryXmlBinContext // CBinaryXmlData + { + + public CryXMLNode[] pNodes = null; // gets a copy of all Node entries + public CryXMLAttribute[] pAttributes= null; // gets a copy of all Attribute entries + public CryXMLNodeIndex[] pChildIndices= null; // gets a copy of all Note relations + public byte[] pStringData = null; // gets a copy of the string data + public UInt32 pStringDataLength = 0; // length of the string data + + /// + /// Returns an XMLString from the stringData area + /// + /// The start offset of the string to return + /// The string + public XmlString _string( UInt32 sOffset ) + { + return Conversions.ToString( pStringData.SliceE( sOffset, pStringDataLength ) ); + } + + public List pBinaryNodes= null; // list of binary nodes - one to one with the real nodes + } + + +} diff --git a/starcitizen/CryXMLlib/CryXmlBinHeader.cs b/starcitizen/CryXMLlib/CryXmlBinHeader.cs new file mode 100644 index 0000000..35f74ce --- /dev/null +++ b/starcitizen/CryXMLlib/CryXmlBinHeader.cs @@ -0,0 +1,154 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Runtime.InteropServices; + +namespace SCJMapper_V2.CryXMLlib +{ + /// + /// Derived (file structure) work from CryEngine: XMLBinaryHeaders.h: + /// --------------------------------------------------------------------------- + /// Copyright 2006 Crytek GmbH + /// Created by: Michael Smith + ///--------------------------------------------------------------------------- + /// + + + /// + /// kind of typedef (curtesy http://www.codeproject.com/Questions/141385/typedef-in-C) + /// A wrapper around . + /// + internal struct CryXMLNodeIndex + { + static public UInt32 MySize( ) { return ( UInt32 )Marshal.SizeOf( typeof( CryXMLNodeIndex ) ); } + + private UInt32 value; + + // As we are using implicit conversions we can keep the constructor private + private CryXMLNodeIndex( UInt32 value ) + { + this.value = value; + } + private CryXMLNodeIndex( int value ) + { + this.value = ( CryXMLNodeIndex )value; + } + + /// + /// Implicitly converts a to a Record. + /// + /// The to convert. + /// A new Record with the specified value. + public static implicit operator CryXMLNodeIndex( UInt32 value ) + { + return new CryXMLNodeIndex( value ); + } + public static implicit operator CryXMLNodeIndex( int value ) + { + return new CryXMLNodeIndex( value ); + } + /// + /// Implicitly converts a Record to a . + /// + /// The Record to convert. + /// + /// A that is the specified Record's value. + /// + public static implicit operator UInt32( CryXMLNodeIndex record ) + { + return record.value; + } + public static implicit operator int( CryXMLNodeIndex record ) + { + return ( int )record.value; + } + } + + + /// + /// Maps the Node from binary file to memory + /// + [StructLayout( LayoutKind.Sequential, Pack = 1 )] //, Size = 5 * 4 + 2 * 2 = 24 (28 according to dump) + internal struct CryXMLNode + { + static public UInt32 MySize( ) { return ( UInt32 )Marshal.SizeOf( typeof( CryXMLNode ) ); } + + public CryXMLNodeIndex nParentIndex { get { return _nParentIndex; } } // type conversion only + public CryXMLNodeIndex nFirstAttributeIndex { get { return _nFirstAttributeIndex; } } // type conversion only + public CryXMLNodeIndex nFirstChildIndex { get { return _nFirstChildIndex; } } // type conversion only + + [MarshalAs( UnmanagedType.U4 )] + public UInt32 nTagStringOffset; // offset in CBinaryXmlData::pStringData + [MarshalAs( UnmanagedType.U4 )] + public UInt32 nContentStringOffset; // offset in CBinaryXmlData::pStringData + [MarshalAs( UnmanagedType.U2 )] + public UInt16 nAttributeCount; + [MarshalAs( UnmanagedType.U2 )] + public UInt16 nChildCount; + [MarshalAs( UnmanagedType.U4 )] + private UInt32 _nParentIndex; + [MarshalAs( UnmanagedType.U4 )] + private UInt32 _nFirstAttributeIndex; + [MarshalAs( UnmanagedType.U4 )] + private UInt32 _nFirstChildIndex; + + [MarshalAs( UnmanagedType.U4 )] + private UInt32 _PAD; // according to hex analysis we have a 4 byte pad at the end of each node + } + + + /// + /// Maps the Attribute from binary file to memory + /// + [StructLayout( LayoutKind.Sequential, Pack = 1 )] //, Size = 2 * 4 = 8 (OK) + internal struct CryXMLAttribute + { + static public UInt32 MySize( ) { return ( UInt32 )Marshal.SizeOf( typeof( CryXMLAttribute ) ); } + + [MarshalAs( UnmanagedType.U4 )] + public UInt32 nKeyStringOffset; // offset in CBinaryXmlData::pStringData + [MarshalAs( UnmanagedType.U4 )] + public UInt32 nValueStringOffset; // offset in CBinaryXmlData::pStringData + } + + + /// + /// Maps the Header from binary file to memory + /// + [StructLayout( LayoutKind.Sequential, Pack = 1 )] //, Size = 9 * 4 + 8 = 44 + internal struct CryXMLHeader + { + static public UInt32 MySize( ) { return ( UInt32 )Marshal.SizeOf( typeof( CryXMLHeader ) ); } + + public bool HasCorrectSignature { get { return ( szSignature == "CryXmlB" ); } } + + public string szSignature { get { return Conversions.ToString( _szSignature, 8 ); } } // from ASCIIZ + + [MarshalAs( UnmanagedType.ByValArray, SizeConst = 8 )] + private byte[] _szSignature; + [MarshalAs( UnmanagedType.U4 )] + public UInt32 nXMLSize; + [MarshalAs( UnmanagedType.U4 )] + public UInt32 nNodeTablePosition; + [MarshalAs( UnmanagedType.U4 )] + public UInt32 nNodeCount; + [MarshalAs( UnmanagedType.U4 )] + public UInt32 nAttributeTablePosition; + [MarshalAs( UnmanagedType.U4 )] + public UInt32 nAttributeCount; + [MarshalAs( UnmanagedType.U4 )] + public UInt32 nChildTablePosition; + [MarshalAs( UnmanagedType.U4 )] + public UInt32 nChildCount; + [MarshalAs( UnmanagedType.U4 )] + public UInt32 nStringDataPosition; + [MarshalAs( UnmanagedType.U4 )] + public UInt32 nStringDataSize; + + } + + + + +} diff --git a/starcitizen/CryXMLlib/CryXmlBinNode.cs b/starcitizen/CryXMLlib/CryXmlBinNode.cs new file mode 100644 index 0000000..09b0d6a --- /dev/null +++ b/starcitizen/CryXMLlib/CryXmlBinNode.cs @@ -0,0 +1,180 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace SCJMapper_V2.CryXMLlib +{ + /// + /// Derived work from CryEngine: XMLBinaryHeaders.h: + /// CryEngine Source File. + /// Copyright (C), Crytek Studios, 2001-2006. + /// ------------------------------------------------------------------------- + /// File name: xml.h + /// Created: 21/04/2006 by Timur. + /// Description: + /// ------------------------------------------------------------------------- + /// + /// + + /// + /// Implemented IXmlNode + /// + internal class CryXmlBinNode : IXmlNode // CBinaryXmlNode + { + + internal CryXmlBinContext m_pData = null; // ref to the binary data area + internal UInt32 m_pNodeIndex = 0; // Index of ourself + + // Return current node in binary data. + private CryXMLNode _node( ) + { + return m_pData.pNodes[m_pNodeIndex]; + } + + private XmlString _string( UInt32 nIndex ) + { + return m_pData._string( nIndex ); + } + + private string GetValue( string key ) + { + CryXMLNodeIndex nFirst = _node( ).nFirstAttributeIndex; + CryXMLNodeIndex nLast = nFirst + _node( ).nAttributeCount; + for ( CryXMLNodeIndex i = nFirst; i < nLast; i++ ) { + XmlString attrKey = _string( m_pData.pAttributes[i].nKeyStringOffset ); + if ( key == attrKey ) { + string attrValue = _string( m_pData.pAttributes[i].nValueStringOffset ); + return attrValue; + } + } + return ""; + } + + + // Get XML node tag. + public override string getTag( ) + { + return _string( _node( ).nTagStringOffset ); + } + + // Return true if given tag is equal to node tag. + public override bool isTag( string tag ) + { + return ( tag == getTag( ) ); + } + + + // Check if attributes with specified key exist. + public override bool haveAttr( string key ) + { + return ( !string.IsNullOrEmpty( GetValue( key ) ) ); + } + + // Get XML Node attributes. + public override int getNumAttributes( ) { return ( int )_node( ).nAttributeCount; } + + // Return attribute key and value by attribute index. + public override bool getAttributeByIndex( int index, out string key, out string value ) + { + key = ""; value = ""; + + CryXMLNode pNode = _node( ); + if ( index >= 0 && index < pNode.nAttributeCount ) { + CryXMLAttribute attr = m_pData.pAttributes[pNode.nFirstAttributeIndex + index]; + key = _string( attr.nKeyStringOffset ); + value = _string( attr.nValueStringOffset ); + return true; + } + return false; + } + + // Return attribute key and value by attribute index, string version. + public virtual bool getAttributeByIndex( int index, out XmlString key, out XmlString value ) + { + string _key, _value; + bool retVal = getAttributeByIndex( index, out _key, out _value ); + key = ( XmlString )_key; value = ( XmlString )_value; + return retVal; + } + + // Get XML Node attribute for specified key. + public override string getAttr( string key ) + { + return GetValue( key ); + } + + // Get XML Node attribute for specified key. + // Returns true if the attribute exists, false otherwise. + public override bool getAttr( string key, out string value ) + { + string svalue = GetValue( key ); + if ( !string.IsNullOrEmpty( svalue ) ) { + value = svalue; + return true; + } + else { + value = ""; + return false; + } + } + + // Get attribute value of node. + public override bool getAttr( string key, out XmlString value ) + { + string v = ""; + bool boHasAttribute = getAttr( key, out v ); + value = v; + return boHasAttribute; + } + + // Get number of child XML nodes. + public override int getChildCount( ) { return ( int )_node( ).nChildCount; } + + // Get XML Node child nodes. + public override CryXmlNodeRef getChild( int i ) + { + CryXMLNode pNode = _node( ); + if ( i < 0 || i > ( int )pNode.nChildCount ) { + return null; + } + CryXmlNodeRef n = m_pData.pBinaryNodes[m_pData.pChildIndices[pNode.nFirstChildIndex + i]]; + return n; + } + + // Find node with specified tag. + public override CryXmlNodeRef findChild( string tag ) + { + CryXMLNode pNode = _node( ); + CryXMLNodeIndex nFirst = pNode.nFirstChildIndex; + CryXMLNodeIndex nAfterLast = pNode.nFirstChildIndex + pNode.nChildCount; + for ( CryXMLNodeIndex i = nFirst; i < nAfterLast; i++ ) { + string sChildTag = _string( m_pData.pNodes[m_pData.pChildIndices[i]].nTagStringOffset ); + if ( tag == sChildTag ) { + CryXmlNodeRef n = m_pData.pBinaryNodes[m_pData.pChildIndices[i]]; + return n; + } + } + return null; + } + + + // Get parent XML node. + public override CryXmlNodeRef getParent( ) + { + CryXMLNode pNode = _node( ); + if ( pNode.nParentIndex != ( CryXMLNodeIndex )( -1 ) ) { // murks.. + CryXmlNodeRef n = m_pData.pBinaryNodes[pNode.nParentIndex]; + return n; + } + // has no parent i.e. toplevel + return this; + } + + // Returns content of this node. + public override string getContent( ) { return _string( _node( ).nContentStringOffset ); } + + + } + +} diff --git a/starcitizen/CryXMLlib/CryXmlBinReader.cs b/starcitizen/CryXMLlib/CryXmlBinReader.cs new file mode 100644 index 0000000..657d5e0 --- /dev/null +++ b/starcitizen/CryXMLlib/CryXmlBinReader.cs @@ -0,0 +1,227 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.IO; +using System.Runtime.InteropServices; + +namespace SCJMapper_V2.CryXMLlib +{ + /// + /// Inspired... by work from CryEngine: XMLBinaryReader.h/.cpp: + /// --------------------------------------------------------------------------- + /// Copyright 2006 Crytek GmbH + /// Created by: Michael Smith + /// --------------------------------------------------------------------------- + /// + /// BUT uses a complete different memory management and processing eliminating extensive Ptr juggling from C++ + /// + public class CryXmlBinReader + { + /// + /// The processing result Enum + /// + public enum EResult + { + Success, + NotBinXml, + Error, + } + + private string m_errorDescription = ""; + private void SetErrorDescription( string text ) + { + m_errorDescription = text; + } + + /// + /// Get error information if something goes wrong + /// + /// The error description + public string GetErrorDescription( ) { return m_errorDescription; } + + /// + /// Load a Cry Binary XML file into memory and return the NodeRef for the root element + /// + /// The file to read + /// Read result + /// The NodeRef of the root element or NULL + public CryXmlNodeRef LoadFromFile( string filename, out EResult result ) + { + m_errorDescription = ""; + result = EResult.Error; + + if ( !File.Exists( filename ) ) { + SetErrorDescription( "Can't open file (file not found)." ); + return null; + } + + using ( BinaryReader binReader = new BinaryReader( File.Open( filename, FileMode.Open ) ) ) { + try { + UInt32 fileSize = ( UInt32 )binReader.BaseStream.Length; + + if ( fileSize < CryXMLHeader.MySize( ) ) { + result = EResult.NotBinXml; + SetErrorDescription( "File is not a binary XML file (file size is too small)." ); + return null; + } + + // read from binary file and map the content into the memory + CryXmlBinContext pData = Create( binReader, fileSize, out result ); + + if ( result != EResult.Success ) return null; // Well... + + // Return first node + CryXmlNodeRef n = pData.pBinaryNodes[0]; + return n; + + } catch { + result = EResult.NotBinXml; + SetErrorDescription( "Exception in BinaryReader." ); + return null; + } + } + } + + + /// + /// Load a Cry Binary XML buffer into memory and return the NodeRef for the root element + /// + /// The byte buffer to read + /// Read result + /// The NodeRef of the root element or NULL + public CryXmlNodeRef LoadFromBuffer( byte[] binBuffer, out EResult result ) + { + m_errorDescription = ""; + result = EResult.Error; + + UInt32 fileSize = ( UInt32 )binBuffer.Length; + + try { + if ( fileSize < CryXMLHeader.MySize( ) ) { + result = EResult.NotBinXml; + SetErrorDescription( "File is not a binary XML file (file size is too small)." ); + return null; + } + + // read from binary file and map the content into the memory + CryXmlBinContext pData = Create( binBuffer, out result ); + + if ( result != EResult.Success ) return null; // Well... + + // Return first node + CryXmlNodeRef n = pData.pBinaryNodes[0]; + return n; + + } catch { + result = EResult.NotBinXml; + SetErrorDescription( "Exception in buffer reader" ); + return null; + } + } + + + /// + /// Reads the binary file into the internal structures + /// Note: use GetErrorDescription() if the result is not Success + /// + /// An open binary reader + /// The length to read + /// Out: the result of the collection of file content + /// A valid memory context or null + private CryXmlBinContext Create( BinaryReader bReader, UInt32 size, out EResult result ) + { + result = EResult.Error; + + // read data from file into a local buffer + byte[] fileContents = bReader.ReadBytes( ( int )size ); // get all from the reader + + return Create( fileContents, out result ); + } + + + /// + /// Reads the binary buffer into the internal structures + /// Note: use GetErrorDescription() if the result is not Success + /// + /// An filled byte buffer + /// Out: the result of the collection of file content + /// A valid memory context or null + private CryXmlBinContext Create( byte[] fileContents, out EResult result ) + { + result = EResult.Error; + + CryXmlBinContext pData = new CryXmlBinContext( ); + if ( pData == null ) { + SetErrorDescription( "Can't allocate memory for binary XML object." ); + return null; + } + + CryXMLHeader header = Conversions.ByteToType( fileContents ); // reads the header, mapping from binary to struct + if ( !header.HasCorrectSignature ) { + SetErrorDescription( "File is not a binary XML object (wrong header signature)." ); + return null; + } + + // Create binary nodes to wrap the ones to read later + pData.pBinaryNodes = new List( ); // dynamic list used, not an array + for ( int i = 0; i < header.nNodeCount; i++ ) { pData.pBinaryNodes.Add( new CryXmlBinNode( ) ); } + + // map file content to binary.. here we really allocate arrays of elements and copy rather than the original which worked well with ptrs in c++ + + try { + pData.pAttributes = ( CryXMLAttribute[] )Array.CreateInstance( typeof( CryXMLAttribute ), header.nAttributeCount ); // alloc enough + UInt32 incr = CryXMLAttribute.MySize( ); // size of one element to read + for ( UInt32 aIdx = 0; aIdx < header.nAttributeCount; aIdx++ ) { + pData.pAttributes[aIdx] = Conversions.ByteToType( fileContents, header.nAttributeTablePosition + aIdx * incr ); + } + } catch ( Exception e ) { + SetErrorDescription( string.Format( "EXC Attributes: {0}", e.Message ) ); + return null; + } + + try { + pData.pChildIndices = ( CryXMLNodeIndex[] )Array.CreateInstance( typeof( CryXMLNodeIndex ), header.nChildCount ); // alloc enough + UInt32 incr = CryXMLNodeIndex.MySize( ); // size of one element to read + for ( UInt32 aIdx = 0; aIdx < header.nChildCount; aIdx++ ) { + pData.pChildIndices[aIdx] = Conversions.ByteToType( fileContents, header.nChildTablePosition + aIdx * incr ); + } + } catch ( Exception e ) { + SetErrorDescription( string.Format( "EXC ChildIndices: {0}", e.Message ) ); + return null; + } + + try { + pData.pNodes = ( CryXMLNode[] )Array.CreateInstance( typeof( CryXMLNode ), header.nNodeCount ); // alloc enough + UInt32 incr = CryXMLNode.MySize( ); // size of one element to read + for ( UInt32 aIdx = 0; aIdx < header.nNodeCount; aIdx++ ) { + pData.pNodes[aIdx] = Conversions.ByteToType( fileContents, header.nNodeTablePosition + aIdx * incr ); + } + } catch ( Exception e ) { + SetErrorDescription( string.Format( "EXC Nodes: {0}", e.Message ) ); + return null; + } + + try { + pData.pStringDataLength = header.nStringDataSize; + pData.pStringData = fileContents.SliceL( header.nStringDataPosition, header.nStringDataSize ); + } catch ( Exception e ) { + SetErrorDescription( string.Format( "EXC StringData: {0}", e.Message ) ); + return null; + } + + // init binary nodes + for ( UInt32 nNode = 0; nNode < header.nNodeCount; ++nNode ) { + pData.pBinaryNodes[( int )nNode].m_pData = pData; // add data space + pData.pBinaryNodes[( int )nNode].m_pNodeIndex = nNode; // self ref.. + } + + // and back.. + result = EResult.Success; + return pData; + } + + } + + +} diff --git a/starcitizen/CryXMLlib/CryXmlNodeRef.cs b/starcitizen/CryXMLlib/CryXmlNodeRef.cs new file mode 100644 index 0000000..b682649 --- /dev/null +++ b/starcitizen/CryXMLlib/CryXmlNodeRef.cs @@ -0,0 +1,116 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace SCJMapper_V2.CryXMLlib +{ + /// + /// Derived work from CryEngine: IXml.h: + /// + /// Crytek Engine Source File. + /// Copyright (C), Crytek Studios, 2002. + /// ------------------------------------------------------------------------- + /// File name: ixml.h + /// Version: v1.00 + /// Created: 16/7/2002 by Timur. + /// Compilers: Visual Studio.NET + /// Description: + // ------------------------------------------------------------------------- + /// + + // Summary: + // XmlNodeRef, wrapper class IXmlNode. + // See also: + // IXmlNode + public class CryXmlNodeRef + { + // CLASS + private IXmlNode p = null; + + public CryXmlNodeRef( ) { } + public CryXmlNodeRef( IXmlNode p_ ) + { + p = p_; + } + public CryXmlNodeRef( CryXmlNodeRef p_ ) + { + p = p_.p; + } + + // conversions + + /// + /// Implicitly converts a XmlString to a IXmlNode. + /// + /// The IXmlNode to convert. + /// A new XmlString with the specified value. + public static implicit operator CryXmlNodeRef( IXmlNode value ) + { + return new CryXmlNodeRef( value ); + } + + /// + /// Implicitly converts a IXmlNode to a XmlNodeRef. + /// + /// The XmlNodeRef to convert. + /// A new IXmlNode with the specified value. + public static implicit operator IXmlNode( CryXmlNodeRef value ) + { + return value.p; + } + + // Misc compare functions. + public static bool operator ==( CryXmlNodeRef p1, CryXmlNodeRef p2 ) + { + // If both are null, or both are same instance, return true. + if ( System.Object.ReferenceEquals( p1, p2 ) ) { + return true; + } + + // If one is null, but not both, return false. + if ( ( ( object )p1 == null ) || ( ( object )p2 == null ) ) { + return false; + } + + // Return true if the fields match: + return p1 == p2; + + } + public static bool operator !=( CryXmlNodeRef p1, CryXmlNodeRef p2 ) { return p1 != p2; } + + public override bool Equals( System.Object obj ) + { + // If parameter is null return false. + if ( obj == null ) { + return false; + } + + // If parameter cannot be cast to Point return false. + CryXmlNodeRef objP = obj as CryXmlNodeRef; + if ( ( System.Object )p == null ) { + return false; + } + + // Return true if the fields match: + return ( p == objP.p ); + } + + public bool Equals( CryXmlNodeRef objP ) + { + // If parameter is null return false: + if ( ( object )objP == null ) { + return false; + } + + // Return true if the fields match: + return ( p == objP.p ); + } + + public override int GetHashCode( ) + { + return base.GetHashCode( ) ^ p.GetHashCode( ); + } + } + +} diff --git a/starcitizen/CryXMLlib/XmlTree.cs b/starcitizen/CryXMLlib/XmlTree.cs new file mode 100644 index 0000000..0d7cf7c --- /dev/null +++ b/starcitizen/CryXMLlib/XmlTree.cs @@ -0,0 +1,101 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace SCJMapper_V2.CryXMLlib +{ + /// + /// Processes a CryXmlNodeRef and reports the node and its childs as XML string list + /// + public class XmlTree + { + + private List m_doc = new List( ); // internal list of strings + + /// + /// Return the derived XML text as List of strings + /// + public List XML_list { get { return m_doc; } } + + /// + /// Return the derived XML text as string + /// + public string XML_string + { + get { + string xml = ""; string CR = string.Format("\n"); + foreach ( string s in m_doc ) xml += ( s + CR ); + return xml; + } + } + + + /// + /// Processes all attributed of a node + /// + /// The node to process + /// an string containing all attributes in XML compatible format ( key="value" ) + private string DoAttribute( CryXmlNodeRef nodeRef ) + { + IXmlNode node = nodeRef; + string xml = ""; + + // collect all attributes into one line + for ( int ac=0; ac < node.getNumAttributes( ); ac++ ) { + string key = ""; string value = ""; + node.getAttributeByIndex(ac, out key, out value ); + xml += string.Format( " {0}=\"{1}\" ", key, value); + } + return xml; + } + + /// + /// Processes a node and it's children + /// + /// The node to process + /// The depth of the node to indent the XML text + private void DoNode( CryXmlNodeRef nodeRef, int level ) + { + string tabs = "".PadRight(level, '\t'); // level is depth - will be left padded with Tabs on Add() + string xml = ""; + + IXmlNode node = nodeRef; + + // first gather and handle the attributes + string attr = DoAttribute( nodeRef ); + xml = string.Format( "<{0} {1} ", node.getTag( ), attr ); + + // then do some formatting dependent of child nodes to be printed + if ( node.getChildCount( ) < 1 ) { + // no child - close with end tag immediately + xml += string.Format( "/>" ); m_doc.Add( tabs + xml ); // add line w/o NL + } + else { + // with children - close tag only + xml += string.Format( ">" ); m_doc.Add( tabs + xml ); // add line w/o NL + + // do the children + for ( int cc=0; cc < node.getChildCount( ); cc++ ) { + CryXmlNodeRef childRef = node.getChild( cc ); + DoNode( childRef, level+1 ); // recursion + } + xml = string.Format( "\n", node.getTag( ) ); m_doc.Add( tabs + xml ); // add line with NL to space them + } + } + + + /// + /// Processes a CryXmlNodeRef to derive the XML formatted structure + /// Note: the created XML text can be retrieved through the XML property of this object + /// + /// The node to start from + public void BuildXML( CryXmlNodeRef rootRef ) + { + m_doc.Clear( ); + + DoNode( rootRef, 0 ); + } + + } +} diff --git a/starcitizen/Images/Default.png b/starcitizen/Images/Default.png new file mode 100644 index 0000000000000000000000000000000000000000..27f36e2f3ed6f3aa87d556256084486d8fe624d1 GIT binary patch literal 3770 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 literal 0 HcmV?d00001 diff --git a/starcitizen/Images/categoryIcon@2x.png b/starcitizen/Images/categoryIcon@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..33830ceac769e5a21cbbd39ad008629c81af7ae6 GIT binary patch literal 6833 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�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 literal 0 HcmV?d00001 diff --git a/starcitizen/Images/icon.png b/starcitizen/Images/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..69e7b4a39f7e9d66549a04ecb2ab80f1d96adb3f GIT binary patch literal 1820 zcmaJ?c~BEq7!MRRMuUo4E~l>1LbT@C0Exr|3WOkNFvO^chz-dGR>*G1E+zsUFBCDf z(0U*$6j8iTlmQe$P_zZBKn0~}JrFG(P(_BuaENq+sQsgKXWzd4-u%Abch5_e1_w|n zP81S}L=9Xdk`enf%OYD7U+d1DVZ>&I$pU;yg$*-a5Q0sVkHm*WDoUU5RxyT<$7>g@ z!bl|BtCnR|iyl{zNS_H|c_N27zE; z8xUM!U?AA+_aq}UA_!CJU@Z=#2wMY2>(K$s&O5J5V4J){!rPz^8~ zIUgR?C9Zf>+7VsV=q|BG*JX`3C16>q{I9CN@2KHZqNNB)!1~zF7U|P~TdH2pIk)SSv;8`!SrdVc-OJEp-7 zfQRf>=NDC#DZ)wHznXfnG1hCS|E{Wt{Cj89?rbD;f*F6EE-aK>R&Tl%YOoCo>5c=s z{(3mrozi97TIsRyKxsr~>$>cZ$vuGI)0Kd-Chv3Ht}6Y z`%x^>+Hq6Whvf6k2T!POQyiW{&C}i@&JnSl}9NBdw57|kYI0cl(}kSeDAZytqoC? z4KEM#22;+MyQSg?47*jMT2T^oA{SZQPUcO#^xSmxz9_Eqp|Q4Ako5P|^qHw1{ZK&5 z+qPdg0!YuY?-P2qL->X4rB?|Y8qie$PRX6}XS*q%8-Pj5%Z z=9SE%$oj^vxke}7bPg=1=+A{l9F)`)ug5de(%qNbNj8Ow)lRR zd-q<(3J#S@2VTKL^(nh1W$i97!tdV5Cwm!&3hNq=@Up~l;iigBk7|ya)Wz7b)lSPf zw6M>0jPO`O(y2r6CnUWEwPJUK;?s2#}!T}EIX%|pp zp7f;qGmY-WQDe)TCgtv{zH?z(=C{F*!fYx2LPi!;S_<2ISJ4nuFA<=0fG+Ur)C_RN!A(QL!X?#onXt z6FZjQFE87_k$#yPv4*-;te=vfQJft$@Z}Vf3w=lP{ZQ{2Cz3Ut@{BaYk}tkE&y#<%$aQ4;B^rezWBtq}A9S literal 0 HcmV?d00001 diff --git a/starcitizen/Images/icon@2x.png b/starcitizen/Images/icon@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..fa6d11f99bc5c7992af3e08ffdf10e73c98cbe3b GIT binary patch literal 4115 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

?Tl~ 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 Wy#Ro$%$?x?0000=Lr-5 literal 0 HcmV?d00001 diff --git a/starcitizen/Program.cs b/starcitizen/Program.cs new file mode 100644 index 0000000..a4ab59a --- /dev/null +++ b/starcitizen/Program.cs @@ -0,0 +1,64 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using BarRaider.SdTools; +using p4ktest.SC; +using SCJMapper_V2.SC; + +namespace starcitizen +{ + class Program + { + public static DProfileReader dpReader = new DProfileReader(); // we may read a profile + + static void Main(string[] args) + { + Logger.Instance.LogMessage(TracingLevel.INFO, "Init Star Citizen"); + + + try + { + + SCFiles.Instance.UpdatePack(); // update game files + + var profile = SCDefaultProfile.DefaultProfile(); + + var actionmaps = SCDefaultProfile.ActionMaps(); + + dpReader.fromXML(profile); + + dpReader.fromActionProfile(actionmaps); + + dpReader.Actions(); + + dpReader.CreateDropdownTemplate(); + + dpReader.CreateCsv(); + + } + catch (Exception ex) + { + Logger.Instance.LogMessage(TracingLevel.FATAL, $"DProfileReader: {ex}"); + } + + Logger.Instance.LogMessage(TracingLevel.INFO, "Finished Init Star Citizen"); + + //var langFiles = SCFiles.Instance.LangFiles; + //var langFile = SCFiles.Instance.LangFile(langFiles[0]); + //var txt = SCUiText.Instance.Text("@ui_COMiningThrottle", "???"); + + // Write the string array to a new file named "WriteLines.txt". + + + // Uncomment this line of code to allow for debugging + //while (!System.Diagnostics.Debugger.IsAttached) { System.Threading.Thread.Sleep(100); } + + SDWrapper.Run(args); + + + } + } +} diff --git a/starcitizen/Properties/AssemblyInfo.cs b/starcitizen/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..d55f8a8 --- /dev/null +++ b/starcitizen/Properties/AssemblyInfo.cs @@ -0,0 +1,35 @@ +using System.Reflection; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("Star Citizen Buttons")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("Star Citizen Buttons")] +[assembly: AssemblyCopyright("Copyright © 2021")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("761fcc88-eaf9-4c7a-bbfd-139d186437a5")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/starcitizen/PropertyInspector/StarCitizen/Static.html b/starcitizen/PropertyInspector/StarCitizen/Static.html new file mode 100644 index 0000000..7253fcc --- /dev/null +++ b/starcitizen/PropertyInspector/StarCitizen/Static.html @@ -0,0 +1,324 @@ + + + + + + + + Mhwlng's Star Citizen + + + + + + + +

+ +
+
Function
+ +
+ +
+
Sound
+
+ + + +
+
+ +
+ + diff --git a/starcitizen/PropertyInspector/caret.svg b/starcitizen/PropertyInspector/caret.svg new file mode 100644 index 0000000..b69162a --- /dev/null +++ b/starcitizen/PropertyInspector/caret.svg @@ -0,0 +1,3 @@ + + + diff --git a/starcitizen/PropertyInspector/check.png b/starcitizen/PropertyInspector/check.png new file mode 100644 index 0000000000000000000000000000000000000000..b5e9e622cb4cd2396d583bfde341ab09ad46b347 GIT binary patch literal 234 zcmeAS@N?(olHy`uVBq!ia0vp^JV4CF!3HE7boT!OQY`6?zK#qG8~eHcB(ehe3q4&N zLnI`V6BL;K{Qp0nx#MU@09PPWhz)bcd + + diff --git a/starcitizen/PropertyInspector/elg_calendar.svg b/starcitizen/PropertyInspector/elg_calendar.svg new file mode 100644 index 0000000..157e01b --- /dev/null +++ b/starcitizen/PropertyInspector/elg_calendar.svg @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/starcitizen/PropertyInspector/elg_calendar_inv.svg b/starcitizen/PropertyInspector/elg_calendar_inv.svg new file mode 100644 index 0000000..4f8af68 --- /dev/null +++ b/starcitizen/PropertyInspector/elg_calendar_inv.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/starcitizen/PropertyInspector/jquery-3.3.1.min.js b/starcitizen/PropertyInspector/jquery-3.3.1.min.js new file mode 100644 index 0000000..4d9b3a2 --- /dev/null +++ b/starcitizen/PropertyInspector/jquery-3.3.1.min.js @@ -0,0 +1,2 @@ +/*! jQuery v3.3.1 | (c) JS Foundation and other contributors | jquery.org/license */ +!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(e,t){"use strict";var n=[],r=e.document,i=Object.getPrototypeOf,o=n.slice,a=n.concat,s=n.push,u=n.indexOf,l={},c=l.toString,f=l.hasOwnProperty,p=f.toString,d=p.call(Object),h={},g=function e(t){return"function"==typeof t&&"number"!=typeof t.nodeType},y=function e(t){return null!=t&&t===t.window},v={type:!0,src:!0,noModule:!0};function m(e,t,n){var i,o=(t=t||r).createElement("script");if(o.text=e,n)for(i in v)n[i]&&(o[i]=n[i]);t.head.appendChild(o).parentNode.removeChild(o)}function x(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?l[c.call(e)]||"object":typeof e}var b="3.3.1",w=function(e,t){return new w.fn.init(e,t)},T=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;w.fn=w.prototype={jquery:"3.3.1",constructor:w,length:0,toArray:function(){return o.call(this)},get:function(e){return null==e?o.call(this):e<0?this[e+this.length]:this[e]},pushStack:function(e){var t=w.merge(this.constructor(),e);return t.prevObject=this,t},each:function(e){return w.each(this,e)},map:function(e){return this.pushStack(w.map(this,function(t,n){return e.call(t,n,t)}))},slice:function(){return this.pushStack(o.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(e<0?t:0);return this.pushStack(n>=0&&n0&&t-1 in e)}var E=function(e){var t,n,r,i,o,a,s,u,l,c,f,p,d,h,g,y,v,m,x,b="sizzle"+1*new Date,w=e.document,T=0,C=0,E=ae(),k=ae(),S=ae(),D=function(e,t){return e===t&&(f=!0),0},N={}.hasOwnProperty,A=[],j=A.pop,q=A.push,L=A.push,H=A.slice,O=function(e,t){for(var n=0,r=e.length;n+~]|"+M+")"+M+"*"),z=new RegExp("="+M+"*([^\\]'\"]*?)"+M+"*\\]","g"),X=new RegExp(W),U=new RegExp("^"+R+"$"),V={ID:new RegExp("^#("+R+")"),CLASS:new RegExp("^\\.("+R+")"),TAG:new RegExp("^("+R+"|[*])"),ATTR:new RegExp("^"+I),PSEUDO:new RegExp("^"+W),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+P+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},G=/^(?:input|select|textarea|button)$/i,Y=/^h\d$/i,Q=/^[^{]+\{\s*\[native \w/,J=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,K=/[+~]/,Z=new RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),ee=function(e,t,n){var r="0x"+t-65536;return r!==r||n?t:r<0?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320)},te=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ne=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},re=function(){p()},ie=me(function(e){return!0===e.disabled&&("form"in e||"label"in e)},{dir:"parentNode",next:"legend"});try{L.apply(A=H.call(w.childNodes),w.childNodes),A[w.childNodes.length].nodeType}catch(e){L={apply:A.length?function(e,t){q.apply(e,H.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function oe(e,t,r,i){var o,s,l,c,f,h,v,m=t&&t.ownerDocument,T=t?t.nodeType:9;if(r=r||[],"string"!=typeof e||!e||1!==T&&9!==T&&11!==T)return r;if(!i&&((t?t.ownerDocument||t:w)!==d&&p(t),t=t||d,g)){if(11!==T&&(f=J.exec(e)))if(o=f[1]){if(9===T){if(!(l=t.getElementById(o)))return r;if(l.id===o)return r.push(l),r}else if(m&&(l=m.getElementById(o))&&x(t,l)&&l.id===o)return r.push(l),r}else{if(f[2])return L.apply(r,t.getElementsByTagName(e)),r;if((o=f[3])&&n.getElementsByClassName&&t.getElementsByClassName)return L.apply(r,t.getElementsByClassName(o)),r}if(n.qsa&&!S[e+" "]&&(!y||!y.test(e))){if(1!==T)m=t,v=e;else if("object"!==t.nodeName.toLowerCase()){(c=t.getAttribute("id"))?c=c.replace(te,ne):t.setAttribute("id",c=b),s=(h=a(e)).length;while(s--)h[s]="#"+c+" "+ve(h[s]);v=h.join(","),m=K.test(e)&&ge(t.parentNode)||t}if(v)try{return L.apply(r,m.querySelectorAll(v)),r}catch(e){}finally{c===b&&t.removeAttribute("id")}}}return u(e.replace(B,"$1"),t,r,i)}function ae(){var e=[];function t(n,i){return e.push(n+" ")>r.cacheLength&&delete t[e.shift()],t[n+" "]=i}return t}function se(e){return e[b]=!0,e}function ue(e){var t=d.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function le(e,t){var n=e.split("|"),i=n.length;while(i--)r.attrHandle[n[i]]=t}function ce(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function fe(e){return function(t){return"input"===t.nodeName.toLowerCase()&&t.type===e}}function pe(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function de(e){return function(t){return"form"in t?t.parentNode&&!1===t.disabled?"label"in t?"label"in t.parentNode?t.parentNode.disabled===e:t.disabled===e:t.isDisabled===e||t.isDisabled!==!e&&ie(t)===e:t.disabled===e:"label"in t&&t.disabled===e}}function he(e){return se(function(t){return t=+t,se(function(n,r){var i,o=e([],n.length,t),a=o.length;while(a--)n[i=o[a]]&&(n[i]=!(r[i]=n[i]))})})}function ge(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}n=oe.support={},o=oe.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return!!t&&"HTML"!==t.nodeName},p=oe.setDocument=function(e){var t,i,a=e?e.ownerDocument||e:w;return a!==d&&9===a.nodeType&&a.documentElement?(d=a,h=d.documentElement,g=!o(d),w!==d&&(i=d.defaultView)&&i.top!==i&&(i.addEventListener?i.addEventListener("unload",re,!1):i.attachEvent&&i.attachEvent("onunload",re)),n.attributes=ue(function(e){return e.className="i",!e.getAttribute("className")}),n.getElementsByTagName=ue(function(e){return e.appendChild(d.createComment("")),!e.getElementsByTagName("*").length}),n.getElementsByClassName=Q.test(d.getElementsByClassName),n.getById=ue(function(e){return h.appendChild(e).id=b,!d.getElementsByName||!d.getElementsByName(b).length}),n.getById?(r.filter.ID=function(e){var t=e.replace(Z,ee);return function(e){return e.getAttribute("id")===t}},r.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&g){var n=t.getElementById(e);return n?[n]:[]}}):(r.filter.ID=function(e){var t=e.replace(Z,ee);return function(e){var n="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return n&&n.value===t}},r.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&g){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),r.find.TAG=n.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):n.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},r.find.CLASS=n.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&g)return t.getElementsByClassName(e)},v=[],y=[],(n.qsa=Q.test(d.querySelectorAll))&&(ue(function(e){h.appendChild(e).innerHTML="
",e.querySelectorAll("[msallowcapture^='']").length&&y.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||y.push("\\["+M+"*(?:value|"+P+")"),e.querySelectorAll("[id~="+b+"-]").length||y.push("~="),e.querySelectorAll(":checked").length||y.push(":checked"),e.querySelectorAll("a#"+b+"+*").length||y.push(".#.+[+~]")}),ue(function(e){e.innerHTML="";var t=d.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&y.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&y.push(":enabled",":disabled"),h.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&y.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),y.push(",.*:")})),(n.matchesSelector=Q.test(m=h.matches||h.webkitMatchesSelector||h.mozMatchesSelector||h.oMatchesSelector||h.msMatchesSelector))&&ue(function(e){n.disconnectedMatch=m.call(e,"*"),m.call(e,"[s!='']:x"),v.push("!=",W)}),y=y.length&&new RegExp(y.join("|")),v=v.length&&new RegExp(v.join("|")),t=Q.test(h.compareDocumentPosition),x=t||Q.test(h.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},D=t?function(e,t){if(e===t)return f=!0,0;var r=!e.compareDocumentPosition-!t.compareDocumentPosition;return r||(1&(r=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!n.sortDetached&&t.compareDocumentPosition(e)===r?e===d||e.ownerDocument===w&&x(w,e)?-1:t===d||t.ownerDocument===w&&x(w,t)?1:c?O(c,e)-O(c,t):0:4&r?-1:1)}:function(e,t){if(e===t)return f=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e===d?-1:t===d?1:i?-1:o?1:c?O(c,e)-O(c,t):0;if(i===o)return ce(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?ce(a[r],s[r]):a[r]===w?-1:s[r]===w?1:0},d):d},oe.matches=function(e,t){return oe(e,null,null,t)},oe.matchesSelector=function(e,t){if((e.ownerDocument||e)!==d&&p(e),t=t.replace(z,"='$1']"),n.matchesSelector&&g&&!S[t+" "]&&(!v||!v.test(t))&&(!y||!y.test(t)))try{var r=m.call(e,t);if(r||n.disconnectedMatch||e.document&&11!==e.document.nodeType)return r}catch(e){}return oe(t,d,null,[e]).length>0},oe.contains=function(e,t){return(e.ownerDocument||e)!==d&&p(e),x(e,t)},oe.attr=function(e,t){(e.ownerDocument||e)!==d&&p(e);var i=r.attrHandle[t.toLowerCase()],o=i&&N.call(r.attrHandle,t.toLowerCase())?i(e,t,!g):void 0;return void 0!==o?o:n.attributes||!g?e.getAttribute(t):(o=e.getAttributeNode(t))&&o.specified?o.value:null},oe.escape=function(e){return(e+"").replace(te,ne)},oe.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},oe.uniqueSort=function(e){var t,r=[],i=0,o=0;if(f=!n.detectDuplicates,c=!n.sortStable&&e.slice(0),e.sort(D),f){while(t=e[o++])t===e[o]&&(i=r.push(o));while(i--)e.splice(r[i],1)}return c=null,e},i=oe.getText=function(e){var t,n="",r=0,o=e.nodeType;if(o){if(1===o||9===o||11===o){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=i(e)}else if(3===o||4===o)return e.nodeValue}else while(t=e[r++])n+=i(t);return n},(r=oe.selectors={cacheLength:50,createPseudo:se,match:V,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(Z,ee),e[3]=(e[3]||e[4]||e[5]||"").replace(Z,ee),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||oe.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&oe.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return V.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=a(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(Z,ee).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=E[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&E(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(e,t,n){return function(r){var i=oe.attr(r,e);return null==i?"!="===t:!t||(i+="","="===t?i===n:"!="===t?i!==n:"^="===t?n&&0===i.indexOf(n):"*="===t?n&&i.indexOf(n)>-1:"$="===t?n&&i.slice(-n.length)===n:"~="===t?(" "+i.replace($," ")+" ").indexOf(n)>-1:"|="===t&&(i===n||i.slice(0,n.length+1)===n+"-"))}},CHILD:function(e,t,n,r,i){var o="nth"!==e.slice(0,3),a="last"!==e.slice(-4),s="of-type"===t;return 1===r&&0===i?function(e){return!!e.parentNode}:function(t,n,u){var l,c,f,p,d,h,g=o!==a?"nextSibling":"previousSibling",y=t.parentNode,v=s&&t.nodeName.toLowerCase(),m=!u&&!s,x=!1;if(y){if(o){while(g){p=t;while(p=p[g])if(s?p.nodeName.toLowerCase()===v:1===p.nodeType)return!1;h=g="only"===e&&!h&&"nextSibling"}return!0}if(h=[a?y.firstChild:y.lastChild],a&&m){x=(d=(l=(c=(f=(p=y)[b]||(p[b]={}))[p.uniqueID]||(f[p.uniqueID]={}))[e]||[])[0]===T&&l[1])&&l[2],p=d&&y.childNodes[d];while(p=++d&&p&&p[g]||(x=d=0)||h.pop())if(1===p.nodeType&&++x&&p===t){c[e]=[T,d,x];break}}else if(m&&(x=d=(l=(c=(f=(p=t)[b]||(p[b]={}))[p.uniqueID]||(f[p.uniqueID]={}))[e]||[])[0]===T&&l[1]),!1===x)while(p=++d&&p&&p[g]||(x=d=0)||h.pop())if((s?p.nodeName.toLowerCase()===v:1===p.nodeType)&&++x&&(m&&((c=(f=p[b]||(p[b]={}))[p.uniqueID]||(f[p.uniqueID]={}))[e]=[T,x]),p===t))break;return(x-=i)===r||x%r==0&&x/r>=0}}},PSEUDO:function(e,t){var n,i=r.pseudos[e]||r.setFilters[e.toLowerCase()]||oe.error("unsupported pseudo: "+e);return i[b]?i(t):i.length>1?(n=[e,e,"",t],r.setFilters.hasOwnProperty(e.toLowerCase())?se(function(e,n){var r,o=i(e,t),a=o.length;while(a--)e[r=O(e,o[a])]=!(n[r]=o[a])}):function(e){return i(e,0,n)}):i}},pseudos:{not:se(function(e){var t=[],n=[],r=s(e.replace(B,"$1"));return r[b]?se(function(e,t,n,i){var o,a=r(e,null,i,[]),s=e.length;while(s--)(o=a[s])&&(e[s]=!(t[s]=o))}):function(e,i,o){return t[0]=e,r(t,null,o,n),t[0]=null,!n.pop()}}),has:se(function(e){return function(t){return oe(e,t).length>0}}),contains:se(function(e){return e=e.replace(Z,ee),function(t){return(t.textContent||t.innerText||i(t)).indexOf(e)>-1}}),lang:se(function(e){return U.test(e||"")||oe.error("unsupported lang: "+e),e=e.replace(Z,ee).toLowerCase(),function(t){var n;do{if(n=g?t.lang:t.getAttribute("xml:lang")||t.getAttribute("lang"))return(n=n.toLowerCase())===e||0===n.indexOf(e+"-")}while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===h},focus:function(e){return e===d.activeElement&&(!d.hasFocus||d.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:de(!1),disabled:de(!0),checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,!0===e.selected},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!r.pseudos.empty(e)},header:function(e){return Y.test(e.nodeName)},input:function(e){return G.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||"text"===t.toLowerCase())},first:he(function(){return[0]}),last:he(function(e,t){return[t-1]}),eq:he(function(e,t,n){return[n<0?n+t:n]}),even:he(function(e,t){for(var n=0;n=0;)e.push(r);return e}),gt:he(function(e,t,n){for(var r=n<0?n+t:n;++r1?function(t,n,r){var i=e.length;while(i--)if(!e[i](t,n,r))return!1;return!0}:e[0]}function be(e,t,n){for(var r=0,i=t.length;r-1&&(o[l]=!(a[l]=f))}}else v=we(v===a?v.splice(h,v.length):v),i?i(null,a,v,u):L.apply(a,v)})}function Ce(e){for(var t,n,i,o=e.length,a=r.relative[e[0].type],s=a||r.relative[" "],u=a?1:0,c=me(function(e){return e===t},s,!0),f=me(function(e){return O(t,e)>-1},s,!0),p=[function(e,n,r){var i=!a&&(r||n!==l)||((t=n).nodeType?c(e,n,r):f(e,n,r));return t=null,i}];u1&&xe(p),u>1&&ve(e.slice(0,u-1).concat({value:" "===e[u-2].type?"*":""})).replace(B,"$1"),n,u0,i=e.length>0,o=function(o,a,s,u,c){var f,h,y,v=0,m="0",x=o&&[],b=[],w=l,C=o||i&&r.find.TAG("*",c),E=T+=null==w?1:Math.random()||.1,k=C.length;for(c&&(l=a===d||a||c);m!==k&&null!=(f=C[m]);m++){if(i&&f){h=0,a||f.ownerDocument===d||(p(f),s=!g);while(y=e[h++])if(y(f,a||d,s)){u.push(f);break}c&&(T=E)}n&&((f=!y&&f)&&v--,o&&x.push(f))}if(v+=m,n&&m!==v){h=0;while(y=t[h++])y(x,b,a,s);if(o){if(v>0)while(m--)x[m]||b[m]||(b[m]=j.call(u));b=we(b)}L.apply(u,b),c&&!o&&b.length>0&&v+t.length>1&&oe.uniqueSort(u)}return c&&(T=E,l=w),x};return n?se(o):o}return s=oe.compile=function(e,t){var n,r=[],i=[],o=S[e+" "];if(!o){t||(t=a(e)),n=t.length;while(n--)(o=Ce(t[n]))[b]?r.push(o):i.push(o);(o=S(e,Ee(i,r))).selector=e}return o},u=oe.select=function(e,t,n,i){var o,u,l,c,f,p="function"==typeof e&&e,d=!i&&a(e=p.selector||e);if(n=n||[],1===d.length){if((u=d[0]=d[0].slice(0)).length>2&&"ID"===(l=u[0]).type&&9===t.nodeType&&g&&r.relative[u[1].type]){if(!(t=(r.find.ID(l.matches[0].replace(Z,ee),t)||[])[0]))return n;p&&(t=t.parentNode),e=e.slice(u.shift().value.length)}o=V.needsContext.test(e)?0:u.length;while(o--){if(l=u[o],r.relative[c=l.type])break;if((f=r.find[c])&&(i=f(l.matches[0].replace(Z,ee),K.test(u[0].type)&&ge(t.parentNode)||t))){if(u.splice(o,1),!(e=i.length&&ve(u)))return L.apply(n,i),n;break}}}return(p||s(e,d))(i,t,!g,n,!t||K.test(e)&&ge(t.parentNode)||t),n},n.sortStable=b.split("").sort(D).join("")===b,n.detectDuplicates=!!f,p(),n.sortDetached=ue(function(e){return 1&e.compareDocumentPosition(d.createElement("fieldset"))}),ue(function(e){return e.innerHTML="","#"===e.firstChild.getAttribute("href")})||le("type|href|height|width",function(e,t,n){if(!n)return e.getAttribute(t,"type"===t.toLowerCase()?1:2)}),n.attributes&&ue(function(e){return e.innerHTML="",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||le("value",function(e,t,n){if(!n&&"input"===e.nodeName.toLowerCase())return e.defaultValue}),ue(function(e){return null==e.getAttribute("disabled")})||le(P,function(e,t,n){var r;if(!n)return!0===e[t]?t.toLowerCase():(r=e.getAttributeNode(t))&&r.specified?r.value:null}),oe}(e);w.find=E,w.expr=E.selectors,w.expr[":"]=w.expr.pseudos,w.uniqueSort=w.unique=E.uniqueSort,w.text=E.getText,w.isXMLDoc=E.isXML,w.contains=E.contains,w.escapeSelector=E.escape;var k=function(e,t,n){var r=[],i=void 0!==n;while((e=e[t])&&9!==e.nodeType)if(1===e.nodeType){if(i&&w(e).is(n))break;r.push(e)}return r},S=function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n},D=w.expr.match.needsContext;function N(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()}var A=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,t,n){return g(t)?w.grep(e,function(e,r){return!!t.call(e,r,e)!==n}):t.nodeType?w.grep(e,function(e){return e===t!==n}):"string"!=typeof t?w.grep(e,function(e){return u.call(t,e)>-1!==n}):w.filter(t,e,n)}w.filter=function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?w.find.matchesSelector(r,e)?[r]:[]:w.find.matches(e,w.grep(t,function(e){return 1===e.nodeType}))},w.fn.extend({find:function(e){var t,n,r=this.length,i=this;if("string"!=typeof e)return this.pushStack(w(e).filter(function(){for(t=0;t1?w.uniqueSort(n):n},filter:function(e){return this.pushStack(j(this,e||[],!1))},not:function(e){return this.pushStack(j(this,e||[],!0))},is:function(e){return!!j(this,"string"==typeof e&&D.test(e)?w(e):e||[],!1).length}});var q,L=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/;(w.fn.init=function(e,t,n){var i,o;if(!e)return this;if(n=n||q,"string"==typeof e){if(!(i="<"===e[0]&&">"===e[e.length-1]&&e.length>=3?[null,e,null]:L.exec(e))||!i[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(i[1]){if(t=t instanceof w?t[0]:t,w.merge(this,w.parseHTML(i[1],t&&t.nodeType?t.ownerDocument||t:r,!0)),A.test(i[1])&&w.isPlainObject(t))for(i in t)g(this[i])?this[i](t[i]):this.attr(i,t[i]);return this}return(o=r.getElementById(i[2]))&&(this[0]=o,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):g(e)?void 0!==n.ready?n.ready(e):e(w):w.makeArray(e,this)}).prototype=w.fn,q=w(r);var H=/^(?:parents|prev(?:Until|All))/,O={children:!0,contents:!0,next:!0,prev:!0};w.fn.extend({has:function(e){var t=w(e,this),n=t.length;return this.filter(function(){for(var e=0;e-1:1===n.nodeType&&w.find.matchesSelector(n,e))){o.push(n);break}return this.pushStack(o.length>1?w.uniqueSort(o):o)},index:function(e){return e?"string"==typeof e?u.call(w(e),this[0]):u.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(w.uniqueSort(w.merge(this.get(),w(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}});function P(e,t){while((e=e[t])&&1!==e.nodeType);return e}w.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return k(e,"parentNode")},parentsUntil:function(e,t,n){return k(e,"parentNode",n)},next:function(e){return P(e,"nextSibling")},prev:function(e){return P(e,"previousSibling")},nextAll:function(e){return k(e,"nextSibling")},prevAll:function(e){return k(e,"previousSibling")},nextUntil:function(e,t,n){return k(e,"nextSibling",n)},prevUntil:function(e,t,n){return k(e,"previousSibling",n)},siblings:function(e){return S((e.parentNode||{}).firstChild,e)},children:function(e){return S(e.firstChild)},contents:function(e){return N(e,"iframe")?e.contentDocument:(N(e,"template")&&(e=e.content||e),w.merge([],e.childNodes))}},function(e,t){w.fn[e]=function(n,r){var i=w.map(this,t,n);return"Until"!==e.slice(-5)&&(r=n),r&&"string"==typeof r&&(i=w.filter(r,i)),this.length>1&&(O[e]||w.uniqueSort(i),H.test(e)&&i.reverse()),this.pushStack(i)}});var M=/[^\x20\t\r\n\f]+/g;function R(e){var t={};return w.each(e.match(M)||[],function(e,n){t[n]=!0}),t}w.Callbacks=function(e){e="string"==typeof e?R(e):w.extend({},e);var t,n,r,i,o=[],a=[],s=-1,u=function(){for(i=i||e.once,r=t=!0;a.length;s=-1){n=a.shift();while(++s-1)o.splice(n,1),n<=s&&s--}),this},has:function(e){return e?w.inArray(e,o)>-1:o.length>0},empty:function(){return o&&(o=[]),this},disable:function(){return i=a=[],o=n="",this},disabled:function(){return!o},lock:function(){return i=a=[],n||t||(o=n=""),this},locked:function(){return!!i},fireWith:function(e,n){return i||(n=[e,(n=n||[]).slice?n.slice():n],a.push(n),t||u()),this},fire:function(){return l.fireWith(this,arguments),this},fired:function(){return!!r}};return l};function I(e){return e}function W(e){throw e}function $(e,t,n,r){var i;try{e&&g(i=e.promise)?i.call(e).done(t).fail(n):e&&g(i=e.then)?i.call(e,t,n):t.apply(void 0,[e].slice(r))}catch(e){n.apply(void 0,[e])}}w.extend({Deferred:function(t){var n=[["notify","progress",w.Callbacks("memory"),w.Callbacks("memory"),2],["resolve","done",w.Callbacks("once memory"),w.Callbacks("once memory"),0,"resolved"],["reject","fail",w.Callbacks("once memory"),w.Callbacks("once memory"),1,"rejected"]],r="pending",i={state:function(){return r},always:function(){return o.done(arguments).fail(arguments),this},"catch":function(e){return i.then(null,e)},pipe:function(){var e=arguments;return w.Deferred(function(t){w.each(n,function(n,r){var i=g(e[r[4]])&&e[r[4]];o[r[1]](function(){var e=i&&i.apply(this,arguments);e&&g(e.promise)?e.promise().progress(t.notify).done(t.resolve).fail(t.reject):t[r[0]+"With"](this,i?[e]:arguments)})}),e=null}).promise()},then:function(t,r,i){var o=0;function a(t,n,r,i){return function(){var s=this,u=arguments,l=function(){var e,l;if(!(t=o&&(r!==W&&(s=void 0,u=[e]),n.rejectWith(s,u))}};t?c():(w.Deferred.getStackHook&&(c.stackTrace=w.Deferred.getStackHook()),e.setTimeout(c))}}return w.Deferred(function(e){n[0][3].add(a(0,e,g(i)?i:I,e.notifyWith)),n[1][3].add(a(0,e,g(t)?t:I)),n[2][3].add(a(0,e,g(r)?r:W))}).promise()},promise:function(e){return null!=e?w.extend(e,i):i}},o={};return w.each(n,function(e,t){var a=t[2],s=t[5];i[t[1]]=a.add,s&&a.add(function(){r=s},n[3-e][2].disable,n[3-e][3].disable,n[0][2].lock,n[0][3].lock),a.add(t[3].fire),o[t[0]]=function(){return o[t[0]+"With"](this===o?void 0:this,arguments),this},o[t[0]+"With"]=a.fireWith}),i.promise(o),t&&t.call(o,o),o},when:function(e){var t=arguments.length,n=t,r=Array(n),i=o.call(arguments),a=w.Deferred(),s=function(e){return function(n){r[e]=this,i[e]=arguments.length>1?o.call(arguments):n,--t||a.resolveWith(r,i)}};if(t<=1&&($(e,a.done(s(n)).resolve,a.reject,!t),"pending"===a.state()||g(i[n]&&i[n].then)))return a.then();while(n--)$(i[n],s(n),a.reject);return a.promise()}});var B=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;w.Deferred.exceptionHook=function(t,n){e.console&&e.console.warn&&t&&B.test(t.name)&&e.console.warn("jQuery.Deferred exception: "+t.message,t.stack,n)},w.readyException=function(t){e.setTimeout(function(){throw t})};var F=w.Deferred();w.fn.ready=function(e){return F.then(e)["catch"](function(e){w.readyException(e)}),this},w.extend({isReady:!1,readyWait:1,ready:function(e){(!0===e?--w.readyWait:w.isReady)||(w.isReady=!0,!0!==e&&--w.readyWait>0||F.resolveWith(r,[w]))}}),w.ready.then=F.then;function _(){r.removeEventListener("DOMContentLoaded",_),e.removeEventListener("load",_),w.ready()}"complete"===r.readyState||"loading"!==r.readyState&&!r.documentElement.doScroll?e.setTimeout(w.ready):(r.addEventListener("DOMContentLoaded",_),e.addEventListener("load",_));var z=function(e,t,n,r,i,o,a){var s=0,u=e.length,l=null==n;if("object"===x(n)){i=!0;for(s in n)z(e,t,s,n[s],!0,o,a)}else if(void 0!==r&&(i=!0,g(r)||(a=!0),l&&(a?(t.call(e,r),t=null):(l=t,t=function(e,t,n){return l.call(w(e),n)})),t))for(;s1,null,!0)},removeData:function(e){return this.each(function(){K.remove(this,e)})}}),w.extend({queue:function(e,t,n){var r;if(e)return t=(t||"fx")+"queue",r=J.get(e,t),n&&(!r||Array.isArray(n)?r=J.access(e,t,w.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||"fx";var n=w.queue(e,t),r=n.length,i=n.shift(),o=w._queueHooks(e,t),a=function(){w.dequeue(e,t)};"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,a,o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return J.get(e,n)||J.access(e,n,{empty:w.Callbacks("once memory").add(function(){J.remove(e,[t+"queue",n])})})}}),w.fn.extend({queue:function(e,t){var n=2;return"string"!=typeof e&&(t=e,e="fx",n--),arguments.length\x20\t\r\n\f]+)/i,he=/^$|^module$|\/(?:java|ecma)script/i,ge={option:[1,""],thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};ge.optgroup=ge.option,ge.tbody=ge.tfoot=ge.colgroup=ge.caption=ge.thead,ge.th=ge.td;function ye(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&N(e,t)?w.merge([e],n):n}function ve(e,t){for(var n=0,r=e.length;n-1)i&&i.push(o);else if(l=w.contains(o.ownerDocument,o),a=ye(f.appendChild(o),"script"),l&&ve(a),n){c=0;while(o=a[c++])he.test(o.type||"")&&n.push(o)}return f}!function(){var e=r.createDocumentFragment().appendChild(r.createElement("div")),t=r.createElement("input");t.setAttribute("type","radio"),t.setAttribute("checked","checked"),t.setAttribute("name","t"),e.appendChild(t),h.checkClone=e.cloneNode(!0).cloneNode(!0).lastChild.checked,e.innerHTML="",h.noCloneChecked=!!e.cloneNode(!0).lastChild.defaultValue}();var be=r.documentElement,we=/^key/,Te=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Ce=/^([^.]*)(?:\.(.+)|)/;function Ee(){return!0}function ke(){return!1}function Se(){try{return r.activeElement}catch(e){}}function De(e,t,n,r,i,o){var a,s;if("object"==typeof t){"string"!=typeof n&&(r=r||n,n=void 0);for(s in t)De(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=ke;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return w().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=w.guid++)),e.each(function(){w.event.add(this,t,i,r,n)})}w.event={global:{},add:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,y=J.get(e);if(y){n.handler&&(n=(o=n).handler,i=o.selector),i&&w.find.matchesSelector(be,i),n.guid||(n.guid=w.guid++),(u=y.events)||(u=y.events={}),(a=y.handle)||(a=y.handle=function(t){return"undefined"!=typeof w&&w.event.triggered!==t.type?w.event.dispatch.apply(e,arguments):void 0}),l=(t=(t||"").match(M)||[""]).length;while(l--)d=g=(s=Ce.exec(t[l])||[])[1],h=(s[2]||"").split(".").sort(),d&&(f=w.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=w.event.special[d]||{},c=w.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&w.expr.match.needsContext.test(i),namespace:h.join(".")},o),(p=u[d])||((p=u[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(e,r,h,a)||e.addEventListener&&e.addEventListener(d,a)),f.add&&(f.add.call(e,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),w.event.global[d]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,y=J.hasData(e)&&J.get(e);if(y&&(u=y.events)){l=(t=(t||"").match(M)||[""]).length;while(l--)if(s=Ce.exec(t[l])||[],d=g=s[1],h=(s[2]||"").split(".").sort(),d){f=w.event.special[d]||{},p=u[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=p.length;while(o--)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,y.handle)||w.removeEvent(e,d,y.handle),delete u[d])}else for(d in u)w.event.remove(e,d+t[l],n,r,!0);w.isEmptyObject(u)&&J.remove(e,"handle events")}},dispatch:function(e){var t=w.event.fix(e),n,r,i,o,a,s,u=new Array(arguments.length),l=(J.get(this,"events")||{})[t.type]||[],c=w.event.special[t.type]||{};for(u[0]=t,n=1;n=1))for(;l!==this;l=l.parentNode||this)if(1===l.nodeType&&("click"!==e.type||!0!==l.disabled)){for(o=[],a={},n=0;n-1:w.find(i,this,null,[l]).length),a[i]&&o.push(r);o.length&&s.push({elem:l,handlers:o})}return l=this,u\x20\t\r\n\f]*)[^>]*)\/>/gi,Ae=/\s*$/g;function Le(e,t){return N(e,"table")&&N(11!==t.nodeType?t:t.firstChild,"tr")?w(e).children("tbody")[0]||e:e}function He(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function Oe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Pe(e,t){var n,r,i,o,a,s,u,l;if(1===t.nodeType){if(J.hasData(e)&&(o=J.access(e),a=J.set(t,o),l=o.events)){delete a.handle,a.events={};for(i in l)for(n=0,r=l[i].length;n1&&"string"==typeof y&&!h.checkClone&&je.test(y))return e.each(function(i){var o=e.eq(i);v&&(t[0]=y.call(this,i,o.html())),Re(o,t,n,r)});if(p&&(i=xe(t,e[0].ownerDocument,!1,e,r),o=i.firstChild,1===i.childNodes.length&&(i=o),o||r)){for(u=(s=w.map(ye(i,"script"),He)).length;f")},clone:function(e,t,n){var r,i,o,a,s=e.cloneNode(!0),u=w.contains(e.ownerDocument,e);if(!(h.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||w.isXMLDoc(e)))for(a=ye(s),r=0,i=(o=ye(e)).length;r0&&ve(a,!u&&ye(e,"script")),s},cleanData:function(e){for(var t,n,r,i=w.event.special,o=0;void 0!==(n=e[o]);o++)if(Y(n)){if(t=n[J.expando]){if(t.events)for(r in t.events)i[r]?w.event.remove(n,r):w.removeEvent(n,r,t.handle);n[J.expando]=void 0}n[K.expando]&&(n[K.expando]=void 0)}}}),w.fn.extend({detach:function(e){return Ie(this,e,!0)},remove:function(e){return Ie(this,e)},text:function(e){return z(this,function(e){return void 0===e?w.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=e)})},null,e,arguments.length)},append:function(){return Re(this,arguments,function(e){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||Le(this,e).appendChild(e)})},prepend:function(){return Re(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=Le(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return Re(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return Re(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&&(w.cleanData(ye(e,!1)),e.textContent="");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map(function(){return w.clone(this,e,t)})},html:function(e){return z(this,function(e){var t=this[0]||{},n=0,r=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if("string"==typeof e&&!Ae.test(e)&&!ge[(de.exec(e)||["",""])[1].toLowerCase()]){e=w.htmlPrefilter(e);try{for(;n=0&&(u+=Math.max(0,Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-o-u-s-.5))),u}function et(e,t,n){var r=$e(e),i=Fe(e,t,r),o="border-box"===w.css(e,"boxSizing",!1,r),a=o;if(We.test(i)){if(!n)return i;i="auto"}return a=a&&(h.boxSizingReliable()||i===e.style[t]),("auto"===i||!parseFloat(i)&&"inline"===w.css(e,"display",!1,r))&&(i=e["offset"+t[0].toUpperCase()+t.slice(1)],a=!0),(i=parseFloat(i)||0)+Ze(e,t,n||(o?"border":"content"),a,r,i)+"px"}w.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Fe(e,"opacity");return""===n?"1":n}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{},style:function(e,t,n,r){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var i,o,a,s=G(t),u=Xe.test(t),l=e.style;if(u||(t=Je(s)),a=w.cssHooks[t]||w.cssHooks[s],void 0===n)return a&&"get"in a&&void 0!==(i=a.get(e,!1,r))?i:l[t];"string"==(o=typeof n)&&(i=ie.exec(n))&&i[1]&&(n=ue(e,t,i),o="number"),null!=n&&n===n&&("number"===o&&(n+=i&&i[3]||(w.cssNumber[s]?"":"px")),h.clearCloneStyle||""!==n||0!==t.indexOf("background")||(l[t]="inherit"),a&&"set"in a&&void 0===(n=a.set(e,n,r))||(u?l.setProperty(t,n):l[t]=n))}},css:function(e,t,n,r){var i,o,a,s=G(t);return Xe.test(t)||(t=Je(s)),(a=w.cssHooks[t]||w.cssHooks[s])&&"get"in a&&(i=a.get(e,!0,n)),void 0===i&&(i=Fe(e,t,r)),"normal"===i&&t in Ve&&(i=Ve[t]),""===n||n?(o=parseFloat(i),!0===n||isFinite(o)?o||0:i):i}}),w.each(["height","width"],function(e,t){w.cssHooks[t]={get:function(e,n,r){if(n)return!ze.test(w.css(e,"display"))||e.getClientRects().length&&e.getBoundingClientRect().width?et(e,t,r):se(e,Ue,function(){return et(e,t,r)})},set:function(e,n,r){var i,o=$e(e),a="border-box"===w.css(e,"boxSizing",!1,o),s=r&&Ze(e,t,r,a,o);return a&&h.scrollboxSize()===o.position&&(s-=Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-parseFloat(o[t])-Ze(e,t,"border",!1,o)-.5)),s&&(i=ie.exec(n))&&"px"!==(i[3]||"px")&&(e.style[t]=n,n=w.css(e,t)),Ke(e,n,s)}}}),w.cssHooks.marginLeft=_e(h.reliableMarginLeft,function(e,t){if(t)return(parseFloat(Fe(e,"marginLeft"))||e.getBoundingClientRect().left-se(e,{marginLeft:0},function(){return e.getBoundingClientRect().left}))+"px"}),w.each({margin:"",padding:"",border:"Width"},function(e,t){w.cssHooks[e+t]={expand:function(n){for(var r=0,i={},o="string"==typeof n?n.split(" "):[n];r<4;r++)i[e+oe[r]+t]=o[r]||o[r-2]||o[0];return i}},"margin"!==e&&(w.cssHooks[e+t].set=Ke)}),w.fn.extend({css:function(e,t){return z(this,function(e,t,n){var r,i,o={},a=0;if(Array.isArray(t)){for(r=$e(e),i=t.length;a1)}});function tt(e,t,n,r,i){return new tt.prototype.init(e,t,n,r,i)}w.Tween=tt,tt.prototype={constructor:tt,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||w.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(w.cssNumber[n]?"":"px")},cur:function(){var e=tt.propHooks[this.prop];return e&&e.get?e.get(this):tt.propHooks._default.get(this)},run:function(e){var t,n=tt.propHooks[this.prop];return this.options.duration?this.pos=t=w.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):tt.propHooks._default.set(this),this}},tt.prototype.init.prototype=tt.prototype,tt.propHooks={_default:{get:function(e){var t;return 1!==e.elem.nodeType||null!=e.elem[e.prop]&&null==e.elem.style[e.prop]?e.elem[e.prop]:(t=w.css(e.elem,e.prop,""))&&"auto"!==t?t:0},set:function(e){w.fx.step[e.prop]?w.fx.step[e.prop](e):1!==e.elem.nodeType||null==e.elem.style[w.cssProps[e.prop]]&&!w.cssHooks[e.prop]?e.elem[e.prop]=e.now:w.style(e.elem,e.prop,e.now+e.unit)}}},tt.propHooks.scrollTop=tt.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},w.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:"swing"},w.fx=tt.prototype.init,w.fx.step={};var nt,rt,it=/^(?:toggle|show|hide)$/,ot=/queueHooks$/;function at(){rt&&(!1===r.hidden&&e.requestAnimationFrame?e.requestAnimationFrame(at):e.setTimeout(at,w.fx.interval),w.fx.tick())}function st(){return e.setTimeout(function(){nt=void 0}),nt=Date.now()}function ut(e,t){var n,r=0,i={height:e};for(t=t?1:0;r<4;r+=2-t)i["margin"+(n=oe[r])]=i["padding"+n]=e;return t&&(i.opacity=i.width=e),i}function lt(e,t,n){for(var r,i=(pt.tweeners[t]||[]).concat(pt.tweeners["*"]),o=0,a=i.length;o1)},removeAttr:function(e){return this.each(function(){w.removeAttr(this,e)})}}),w.extend({attr:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return"undefined"==typeof e.getAttribute?w.prop(e,t,n):(1===o&&w.isXMLDoc(e)||(i=w.attrHooks[t.toLowerCase()]||(w.expr.match.bool.test(t)?dt:void 0)),void 0!==n?null===n?void w.removeAttr(e,t):i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:(e.setAttribute(t,n+""),n):i&&"get"in i&&null!==(r=i.get(e,t))?r:null==(r=w.find.attr(e,t))?void 0:r)},attrHooks:{type:{set:function(e,t){if(!h.radioValue&&"radio"===t&&N(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},removeAttr:function(e,t){var n,r=0,i=t&&t.match(M);if(i&&1===e.nodeType)while(n=i[r++])e.removeAttribute(n)}}),dt={set:function(e,t,n){return!1===t?w.removeAttr(e,n):e.setAttribute(n,n),n}},w.each(w.expr.match.bool.source.match(/\w+/g),function(e,t){var n=ht[t]||w.find.attr;ht[t]=function(e,t,r){var i,o,a=t.toLowerCase();return r||(o=ht[a],ht[a]=i,i=null!=n(e,t,r)?a:null,ht[a]=o),i}});var gt=/^(?:input|select|textarea|button)$/i,yt=/^(?:a|area)$/i;w.fn.extend({prop:function(e,t){return z(this,w.prop,e,t,arguments.length>1)},removeProp:function(e){return this.each(function(){delete this[w.propFix[e]||e]})}}),w.extend({prop:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return 1===o&&w.isXMLDoc(e)||(t=w.propFix[t]||t,i=w.propHooks[t]),void 0!==n?i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:e[t]=n:i&&"get"in i&&null!==(r=i.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){var t=w.find.attr(e,"tabindex");return t?parseInt(t,10):gt.test(e.nodeName)||yt.test(e.nodeName)&&e.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),h.optSelected||(w.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null},set:function(e){var t=e.parentNode;t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex)}}),w.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){w.propFix[this.toLowerCase()]=this});function vt(e){return(e.match(M)||[]).join(" ")}function mt(e){return e.getAttribute&&e.getAttribute("class")||""}function xt(e){return Array.isArray(e)?e:"string"==typeof e?e.match(M)||[]:[]}w.fn.extend({addClass:function(e){var t,n,r,i,o,a,s,u=0;if(g(e))return this.each(function(t){w(this).addClass(e.call(this,t,mt(this)))});if((t=xt(e)).length)while(n=this[u++])if(i=mt(n),r=1===n.nodeType&&" "+vt(i)+" "){a=0;while(o=t[a++])r.indexOf(" "+o+" ")<0&&(r+=o+" ");i!==(s=vt(r))&&n.setAttribute("class",s)}return this},removeClass:function(e){var t,n,r,i,o,a,s,u=0;if(g(e))return this.each(function(t){w(this).removeClass(e.call(this,t,mt(this)))});if(!arguments.length)return this.attr("class","");if((t=xt(e)).length)while(n=this[u++])if(i=mt(n),r=1===n.nodeType&&" "+vt(i)+" "){a=0;while(o=t[a++])while(r.indexOf(" "+o+" ")>-1)r=r.replace(" "+o+" "," ");i!==(s=vt(r))&&n.setAttribute("class",s)}return this},toggleClass:function(e,t){var n=typeof e,r="string"===n||Array.isArray(e);return"boolean"==typeof t&&r?t?this.addClass(e):this.removeClass(e):g(e)?this.each(function(n){w(this).toggleClass(e.call(this,n,mt(this),t),t)}):this.each(function(){var t,i,o,a;if(r){i=0,o=w(this),a=xt(e);while(t=a[i++])o.hasClass(t)?o.removeClass(t):o.addClass(t)}else void 0!==e&&"boolean"!==n||((t=mt(this))&&J.set(this,"__className__",t),this.setAttribute&&this.setAttribute("class",t||!1===e?"":J.get(this,"__className__")||""))})},hasClass:function(e){var t,n,r=0;t=" "+e+" ";while(n=this[r++])if(1===n.nodeType&&(" "+vt(mt(n))+" ").indexOf(t)>-1)return!0;return!1}});var bt=/\r/g;w.fn.extend({val:function(e){var t,n,r,i=this[0];{if(arguments.length)return r=g(e),this.each(function(n){var i;1===this.nodeType&&(null==(i=r?e.call(this,n,w(this).val()):e)?i="":"number"==typeof i?i+="":Array.isArray(i)&&(i=w.map(i,function(e){return null==e?"":e+""})),(t=w.valHooks[this.type]||w.valHooks[this.nodeName.toLowerCase()])&&"set"in t&&void 0!==t.set(this,i,"value")||(this.value=i))});if(i)return(t=w.valHooks[i.type]||w.valHooks[i.nodeName.toLowerCase()])&&"get"in t&&void 0!==(n=t.get(i,"value"))?n:"string"==typeof(n=i.value)?n.replace(bt,""):null==n?"":n}}}),w.extend({valHooks:{option:{get:function(e){var t=w.find.attr(e,"value");return null!=t?t:vt(w.text(e))}},select:{get:function(e){var t,n,r,i=e.options,o=e.selectedIndex,a="select-one"===e.type,s=a?null:[],u=a?o+1:i.length;for(r=o<0?u:a?o:0;r-1)&&(n=!0);return n||(e.selectedIndex=-1),o}}}}),w.each(["radio","checkbox"],function(){w.valHooks[this]={set:function(e,t){if(Array.isArray(t))return e.checked=w.inArray(w(e).val(),t)>-1}},h.checkOn||(w.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})}),h.focusin="onfocusin"in e;var wt=/^(?:focusinfocus|focusoutblur)$/,Tt=function(e){e.stopPropagation()};w.extend(w.event,{trigger:function(t,n,i,o){var a,s,u,l,c,p,d,h,v=[i||r],m=f.call(t,"type")?t.type:t,x=f.call(t,"namespace")?t.namespace.split("."):[];if(s=h=u=i=i||r,3!==i.nodeType&&8!==i.nodeType&&!wt.test(m+w.event.triggered)&&(m.indexOf(".")>-1&&(m=(x=m.split(".")).shift(),x.sort()),c=m.indexOf(":")<0&&"on"+m,t=t[w.expando]?t:new w.Event(m,"object"==typeof t&&t),t.isTrigger=o?2:3,t.namespace=x.join("."),t.rnamespace=t.namespace?new RegExp("(^|\\.)"+x.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,t.result=void 0,t.target||(t.target=i),n=null==n?[t]:w.makeArray(n,[t]),d=w.event.special[m]||{},o||!d.trigger||!1!==d.trigger.apply(i,n))){if(!o&&!d.noBubble&&!y(i)){for(l=d.delegateType||m,wt.test(l+m)||(s=s.parentNode);s;s=s.parentNode)v.push(s),u=s;u===(i.ownerDocument||r)&&v.push(u.defaultView||u.parentWindow||e)}a=0;while((s=v[a++])&&!t.isPropagationStopped())h=s,t.type=a>1?l:d.bindType||m,(p=(J.get(s,"events")||{})[t.type]&&J.get(s,"handle"))&&p.apply(s,n),(p=c&&s[c])&&p.apply&&Y(s)&&(t.result=p.apply(s,n),!1===t.result&&t.preventDefault());return t.type=m,o||t.isDefaultPrevented()||d._default&&!1!==d._default.apply(v.pop(),n)||!Y(i)||c&&g(i[m])&&!y(i)&&((u=i[c])&&(i[c]=null),w.event.triggered=m,t.isPropagationStopped()&&h.addEventListener(m,Tt),i[m](),t.isPropagationStopped()&&h.removeEventListener(m,Tt),w.event.triggered=void 0,u&&(i[c]=u)),t.result}},simulate:function(e,t,n){var r=w.extend(new w.Event,n,{type:e,isSimulated:!0});w.event.trigger(r,null,t)}}),w.fn.extend({trigger:function(e,t){return this.each(function(){w.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];if(n)return w.event.trigger(e,t,n,!0)}}),h.focusin||w.each({focus:"focusin",blur:"focusout"},function(e,t){var n=function(e){w.event.simulate(t,e.target,w.event.fix(e))};w.event.special[t]={setup:function(){var r=this.ownerDocument||this,i=J.access(r,t);i||r.addEventListener(e,n,!0),J.access(r,t,(i||0)+1)},teardown:function(){var r=this.ownerDocument||this,i=J.access(r,t)-1;i?J.access(r,t,i):(r.removeEventListener(e,n,!0),J.remove(r,t))}}});var Ct=e.location,Et=Date.now(),kt=/\?/;w.parseXML=function(t){var n;if(!t||"string"!=typeof t)return null;try{n=(new e.DOMParser).parseFromString(t,"text/xml")}catch(e){n=void 0}return n&&!n.getElementsByTagName("parsererror").length||w.error("Invalid XML: "+t),n};var St=/\[\]$/,Dt=/\r?\n/g,Nt=/^(?:submit|button|image|reset|file)$/i,At=/^(?:input|select|textarea|keygen)/i;function jt(e,t,n,r){var i;if(Array.isArray(t))w.each(t,function(t,i){n||St.test(e)?r(e,i):jt(e+"["+("object"==typeof i&&null!=i?t:"")+"]",i,n,r)});else if(n||"object"!==x(t))r(e,t);else for(i in t)jt(e+"["+i+"]",t[i],n,r)}w.param=function(e,t){var n,r=[],i=function(e,t){var n=g(t)?t():t;r[r.length]=encodeURIComponent(e)+"="+encodeURIComponent(null==n?"":n)};if(Array.isArray(e)||e.jquery&&!w.isPlainObject(e))w.each(e,function(){i(this.name,this.value)});else for(n in e)jt(n,e[n],t,i);return r.join("&")},w.fn.extend({serialize:function(){return w.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=w.prop(this,"elements");return e?w.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!w(this).is(":disabled")&&At.test(this.nodeName)&&!Nt.test(e)&&(this.checked||!pe.test(e))}).map(function(e,t){var n=w(this).val();return null==n?null:Array.isArray(n)?w.map(n,function(e){return{name:t.name,value:e.replace(Dt,"\r\n")}}):{name:t.name,value:n.replace(Dt,"\r\n")}}).get()}});var qt=/%20/g,Lt=/#.*$/,Ht=/([?&])_=[^&]*/,Ot=/^(.*?):[ \t]*([^\r\n]*)$/gm,Pt=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Mt=/^(?:GET|HEAD)$/,Rt=/^\/\//,It={},Wt={},$t="*/".concat("*"),Bt=r.createElement("a");Bt.href=Ct.href;function Ft(e){return function(t,n){"string"!=typeof t&&(n=t,t="*");var r,i=0,o=t.toLowerCase().match(M)||[];if(g(n))while(r=o[i++])"+"===r[0]?(r=r.slice(1)||"*",(e[r]=e[r]||[]).unshift(n)):(e[r]=e[r]||[]).push(n)}}function _t(e,t,n,r){var i={},o=e===Wt;function a(s){var u;return i[s]=!0,w.each(e[s]||[],function(e,s){var l=s(t,n,r);return"string"!=typeof l||o||i[l]?o?!(u=l):void 0:(t.dataTypes.unshift(l),a(l),!1)}),u}return a(t.dataTypes[0])||!i["*"]&&a("*")}function zt(e,t){var n,r,i=w.ajaxSettings.flatOptions||{};for(n in t)void 0!==t[n]&&((i[n]?e:r||(r={}))[n]=t[n]);return r&&w.extend(!0,e,r),e}function Xt(e,t,n){var r,i,o,a,s=e.contents,u=e.dataTypes;while("*"===u[0])u.shift(),void 0===r&&(r=e.mimeType||t.getResponseHeader("Content-Type"));if(r)for(i in s)if(s[i]&&s[i].test(r)){u.unshift(i);break}if(u[0]in n)o=u[0];else{for(i in n){if(!u[0]||e.converters[i+" "+u[0]]){o=i;break}a||(a=i)}o=o||a}if(o)return o!==u[0]&&u.unshift(o),n[o]}function Ut(e,t,n,r){var i,o,a,s,u,l={},c=e.dataTypes.slice();if(c[1])for(a in e.converters)l[a.toLowerCase()]=e.converters[a];o=c.shift();while(o)if(e.responseFields[o]&&(n[e.responseFields[o]]=t),!u&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),u=o,o=c.shift())if("*"===o)o=u;else if("*"!==u&&u!==o){if(!(a=l[u+" "+o]||l["* "+o]))for(i in l)if((s=i.split(" "))[1]===o&&(a=l[u+" "+s[0]]||l["* "+s[0]])){!0===a?a=l[i]:!0!==l[i]&&(o=s[0],c.unshift(s[1]));break}if(!0!==a)if(a&&e["throws"])t=a(t);else try{t=a(t)}catch(e){return{state:"parsererror",error:a?e:"No conversion from "+u+" to "+o}}}return{state:"success",data:t}}w.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Ct.href,type:"GET",isLocal:Pt.test(Ct.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":$t,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":w.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?zt(zt(e,w.ajaxSettings),t):zt(w.ajaxSettings,e)},ajaxPrefilter:Ft(It),ajaxTransport:Ft(Wt),ajax:function(t,n){"object"==typeof t&&(n=t,t=void 0),n=n||{};var i,o,a,s,u,l,c,f,p,d,h=w.ajaxSetup({},n),g=h.context||h,y=h.context&&(g.nodeType||g.jquery)?w(g):w.event,v=w.Deferred(),m=w.Callbacks("once memory"),x=h.statusCode||{},b={},T={},C="canceled",E={readyState:0,getResponseHeader:function(e){var t;if(c){if(!s){s={};while(t=Ot.exec(a))s[t[1].toLowerCase()]=t[2]}t=s[e.toLowerCase()]}return null==t?null:t},getAllResponseHeaders:function(){return c?a:null},setRequestHeader:function(e,t){return null==c&&(e=T[e.toLowerCase()]=T[e.toLowerCase()]||e,b[e]=t),this},overrideMimeType:function(e){return null==c&&(h.mimeType=e),this},statusCode:function(e){var t;if(e)if(c)E.always(e[E.status]);else for(t in e)x[t]=[x[t],e[t]];return this},abort:function(e){var t=e||C;return i&&i.abort(t),k(0,t),this}};if(v.promise(E),h.url=((t||h.url||Ct.href)+"").replace(Rt,Ct.protocol+"//"),h.type=n.method||n.type||h.method||h.type,h.dataTypes=(h.dataType||"*").toLowerCase().match(M)||[""],null==h.crossDomain){l=r.createElement("a");try{l.href=h.url,l.href=l.href,h.crossDomain=Bt.protocol+"//"+Bt.host!=l.protocol+"//"+l.host}catch(e){h.crossDomain=!0}}if(h.data&&h.processData&&"string"!=typeof h.data&&(h.data=w.param(h.data,h.traditional)),_t(It,h,n,E),c)return E;(f=w.event&&h.global)&&0==w.active++&&w.event.trigger("ajaxStart"),h.type=h.type.toUpperCase(),h.hasContent=!Mt.test(h.type),o=h.url.replace(Lt,""),h.hasContent?h.data&&h.processData&&0===(h.contentType||"").indexOf("application/x-www-form-urlencoded")&&(h.data=h.data.replace(qt,"+")):(d=h.url.slice(o.length),h.data&&(h.processData||"string"==typeof h.data)&&(o+=(kt.test(o)?"&":"?")+h.data,delete h.data),!1===h.cache&&(o=o.replace(Ht,"$1"),d=(kt.test(o)?"&":"?")+"_="+Et+++d),h.url=o+d),h.ifModified&&(w.lastModified[o]&&E.setRequestHeader("If-Modified-Since",w.lastModified[o]),w.etag[o]&&E.setRequestHeader("If-None-Match",w.etag[o])),(h.data&&h.hasContent&&!1!==h.contentType||n.contentType)&&E.setRequestHeader("Content-Type",h.contentType),E.setRequestHeader("Accept",h.dataTypes[0]&&h.accepts[h.dataTypes[0]]?h.accepts[h.dataTypes[0]]+("*"!==h.dataTypes[0]?", "+$t+"; q=0.01":""):h.accepts["*"]);for(p in h.headers)E.setRequestHeader(p,h.headers[p]);if(h.beforeSend&&(!1===h.beforeSend.call(g,E,h)||c))return E.abort();if(C="abort",m.add(h.complete),E.done(h.success),E.fail(h.error),i=_t(Wt,h,n,E)){if(E.readyState=1,f&&y.trigger("ajaxSend",[E,h]),c)return E;h.async&&h.timeout>0&&(u=e.setTimeout(function(){E.abort("timeout")},h.timeout));try{c=!1,i.send(b,k)}catch(e){if(c)throw e;k(-1,e)}}else k(-1,"No Transport");function k(t,n,r,s){var l,p,d,b,T,C=n;c||(c=!0,u&&e.clearTimeout(u),i=void 0,a=s||"",E.readyState=t>0?4:0,l=t>=200&&t<300||304===t,r&&(b=Xt(h,E,r)),b=Ut(h,b,E,l),l?(h.ifModified&&((T=E.getResponseHeader("Last-Modified"))&&(w.lastModified[o]=T),(T=E.getResponseHeader("etag"))&&(w.etag[o]=T)),204===t||"HEAD"===h.type?C="nocontent":304===t?C="notmodified":(C=b.state,p=b.data,l=!(d=b.error))):(d=C,!t&&C||(C="error",t<0&&(t=0))),E.status=t,E.statusText=(n||C)+"",l?v.resolveWith(g,[p,C,E]):v.rejectWith(g,[E,C,d]),E.statusCode(x),x=void 0,f&&y.trigger(l?"ajaxSuccess":"ajaxError",[E,h,l?p:d]),m.fireWith(g,[E,C]),f&&(y.trigger("ajaxComplete",[E,h]),--w.active||w.event.trigger("ajaxStop")))}return E},getJSON:function(e,t,n){return w.get(e,t,n,"json")},getScript:function(e,t){return w.get(e,void 0,t,"script")}}),w.each(["get","post"],function(e,t){w[t]=function(e,n,r,i){return g(n)&&(i=i||r,r=n,n=void 0),w.ajax(w.extend({url:e,type:t,dataType:i,data:n,success:r},w.isPlainObject(e)&&e))}}),w._evalUrl=function(e){return w.ajax({url:e,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,"throws":!0})},w.fn.extend({wrapAll:function(e){var t;return this[0]&&(g(e)&&(e=e.call(this[0])),t=w(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstElementChild)e=e.firstElementChild;return e}).append(this)),this},wrapInner:function(e){return g(e)?this.each(function(t){w(this).wrapInner(e.call(this,t))}):this.each(function(){var t=w(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=g(e);return this.each(function(n){w(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(e){return this.parent(e).not("body").each(function(){w(this).replaceWith(this.childNodes)}),this}}),w.expr.pseudos.hidden=function(e){return!w.expr.pseudos.visible(e)},w.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)},w.ajaxSettings.xhr=function(){try{return new e.XMLHttpRequest}catch(e){}};var Vt={0:200,1223:204},Gt=w.ajaxSettings.xhr();h.cors=!!Gt&&"withCredentials"in Gt,h.ajax=Gt=!!Gt,w.ajaxTransport(function(t){var n,r;if(h.cors||Gt&&!t.crossDomain)return{send:function(i,o){var a,s=t.xhr();if(s.open(t.type,t.url,t.async,t.username,t.password),t.xhrFields)for(a in t.xhrFields)s[a]=t.xhrFields[a];t.mimeType&&s.overrideMimeType&&s.overrideMimeType(t.mimeType),t.crossDomain||i["X-Requested-With"]||(i["X-Requested-With"]="XMLHttpRequest");for(a in i)s.setRequestHeader(a,i[a]);n=function(e){return function(){n&&(n=r=s.onload=s.onerror=s.onabort=s.ontimeout=s.onreadystatechange=null,"abort"===e?s.abort():"error"===e?"number"!=typeof s.status?o(0,"error"):o(s.status,s.statusText):o(Vt[s.status]||s.status,s.statusText,"text"!==(s.responseType||"text")||"string"!=typeof s.responseText?{binary:s.response}:{text:s.responseText},s.getAllResponseHeaders()))}},s.onload=n(),r=s.onerror=s.ontimeout=n("error"),void 0!==s.onabort?s.onabort=r:s.onreadystatechange=function(){4===s.readyState&&e.setTimeout(function(){n&&r()})},n=n("abort");try{s.send(t.hasContent&&t.data||null)}catch(e){if(n)throw e}},abort:function(){n&&n()}}}),w.ajaxPrefilter(function(e){e.crossDomain&&(e.contents.script=!1)}),w.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(e){return w.globalEval(e),e}}}),w.ajaxPrefilter("script",function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type="GET")}),w.ajaxTransport("script",function(e){if(e.crossDomain){var t,n;return{send:function(i,o){t=w("