시스템 트레이(알림 영역) 아이콘이 WM_MOUSEWHEEL 메시지를 받도록 하려면 어떻게 해야 합니까?

StackOverflow https://stackoverflow.com/questions/90411

  •  01-07-2019
  •  | 
  •  

문제

알림 영역 아이콘 위로 휠 스크롤하여 믹서 볼륨을 설정하도록 만든 기존 애플리케이션을 확장하고 싶습니다.

내가 아는 한 알림 영역은 WM_MOUSEWHEEL 메시지를 수신하지 않지만 여전히 내가 원하는 것을 정확히 수행하는 응용 프로그램을 찾았습니다.http://www.actualsolution.com/power_mixer).WinspectorSpy를 사용하여 응용 프로그램 양식에서 수신되는 몇 가지 이상한 메시지를 발견했습니다.0x000003d0 및 0x000003d1이지만 이에 대한 참조를 찾지 못했습니다.

원하는 기능을 어떻게 얻을 수 있는지 아는 사람이 있나요?

도움이 되었습니까?

해결책

애플리케이션 외부에서 마우스/키보드 이벤트를 캡처하려면 다음이 필요합니다. 저수준 후크.

Delphi에 마우스 후크를 설치하는 방법에 대한 좋은 초보자용 기사는 다음과 같습니다. 애플리케이션 외부의 이벤트를 포착하기 위해 마우스를 연결하는 방법 About.com에서 Zarko Gajic이 작성했습니다.

애플리케이션을 시작하는 사용자에게 후크를 설치하려면 관리 권한이 필요합니다.

메시지를 캡처한 후에는 메시지가 알림 표시줄의 아이콘 위에 있는지 확인하고(표시줄에서 위치를 가져오는 정확한 API가 없기 때문에 어려울 수 있음) 스크롤 이벤트를 처리해야 합니다.

다른 팁

마우스 후킹에 대해 설명했고, 정확한 아이콘을 찾는 것이 어려울 수 있다고 언급했습니다.트레이 아이콘을 찾는 방법에 대한 다음 기사를 찾았습니다.

CTrayIconPosition - 내 트레이 아이콘은 어디에 있나요? 이렉 지엘린스키(Irek Zielinski).작동 방식을 이해하려고 하면 뒤집어서 마우스가 현재 아이콘 위에 있는지 확인하는 데 사용할 수 있다고 생각합니다.

하지만 먼저 마우스가 트레이 영역에 있는지 확인해야 합니다.올바른 지역을 찾는 오래된 코드(2005)를 찾았습니다.

var
 hwndTaskBar, hwndTrayWnd, hwndTrayToolBar : HWND;
 rTrayToolBar : tRect;
begin
 hwndTaskBar  := FindWindowEx (0, 0, 'Shell_TrayWnd', nil);
 hwndTrayWnd  := FindWindowEx (hwndTaskBar , 0, 'TrayNotifyWnd',nil);
 hwndTrayToolBar := FindWindowEx(hwndTrayWnd, 0, 'ToolbarWindow32',nil);

 Windows.GetClientRect(hwndTrayToolBar, rTrayToolBar);
end

이 코드 조각과 언급된 기사의 지식을 사용하면 원하는 기능을 구현할 수 있다고 생각합니다.

이것이 문제를 해결할지는 확실하지 않지만 시작점으로 시도해 볼 가치가 있을 수 있습니다.작업 표시줄 아이콘 위에 배치할 최상위 투명 창을 만들 수 있습니다.해당 최상위 창은 마우스가 위에 있을 때 마우스 알림을 받습니다.그런 다음 필요에 따라 처리할 수 있습니다.작업 표시줄 아이콘의 화면 위치를 찾는 방법은 제가 모르는 것이므로 문제가 될 수 있습니다.

이것이 도움이 될지는 모르겠지만 Delphi의 표준 메시지 라이브러리에는 다음과 같은 내용이 나와 있습니다.

WM_MOUSEWHEEL = $020A;

어떤 언어를 사용하고 있는지 알려주는 것도 도움이 될 것입니다.

Power Mixer가 전체 작업 표시줄에서 스크롤 휠 이벤트를 캡처하는 반면 마우스 가운데 클릭은 시스템 트레이 아이콘에서만 작동한다는 점을 지적하고 싶습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top