2013-02-02 4 views
1

깜박이거나 깜박일 때 창을 집중시키고 싶습니다. 보다 일반적인 경우는 누군가가 채팅 소프트웨어 (예 : MSN)를 통해 텍스트를 보내는 경우입니다. 이 경우 창 바가 시작 막대에서 깜박이기 시작할 것입니다. 내가 나 자신을 설명하고 있는지 나는 모른다. 나는 깜박이는 창문의 HWND를 얻고 싶다. 그것을 이해하는 데 더 많은 정보가 필요하다면, 나는 더 잘 설명하려고 노력할 것입니다.Python. 채팅의 창 깜박임/깜박임 받기

나는이 사건에 대한 정보를 이미 검색했지만 찾지 못했습니다. 어쩌면 그것은 "win32gui"라이브러리를 사용하여 해결자가 될 수 있습니다.

도움 주셔서 감사합니다.

+0

아마도 파이썬이이를 위해 잘못된 도구 일 것입니다.[Autohotkey] (http://www.autohotkey.com/)를보고 싶을 수도 있습니다. autohotkey와 비슷한 라이브러리를 파이썬에서 사용할 수는 있지만 그다지 많은 이점을 얻지는 못합니다. – forivall

+0

@forivall : AutoHotkey가 깜박이는 창에서 트리거 할 수있는 방법을 제공합니까? 그렇지 않다면 나는 그것이 정말로 도움이된다고 생각하지 않습니다. 실제 "창 초점 맞추기"부분은 'pywinauto'또는 'win32gui'가있는 3 줄의 간단한 줄이므로, 간단하게하려고 할 이유가 없습니다. – abarnert

+0

https://www.google.com/search?q=autohotkey+get+flashing+window – forivall

답변

1

먼저 대부분의 프로그램은 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) 

난 당신이 중 하나에 대한 높은 권한을 필요가 있는지 모르겠지만, 당신이 의심 것이다.

+0

감사합니다. 나는 시도 :'수입 USER32 user32.RegisterShellHookWindow (my_hwnd) M_SHELLHOOKMESSAGE = 없음 데프의 WndProc (HWND, uMsg, lParam에,의 wParam) : WM_SHELLHOOKMESSAGE 경우 없음 : WM_SHELLHOOKMESSAGE = user32.RegisterWindowMessage ('SHELLHOOK') 경우 uMsg == WM_SHELLHOOKMESSAGE와 wParam == HSHELL_FLASH : got_flashing_window_with_hwnd (lParam)'그러나 그것은'user32' 라이브러리가 없다고 말했습니다. 내가 어디에서 다운로드 할 수 있는지 알고 있니? – user1618465

+0

정말 필요한 것은 HWND의 목록이 깜박 거리는 지 확인하는 것입니다. 나는 주위를 둘러 보았다이 본'WasFlashing : = DllCall ("FlashWindow", "UINT"HWND "INT", true)를 경우 (WasFlashing) { 있는 MsgBox, % "는 점멸되었습니다 ..." } else { MsgBox, % "깜박이지 않았 음 ..." }'어떻게 파이썬에서 할 수 있습니까 ??? ??? 정말 고맙습니다!! – user1618465

+0

'user32'는 Windows DLL입니다. 그것을 가져올 수 없습니다. 당신은'ctypes.windll'에서 그것을 얻을 수 있습니다. 'ctypes' 문서를보십시오. – abarnert