Skip to main content

pywinio

https://img.shields.io/pypi/v/pywinio.svg https://ci.appveyor.com/api/projects/status/github/starofrainnight/pywinio?svg=true

A wrapper library for WinIO

Thanks for the great WinIO library which comes from Yariv Kaplan.

The WinIO library binary distribution will be accessed from winiobinary package.

NOTE: This library has been renamed from ‘rabird.winio’ to ‘pywinio’ after 0.3.0 .

  • License: Apache-2.0

Usage

  • Keyboard Emulation

NOTICE: You must have a ps/2 keyboard connected to your PC if you test on win10 or later, otherwise this sample won’t works!

import pywinio
import time
import atexit

# KeyBoard Commands
# Command port
KBC_KEY_CMD = 0x64
# Data port
KBC_KEY_DATA = 0x60

g_winio = None

def get_winio():
    global g_winio

    if g_winio is None:
            g_winio = pywinio.WinIO()
            def __clear_winio():
                    global g_winio
                    g_winio = None
            atexit.register(__clear_winio)

    return g_winio

def wait_for_buffer_empty():
    '''
    Wait keyboard buffer empty
    '''

    winio = get_winio()

    dwRegVal = 0x02
    while (dwRegVal & 0x02):
            dwRegVal = winio.get_port_byte(KBC_KEY_CMD)

def key_down(scancode):
    winio = get_winio()

    wait_for_buffer_empty();
    winio.set_port_byte(KBC_KEY_CMD, 0xd2);
    wait_for_buffer_empty();
    winio.set_port_byte(KBC_KEY_DATA, scancode)

def key_up(scancode):
    winio = get_winio()

    wait_for_buffer_empty();
    winio.set_port_byte( KBC_KEY_CMD, 0xd2);
    wait_for_buffer_empty();
    winio.set_port_byte( KBC_KEY_DATA, scancode | 0x80);

def key_press(scancode, press_time = 0.2):
    key_down( scancode )
    time.sleep( press_time )
    key_up( scancode )


# Press 'A' key
# Scancodes references : https://www.win.tue.nl/~aeb/linux/kbd/scancodes-1.html
key_press(0x1E)

Privilege Requirements

WinIo requires administrative privileges to run properly. This can be achieved by:

  • Using WinIo from a service running as LocalSystem (SE_LOAD_DRIVER_NAME privilege must be explicitly enabled).

  • Embedding a manifest file in the application that requests privilege elevation.

  • Requiring the user to choose the “Run as Administrator” option when launching the application.

The included C# samples demonstrate using an embedded manifest file to request privilege elevation.

Driver Signing Requirements on 64-bit Systems

64-bit versions of Windows only load device drivers that are signed by a code signing certificate issued by a public CA such as Verisign, Thawte, etc. WinIo64.sys must not be deployed on production machines unless a code signing certificate is obtained and used to sign this file. The bundled copy of WinIo64.sys is signed with a self-signed certificate and can only be used on development/test machines with Windows running in a special “test” mode. In order to use the bundled version of WinIo64.sys, you need to take the following steps:

  • Open an elevated command window by right-clicking the icon and clicking “Run as Administrator”.

  • Type the following command to enable test-signing:

bcdedit.exe /set TESTSIGNING ON
  • Reboot the machine

For more information on Windows driver signing requirements, please refer to http://www.microsoft.com/whdc/winlogo/drvsign/kmcs_walkthrough.mspx.

Licenses

This library was licensed under Apache-2.0 which already descripted in LICENSE

WinIO library’s license descripted in LICENSE-WINIO

History

0.3.0 (2018-07-24)

  • Renamed to pywinio

0.2.6 (2018-07-20)

  • Claim this library renamed to pywinio!

0.2.5 (2018-07-20)

  • Removed support of python 2.x

0.2.4 (2018-06-01)

  • Supported automatic deploy by appveyor

0.2.0 (2018-01-21)

  • Depends on winiobinary project, so we don’t need to download WinIo binaries during setup.py

0.1.9 (2015-12-02)

  • Can’t install from packaged zip file due to missing rabird_bootstrap.py

0.1.8 (2015-09-09)

  • Fixed not working with 64bits os

0.1.0 (2015-08-18)

  • Fixed not working with python3

0.0.9 (2015-08-18)

  • Initial release

Metadata

Release files for pywinio 0.3.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for pywinio 0.3.1
File Size Uploaded
pywinio-0.3.1.zip 26.7 kB Details

Release files / pywinio-0.3.1.zip

Download URL pywinio-0.3.1.zip
Size 26.7 kB
Tags Source
SHA-256 checksum
How to use checksums
8154201de8e41109158433cf6d182c500811b78d906871105cb67c372d4212ec
BLAKE2b-256 checksum
How to use checksums
bf72ed15d1813002cbb79371f868856ffeb5dc9569531cc7cce64aa317ed0e37
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/1.12.1 pkginfo/1.5.0.1 requests/2.21.0 setuptools/40.6.3 requests-toolbelt/0.8.0 tqdm/4.29.1 CPython/3.6.7

Release history Release notifications | RSS feed

This release

0.3.1 This release

1 release file

0.3.0

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page