win32gui.SetActiveWindow() ERROR : The specified procedure could not be found

14,445

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('%')
Share:
14,445
Wise
Author by

Wise

I know Python, Java and a little of C++ and php.

Updated on June 06, 2022

Comments

  • Wise
    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
    Eduard Grigoryev almost 4 years
    Could you please clarify what is "WScript.Shell" if we have already opened an application?
  • CS QGB
    CS QGB almost 3 years
    got Error When call in background: pywintypes.com_error: (-2147221008, '尚未调用 CoInitialize。', None, None)
  • Hui Gordon
    Hui Gordon over 2 years
    The block of code works well for me. But may I ask what exactly win32com.client.Dispatch("WScript.Shell").SendKeys('%') does? Also, if I call win32gui.SetForegroundWindow() multi times in one Python script, do I need to SendKeys every times, or just send once in the beginning will be fine? Btw, the link to the article seems not working now.
  • Mika C.
    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.