Windows 7: comment amener une fenêtre à l'avant quelle que soit l'autre fenêtre?

Je me suis mise en œuvre d'une barre de tâches de remplacement, dock-comme l'application sélecteur de style de programme. Il fait un unique truc avec OpenGL, et avec des raccourcis clavier, donc la façon dont il est mis en place, la fenêtre n'est pas toujours nécessaire de se concentrer. J'aimerais mettre en œuvre pour que je peut apporter un arbitraire de la fenêtre au premier plan, un peu comme une barre des tâches ou un ALT-TAB programme serait.

Cependant, mon code provoque l'icône de l'application flash dans la barre des tâches. La documentation de l'API Windows dit que c'est ce qui est censé se produire, mais je suis à la recherche d'un moyen de contourner cela.

J'ai adapté mon code à partir des exemples suivants, qui disent que le fait d'attacher à l'avant-plan thread doit vous permettre de définir la fenêtre de premier plan. Voici les sites:

http://www.voidnish.com/Articles/ShowArticle.aspx?code=dlgboxtricks

http://invers2008.blogspot.com/2008/10/mfc-how-to-steal-focus-on-2kxp.html

Mon code ressemble à ceci. Notez que c'est à l'aide de la win32 wrappers python (soi-même.hwnd est le handle de la fenêtre, je veux porter à l'avant):

fgwin = win32gui.GetForegroundWindow()
fg = win32process.GetWindowThreadProcessId(fgwin)[0]
current = win32api.GetCurrentThreadId()
if current != fg:
    win32process.AttachThreadInput(fg, current, True)
    win32gui.SetForegroundWindow(self.hwnd)
    win32process.AttachThreadInput(fg, win32api.GetCurrentThreadId(), False)

Cependant, à moins que ma fenêtre est la fenêtre de premier plan (ce qui n'est généralement pas), cela provoque l'icône du programme pour flash.

Je fais le filetage de fixation de mal? Est-il une autre façon de contourner ce problème? J'y figure doit être, comme il y a beaucoup de demande de transfuges qui semblent être en mesure de le faire très bien.

Où j'écris ces lignes en python, mais si il y a une solution dans une autre langue, je vais utiliser des emballages ou faire tout ce qui est necessarry pour obtenir cette place et en cours d'exécution.

Merci d'avance!

EDIT: je serais ouvert à un moyen de le faire fonctionner sur mon ordinateur, c'est à dire un moyen de permettre, sur ma machine, une façon pour toutes les applications à prendre le focus.

RÉSOLU: Ce que vous avez à faire est de désactiver le verrou de premier plan. Il s'avère que c'était aussi simple que cela:

win32gui.SystemParametersInfo(win32con.SPI_SETFOREGROUNDLOCKTIMEOUT, 0, win32con.SPIF_SENDWININICHANGE | win32con.SPIF_UPDATEINIFILE)

source d'informationauteur jmite