win32gui.SetActiveWindow() ERROR : The specified procedure could not be found
Solution 1
My program works fine on my desktop with Windows 7, but when I use my laptop with Windows Vista (even with UAC off), I get the error:
pywintypes.error: (0, 'SetForegroundWindow', 'No error message is available')
The program will flash in the taskbar, but no characters are sent.
I even tried sending 'notepad' SetForegroundWindow and get the same error.
Here is a link with a workaround that combines threads to get the computer to think they work together: http://www.shloemi.com/2012/09/solved-setforegroundwindow-win32-api-not-always-works/
This article has more information about the problem.
UPDATE: I'm sorry that link goes to a C program. I researched some more and found out it will let you SetForegroundWindow, if you send an alt key first.
For example:
import win32gui, win32com.client
shell = win32com.client.Dispatch("WScript.Shell")
shell.SendKeys('%')
win32gui.SetForegroundWindow(window)
Solution 2
This also worked for me
import win32gui, win32com.client
shell = win32com.client.Dispatch("WScript.Shell")
shell.SendKeys('%')
win32gui.SetForegroundWindow(window.hwnd)
Solution 3
What worked it me...
import win32gui, win32com.client
shell = win32com.client.Dispatch("WScript.Shell")
input("Press Enter")
shell.SendKeys(' ') #Undocks my focus from Python IDLE
win32gui.SetForegroundWindow(window) #It works!
shell.SendKeys('%')
Comments
-
Wise almost 2 years
I get the active window like so:
window = win32gui.GetForegroundWindow()
which is an Int, say 1053634. And afterwards I try to set the foreground window back to the specified window:
win32gui.SetForegroundWindow(window)
And I get this error: win32gui.SetForegroundWindow(window) error: (127, 'SetForegroundWindow', 'The specified procedure could not be found.')
Sometimes when I do this in the interpreter, I get this error:
win32gui.SetForegroundWindow(1053634) error: (0, 'SetForegroundWindow', 'No error message is available')
What do you think is the problem?
Thanks!
-
Eduard Grigoryev almost 4 yearsCould you please clarify what is "WScript.Shell" if we have already opened an application?
-
CS QGB almost 3 yearsgot Error When call in background: pywintypes.com_error: (-2147221008, '尚未调用 CoInitialize。', None, None)
-
Hui Gordon over 2 yearsThe block of code works well for me. But may I ask what exactly
win32com.client.Dispatch("WScript.Shell").SendKeys('%')
does? Also, if I callwin32gui.SetForegroundWindow()
multi times in one Python script, do I need toSendKeys
every times, or just send once in the beginning will be fine? Btw, the link to the article seems not working now. -
Mika C. almost 2 years@HuiGordon Literally all it does is sending left alt key. For some reason windows really wants to have you to press alt before foregrounding any other window. Not sure if this is a bug or intended by microsoft maybe they want people to only be able to do Alt + Tab or something to bring windows to the front.