Python keybd_event problems - python

For a personal project, I want to generate keyboard presses for a N64 emulator. It seems like it recognizes only one keyboard event when I select the Python IDE then switch to the emulator. I want the emulator to constantly recognize the button presses the python script generates. The code is really simple, it constantly replicates the x button being pressed.
import serial,win32api, win32con,time
while 1:
win32api.keybd_event(0x58,0x2D,0,0)
time.sleep(1)

Related

MacOS - Python 3.7 - GUI mouse control for DirectX 8 (2003) app - unable to simulate mouse clicks but I can simulate keyboard entry

I am trying to control an old DirectX application from a Python script. The application concerned is from 2003 (ish). Launches full screen (in a Desktop space) in OSX and requires the mouse be 'freed' via a command. Once the mouse is freed you can use it normally.
I have tried scripting to simulate a mouse click. I have used AppleScript and Python to no avail.
Keyboard simulation does work. For example the first thing any scripting does is swap into the relevant desktop space with a shortcut then hit a keyboard shortcut in the app. This works.
Moving the mouse around the app with scripting works.
However the following will not work.
1) Simulated clicks from code.
2) Turning on mouse keys and simulating a keyboard click in code. Note if I turn on mouse keys and manually hit the mouse click key in the app this does work.
Doesn't work -
import pyautogui
pyyautogui.click()
from pynput import Button,Controller
mouse = Controller()
mouse.click(Button.left, 2)
So basically simulating the keyboard works in the app but I am struggling to simulate a mouse click (moving the mouse works fine). Any ideas?
are you saying you want to write with pyautogui? you can use this:
import pyautogui
pyautogui.write('An example')

How to get python to constantly check for key combinations even if it is in the background?

I was thinking of coding a script that will run in the background of my computer that will detect key combinations to start specific tasks.
For example, the user presses Ctrl+Alt+F1 then the browser starts. However, I cannot seem to find a way to detect these combinations while the script is running in the background.
I thought of using a .pyw extension for my script, but that makes the script not interact-able.
If anyone needs to know, my OS is Windows 10.
I think the pyHook library is what you're looking for:
The pyHook package provides callbacks for global mouse and keyboard events in Windows. Python applications register event handlers for user input events such as left mouse down, left mouse up, key down, etc. and set the keyboard and/or mouse hook.

Grab keyboard output

I want to find a way in Python for detecting "Keyboard event" like PyUserInput. I dont want the keyboard to type any character after pressing a button, and ONLY call me event occured.
For example, after pressing the "s" key run the event handler but not typing "S"! this action should be applied in all over the windows not frames such as "Tkinter"
(I want to grab keyboard output signal by python)
What you're trying to do isn't feasible with python.
What you want to do is essentially make a new driver for your mouse/keyboard.
This is not system independent and there's no good/nice way of doing this with python.
PyUserInput attempts to abstract out the system dependency - but this is not complete, and it cannot override the keyboard/mouse completely. What it can do is it can mimic actions on your mouse or keyboard only if the application allows emulated actions. A lot of programs like games and a bunch of other software disable emulated actions.
The most stable and significant tool which is not a driver level tool are autoit and autohotkey - you could try making an autoit/autohotkey script which is executed as a python subprocess and use pipes to send and get info from the script.

Python win32api mouse control losing focus

I'm using win32api in a Python script to control mouse movements. It's working fantastic, but as soon as I click (I also generate click events) outside my Python shell/IDE, all my mouse events immediately stop. If I click my shell/IDE again, control is restored.
It seems like mouse control is only working when my Python shell or IDE is the "active" window - is there any way to retain mouse control even after Python is sent to the background?
Turns out this was not a Python issue, but was an issue with the device I was using to generate mouse movements. A separate API call was required to allow this device to push events when its owner was out of focus.

How to send a keyboard event to a different Window in Pywin32?

I have to write a script to emulate some keyboard event in a different program in background.This is my codeļ¼š
pwin = win32ui.FindWindow(None,r'someprograme')
pwin.SendMessage(win32con.WM_KEYDOWN,18)
pwin.SendMessage(win32con.WM_KEYDOWN,68)
pwin.SendMessage(win32con.WM_KEYUP,18)
pwin.SendMessage(win32con.WM_KEYUP,68)
pwin.SendMessage(win32con.WM_KEYDOWN,13)
pwin.SendMessage(win32con.WM_KEYUP,13)
But it seems nothing happened.So what should i do?I've tried PostMessage func it seems it still can not do it.
After a quick look at the WM_KEYDOWN docs:
Posted to the window with the keyboard focus when a nonsystem key is pressed. A nonsystem key is a key that is pressed when the ALT key is not pressed.
But looking up your keycodes, you're trying to send ALT-D (followed by ENTER, which is fine). It sounds like you're trying to drive the menus; if that's what you want to do, WM_KEYDOWN is not the way to do it.
The problem is that keyboard menu navigation is driven by Windows, not by the app (except for a handful of apps that override normal menu processing, like some versions of Visual Studio). When you're looking at Notepad, and you hit ALT-F to open the File menu, the Notepad code gets a bunch of menu-related messages (WM_INITMENU, etc.), not the keystrokes.
If you use a WM spy program (I think the free Visual Studio Express still comes with Spy++ and ManagedSpy, but if not, search for an equivalent), you can see what the application is actually seeing when you drive it with the keyboard, and then you can figure out how to emulate that from your Python script.
On top of everything else, depending on how the program is written, it may not accept keystrokes when it doesn't have focus.
By the way, if you're just getting started with Windows GUI automation, you might want to look at something higher level, like pywinauto. That way, you don't have to work out what menu-related messages to send to open the Data menu; you just do something like app.Foo.MenuSelect('Data').

Categories

Resources