2012-08-27 2 views
3

바탕 화면에 전경 창이 있는지 확인하는 방법이 있습니까?Windows 7 바탕 화면에 ActiveWindow가 있는지 확인하는 방법

이 방법은 작동하지만 올바르지 않은 것 같습니다. 내 바탕 화면 핸들에는 전경 창

Handle := GetForegroundWindow; 
if Handle = 328992 then 
begin 
    MessageBox(0, 'There is no active window.', 'No Active Window', MB_ICONWARNING or MB_OK); 
    exit; 
end; 

이 작업을 수행하는 가장 좋은 방법은 무엇입니까 328992.를 반환있을 때? 델파이 2010

후속 조사 : 65,552 ShellWindow을 반환 DesktopWindow

iDesktopWindow := GetDesktopWindow; 
iShellWindow := GetShellWindow; 
iForegroundWindow := GetForegroundWindow; 
ShowMessage('DesktopWindow: ' + IntToStr(iDesktopWindow)); 
ShowMessage('ShellWindow: ' + IntToStr(iShellWindow)); 
ShowMessage('ForegroundWindow: ' + IntToStr(iForegroundWindow)); 

내 이전 편집 앱이 실행 된 ForegroundWindow 때마다 다른 값을 보여 주었다 65,724

반환 ForegroundWindow 65,864 반환하지만 내가 실패 값을 얻기 전에 응용 프로그램을 최소화하십시오. 이제 ForegroundWindow에 대해 매번 65724라는 일관된 가치를 얻고 있습니다. 이 경우 활성 창은 없습니다 ... 바탕 화면과 최소화 된 창.

+1

"활성 창"을 "전경 창"과 구별하십시오. 너 무슨 소리 야? –

+0

죄송합니다 ... 활성 창을 ForegroundWindow로 변경하기 위해 편집했습니다. 내가해야 할 일은 바탕 화면에 바탕 화면이 없는지 결정하는 것입니다. 단지 바탕 화면입니다. 내 테스팅 세션에는 데스크톱과 두 개의 최소화 된 응용 프로그램이 있습니다. – Bill

+0

바탕 화면을 클릭하면 ShellWindow가 활성화되었음을 알 수 있습니다. 모든 것을 최소화하면 전경 창이 WorkerW라는 창 클래스가됩니다. Spy ++를 아직 실행 했습니까? –

답변

2

항상 전경 창이 있습니다. 음, GetForegroundWindowNULL을 반환 할 때 전경 창이 변경되는 순간이 있지만 그 순간은 꽤 빠르게지나갑니다!

328992은 데스크톱을 표시하는 데 사용되는 창 중 하나의 창 핸들입니다. Spy ++ 등을 사용하여 어떤 창인지 알아냅니다. 내 생각 엔 감지하려고하는 상태가 shell window이 전경 창일 때입니다.

function GetShellWindow: HWND; stdcall external 'user32.dll'; 

function IsShellWindowTheForegroundWindow: Boolean; 
begin 
    Result := GetShellWindow=GetForegroundWindow; 
end; 
관련 문제