먼저 대부분의 프로그램은 FlashWindowEx
(또는이를 감싸는 더 높은 수준의 함수)을 호출하여 창을 플래싱합니다. 그러나 대부분은 Microsoft의 일부 응용 프로그램으로, 대신 사용자 지정 창을 띄우는 것처럼 보이지만 덮개 아래에서 똑같이 보일 수없는 일부 사용자 지정 작업을 수행합니다. 다행히도 그런 맞춤 앱은별로 신경 쓰지 않아도됩니다.
어쨌든 그 정보를 캡처하는 가장 쉬운 방법은 SetWindowsHookEx
또는 RegisterShellHookWindow
과 함께 쉘 훅을 설치하는 것입니다. (대신 명시 적으로 user32.dll 앞에 코드를 삽입 할 수 있지만 Python에서이 코드를 사용하고 싶지는 않습니다.) 이렇게하면 Windows는 탐색기 ("shell")의 일부인 것처럼 사용자의 윈도우를 처리합니다 다른 프로그램이하는 일에 대한 특별한 메시지를 보내십시오. 특히 WM_SHELLHOOKMESSAGE
.
forivall이 지적한 것처럼 포럼에서 수행하는 방법을 보여주는 AutoHotkey - this answer에서 더 쉽게 할 수 있습니다. VB 나 C++에서하는 것이 더 쉬울 수도 있습니다. 예, 일반적으로 이러한 언어는 파이썬보다 어렵지만 코드의 실제 논리는 매우 사소한 것이고 유일한 어려운 부분은 셸 훅 메시지를 얻는 것이고 그 부분은 언어에서 더 쉬울 것입니다. 또 다른 대안은 IronPython을 사용하여 .NET을 통해 수행하는 것입니다.
하지만 파이썬에서 할 수 있는지 묻는다면 ... 그렇습니다. 관련 함수가 win32gui
으로 감싸지 않았으므로, 파이썬에서 수행하려면 ctypes
을 사용해야합니다. 가능한 예를 보려면 SO question을 참조하십시오. 측면의 관련 질문과 ctypes
문서를 보면 ctypes
을 사용하여 user.dll에서 다른 기능을 호출하는 다른 예제를 확인할 수 있습니다. 당신이 창 후크를 설정하려면
키 기능 (자세한 내용은 ShellProc
참조) 같은 것을 볼 것이다 :
HSHELL_REDRAW=6
WM_SHELL=10
def my_callback(nCode, wParam, lParam):
if nCode == HSHELL_REDRAW and lParam:
got_flashing_window_with_hwnd(wParam)
hook = user32.SetWindowsHookEx(WM_SHELL, my_callback, None, 0)
을하지만 당신은 유형을 설정을 통해 콜백을 밀어 필요 ctypes
. 당신의 창 PROC에서,
user32.RegisterShellHookWindow(my_hwnd)
그런 : 당신은 이미 당신이 파이썬에서 관리하는 윈도우가있는 경우
는 대신 쉘 후크 창으로 자신을 설정하는 아마 쉽게
WM_SHELLHOOKMESSAGE = None
def wndproc(hWnd, uMsg, lParam, wParam):
if WM_SHELLHOOKMESSAGE is None:
WM_SHELLHOOKMESSAGE = user32.RegisterWindowMessage('SHELLHOOK')
if uMsg == WM_SHELLHOOKMESSAGE and wParam == HSHELL_FLASH:
got_flashing_window_with_hwnd(lParam)
난 당신이 중 하나에 대한 높은 권한을 필요가 있는지 모르겠지만, 당신이 의심 것이다.
아마도 파이썬이이를 위해 잘못된 도구 일 것입니다.[Autohotkey] (http://www.autohotkey.com/)를보고 싶을 수도 있습니다. autohotkey와 비슷한 라이브러리를 파이썬에서 사용할 수는 있지만 그다지 많은 이점을 얻지는 못합니다. – forivall
@forivall : AutoHotkey가 깜박이는 창에서 트리거 할 수있는 방법을 제공합니까? 그렇지 않다면 나는 그것이 정말로 도움이된다고 생각하지 않습니다. 실제 "창 초점 맞추기"부분은 'pywinauto'또는 'win32gui'가있는 3 줄의 간단한 줄이므로, 간단하게하려고 할 이유가 없습니다. – abarnert
https://www.google.com/search?q=autohotkey+get+flashing+window – forivall