Moxinilian / macroboard

Turn any keyboard into a macro key board
MIT License
5 stars 1 forks source link

Integration with an external driver on Windows #2

Open eugenesvk opened 6 months ago

eugenesvk commented 6 months ago

You mention the limitations for Windows and that:

The only option left is to write a custom driver to implement Linux-like functionality in the Windows NT kernel, which is hard to do in a secure way and costs multiple hundreds of dollars to publish because of certification requirements. I am not doing that.

As far as I understand, there exists such a driver https://github.com/oblitum/Interception (not open source and has a huge bug that it bricks after a ~9 re-connects of input devices)

Have you thought about adding an option to integrating your library with that external driver to have a better stop-gap functionality than using Linux and send network events?

Moxinilian commented 6 months ago

The reason I am not super interested in the existing Windows solutions is because they are built on top of Windows drivers which to my understanding cannot be properly published without paying a few hundred dollars to Microsoft (I believe because they require them to be somewhat certified, I am a bit confused by how much engineering work they can put in that for such a low price though). This is why the driver-based approach you linked has a paid version, and limits keyboards to 10 connected keyboards at once on the free one.

I am against adding this feature because of this, and even if someone PRs it I don’t think I could accept it because I would most likely not be able to maintain it afterwards.

I genuinely find the Linux device approach more practical, you can use a Raspberry Pi if you absolutely have nothing else. The real good approach would be for Microsoft to offer the feature, but I understand it is hard because of all the malware issues they struggle with, it would require a better design than the somewhat naive way it is done on Linux.

Moxinilian commented 6 months ago

For context I started this project because I thought it was weird for this feature to only be available as a paid product. I wanted it to be cross-platform so I implemented the Linux thing basically trivially and started looking into Windows to my dismay.