2013-06-11 3 views
-3

내 목표는 Windows 작업 표시 줄에 아이콘이있는 창이 있는지 확인하는 것입니다.
Windows 작업 표시 줄 아이콘 다시

내 질문은 다음과 같습니다. 가장 간단한 해결책은 무엇입니까?
데비안 기반 OS-es에서 이러한 기능을 구현하는 방법은 매우 좋은 조언이 될 것입니다. 그렇습니다. 델파이는 리눅스 기반 OS를 지원하지 않지만 내 프로젝트는 FPC \ LAZARUS를 사용하고 있으며, 거의 동일한 WIN 플랫폼을 위해서만 "델파이"라고 표시하고 있음을 알고 있습니다.

불행히도 나는이 두 작업에 대한 작업을 중지하고 현재 일부 링크를 찾을 수 없습니다.
아마, 나는 이미 몇 가지 실험과 직감에 근거한 결정을했습니다.
기능의 코드가있다 :

function IsTaskbarWindow(const AWinHandle: THandle): boolean; 
var 
    wi: TWindowInfo; 
begin 
    Result := GetWindowInfo(AWinHandle, wi); 
    if Result then 
     Result := 
      IsWindowVisible(AWinHandle) and 
      (
       (
        ((wi.dwExStyle and WS_EX_TOOLWINDOW) = 0) and 
        ((wi.dwExStyle and WS_EX_NOACTIVATE) = 0) and 
        ((wi.dwStyle and WS_CHILD) = 0) and 
        (GetWindow(AWinHandle, GW_OWNER) = 0) 
       ) or 
       ((wi.dwExStyle and WS_EX_APPWINDOW) <> 0) 
      ); 
end; 

내가 구글과 유래를 사용하는 간단한 결정을 찾기 위해 노력하고 있지만, 예를 들어, 일부 응용 프로그램이 제대로 작동하지 않는이 코드를 작성하기 전에 :
- 그들은 표시 전체 응용 프로그램이 트레이에 "숨겨져 있고"보이는 윈도우가 없음 (Comodo Internet Security)
- 작업 표시 줄 아이콘에 단 하나의 창 (PotPlayer)이있는 동안 둘 이상의 창을 표시합니다.
- 작업 표시 줄의 해당 창 작업 표시 줄에 표시되는 아이콘 (Opera, DoubleCommander)

괜찮습니까? 내 초기 질문 : Windows tskbar에서 창을 결정하는 방법을 기억합니까? 그리고 FPC와 LCL을위한 crossplatform에 대해 제발

+0

한 번에 너무 많은 다른 질문을하고 있기 때문에이 질문에 답변했습니다. 당신은 당신이 보여준 코드보다 더 좋은 것이 있는지 물었고, 전혀 관련이없는 플랫폼에서 비슷한 것을하는 법을 물어 보았습니다. * 그리고 당신은 당신의 "초기 질문"을 어떻게 * 어떻게 * 요구하는지 잘못 설명했습니다 초기 질문 *이 실제로 요구 한 것 대신에 뭔가를하십시오. 어떤 코드에 개선이 있는지 여부입니다. * how * 질문은 무리 중 가장 좋은 질문입니다. 실제로 * 결코 물어 보지 못한 것은 부끄러운 일입니다. –

+0

이 질문을 구조하기 위해 모든 코드를 제거하십시오. 창에 작업 표시 줄에 아이콘이 있는지 여부를 감지하는 방법을 묻는 질문을 다시 작성하십시오. 그런 다음 자신의 질문에 * 답변 *으로 코드를 게시하십시오. 더 나은 답변이 있으면 사람들이 게시합니다. 어떤 질문이 맞을 수 있는지에 대한 예/아니오 질문을하는 대신에 * 투표로 어느 것이 가장 적합한 지 결정하십시오. Linux 솔루션을 원한다면 별도로 요청하거나 교차 플랫폼 솔루션을 요청하고 * 코드를 게시하지 마십시오 (코드가 크로스 플랫폼 솔루션이 아니기 때문에). –

+0

@RobKennedy 설명해 주셔서 감사합니다. 위에서 언급했듯이 이미 많은 코드 예제를 보았습니다.이 예제는 제대로 작동하지 않습니다 (일부 예제가 제공됨). 그래서 저는 제 코드의 예를 보여줍니다. 제 경우에는 제대로 작동합니다. 그리고 내 질문은 : 단지 하나의 솔루션이나 뭔가 더 간단하고 편리하게 사용할 수 있습니까? – Abelisto

답변

2

다른 창문이 작업 표시 줄에 나타나는 방식은 ITaskbarList입니다. 이렇게하면 앱이 좋아하는 창을 추가하거나 제거 할 수 있습니다. 이는 창 스타일을 기반으로 한 코드가 100 % 신뢰성으로 작동하지 않는다는 것을 의미합니다. 지금까지 내가 알고있는 한, ITaskbarList을 사용하여 추가 또는 제거 된 작업 표시 줄 단추를 쿼리하는 지원되는 방법이 없습니다.

질문에 델파이가 포함되어 있고 델파이가 Linux를 대상으로하지 않기 때문에 질문의 Linux 측면을 무시했습니다. 어떤 리눅스 셸에서 사용하게 될 코드는 반드시 크로스 플랫폼이 아니어야합니다.

+1

그는 데비안 (Linux) 시스템에서 작동하는 솔루션을 찾고 있습니다. – Peter

+0

@Peter Delphi는 Linux를 대상으로하지 않으며 Linux에는 Windows 작업 표시 줄이 없습니다. –

+0

@DavidHeffernan Delphi가 아니라 FPC가 있습니다. – Abelisto

관련 문제