how to get raw keyboard input in windows ?

Discussion in 'Ruby' started by wbsurfver, Mar 29, 2008.

  1. wbsurfver

    wbsurfver Guest

    I have this program, it just runs and anytime the clipboard changes
    and contains some large size,
    it run the speech thing through win-sapi. So I can go to any website,
    highlight some text and copy it to the clipboard and it will speak the
    text. I can't get it to interupt very well. If you hit control-c it
    stop until it's done with the text, thus I broke it into lines.

    Here's my current problem:
    I would like to be able to read raw keyboard data, so that if I hit
    spacebar or some function key, it would pause, even if the dos shell
    running the program was not in focus. How can I do that ?


    require 'win32/clipboard'
    include Win32
    require 'win32ole'

    class MySpeech

    def initialize

    @obj_voice ="SAPI.SpVoice")
    @obj_get_voices = @obj_voice.GetVoices

    @obj_get_voices.each { |voice| puts voice.GetDescription }


    def talk(txt)
    done = false
    lines = txt.split(/$/)
    lines.each do |ln|
    @obj_voice.speak ln

    def run
    prev =
    while true
    curr =
    if curr and curr != prev and curr.length > 80
    talk curr
    prev = curr


    spkthr = do
    spk =

    wbsurfver, Mar 29, 2008
    1. Advertisements

  2. You're trying to do something outside of normal Windows functionality. It
    is possible, but difficult and brittle.

    Look at the function SetWindowsHookEx here:
    <>. If you specify
    0 for the thread ID, you can hook all of the applications and monitor
    their keyboard events.

    The problem with doing this is that you have to create a DLL with a
    function that will signal your process via some sort of IPC. When you
    call SetWindowsHookEx, your DLL will be loaded into the address space
    of each process you hook. You have to be very careful that your code
    doesn't do anything nasty, as it will be running in every process with a
    message pump on the system and could potentially bring the whole thing to
    its knees.

    Finally, IME some parts of the hooking API (notably the mouse hooking)
    don't work as advertised. I don't recall any specific problems with the
    keyboard, but keep your eyes peeled.
    Charles Calvert, Mar 29, 2008
    1. Advertisements

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments (here). After that, you can post your question and our members will help you out.