• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

luttje / Key2Joy / 6517266969

14 Oct 2023 11:05AM UTC coverage: 12.469% (+0.2%) from 12.308%
6517266969

push

github

web-flow
Implementing plugins for better separation (#39)

* Start implementing plugins for better separation
* massive refactor in attempt to split appdomains for plugins
* (breaks old mapping profiles)
* Fix error when switching from mouse button trigger to keyboard trigger and clicking in the combobox where the mouse button capture textbox is.
* Simplify code by removing legacy
* SImplify grouping actions
* Fix profile and add helpful opposite mapping generator tool
* Change solution hierarchy
* Restrict AppDomain plugins went from Zone.MyComputer -> .Internet
* create keypair in ci
* Install the .NET framework tools
* Run command in workflow
* Plugin permissions. Plugins disabled by default
* update readme (icon is no longer used)
* Plugin action runs in seperated process
* Remove unused dependencies.
* Fix action name display for mapping
* Fix Lua plugin script calls (NOTE: laggy when using MessageBox)
* convert project to sdk style
* Add editorconfig and start cleaning up
* Fix documentation. Update namespaces to match files (breaks profiles)
* Include all projects in tests, disable building docs on debug
* Add messagebox script action
* Add tests for pluginhost
* Remove administrator from window title test
* add some icons to ui
* Add enabling/disabling plugins
* Close plugins when Key2Joy shuts down
* Fix appcommand failing
* Fix plugin permission form crashing. Fix plugin load exception not showing warning
* Handle plugin host closing better when app has crashed
* Seperate host and client logic in remote event subscriber
* Ensure the PluginHost shuts down if the app crashes
* Better error output for plugins
* Fix cmd interop not working, add some tests
* also generate docs on plugins
* Fix build order with docs
* Fix enum script parameters and ensure actions share environment scopes
* Fix _wpftmp folders being created dotnet/wpf#2930
* Fix sequence action. Add disabled trigger/action for unloaded plugins on start... (continued)

180 of 1703 branches covered (0.0%)

Branch coverage included in aggregate %.

6419 of 6419 new or added lines in 207 files covered. (100.0%)

1035 of 8041 relevant lines covered (12.87%)

8445.05 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

0.0
/Core/Key2Joy.Core/LowLevelInput/VirtualKeyConverter.cs
1
using System.Runtime.InteropServices;
2
using System.Windows.Forms;
3

4
namespace Key2Joy.LowLevelInput;
5

6
// Source: https://stackoverflow.com/a/2934866
7
public class VirtualKeyConverter
8
{
9
    [DllImport("user32.dll")]
10
    private static extern short VkKeyScan(char ch);
11

12
    [DllImport("user32.dll")]
13
    private static extern uint MapVirtualKey(uint uCode, MapVirtualKeyMapTypes uMapType);
14

15
    public static Keys KeysFromVirtual(int virtualKeyCode) => (Keys)virtualKeyCode;
×
16

17
    public static Keys KeysFromScanCode(KeyboardKey scanCode) => KeysFromVirtual((int)MapVirtualKey((uint)scanCode, MapVirtualKeyMapTypes.MAPVK_VSC_TO_VK_EX));
×
18

19
    public static Keys KeysFromChar(char keyChar)
20
    {
×
21
        Helper helper = new() { Value = VkKeyScan(keyChar) };
×
22

23
        var virtualKeyCode = helper.Low;
×
24
        var shiftState = helper.High;
×
25

26
        var keys = (Keys)virtualKeyCode;
×
27

28
        keys |= (shiftState & 1) != 0 ? Keys.Shift : Keys.None;
×
29
        keys |= (shiftState & 2) != 0 ? Keys.Control : Keys.None;
×
30
        keys |= (shiftState & 4) != 0 ? Keys.Alt : Keys.None;
×
31

32
        return keys;
×
33
    }
×
34

35
    public static string KeysToString(Keys keys) => new KeysConverter().ConvertToString(keys);
×
36

37
    [StructLayout(LayoutKind.Explicit)]
38
    private struct Helper
39
    {
40
        [FieldOffset(0)] public short Value;
41
        [FieldOffset(0)] public byte Low;
42
        [FieldOffset(1)] public byte High;
43
    }
44
}
45

46
/// <summary>
47
/// The set of valid MapTypes used in MapVirtualKey
48
/// </summary>
49
/// <remarks>
50
/// Source: http://pinvoke.net/default.aspx/user32/MapVirtualKey.html?diff=y
51
/// </remarks>
52
public enum MapVirtualKeyMapTypes : uint
53
{
54
    /// <summary>
55
    /// uCode is a virtual-key code and is translated into a scan code.
56
    /// If it is a virtual-key code that does not distinguish between left- and
57
    /// right-hand keys, the left-hand scan code is returned.
58
    /// If there is no translation, the function returns 0.
59
    /// </summary>
60
    MAPVK_VK_TO_VSC = 0x00,
61

62
    /// <summary>
63
    /// uCode is a scan code and is translated into a virtual-key code that
64
    /// does not distinguish between left- and right-hand keys. If there is no
65
    /// translation, the function returns 0.
66
    /// </summary>
67
    MAPVK_VSC_TO_VK = 0x01,
68

69
    /// <summary>
70
    /// uCode is a virtual-key code and is translated into an unshifted
71
    /// character value in the low-order word of the return value. Dead keys (diacritics)
72
    /// are indicated by setting the top bit of the return value. If there is no
73
    /// translation, the function returns 0.
74
    /// </summary>
75
    MAPVK_VK_TO_CHAR = 0x02,
76

77
    /// <summary>
78
    /// Windows NT/2000/XP: uCode is a scan code and is translated into a
79
    /// virtual-key code that distinguishes between left- and right-hand keys. If
80
    /// there is no translation, the function returns 0.
81
    /// </summary>
82
    MAPVK_VSC_TO_VK_EX = 0x03,
83

84
    /// <summary>
85
    /// Not currently documented
86
    /// </summary>
87
    MAPVK_VK_TO_VSC_EX = 0x04
88
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc