C#/Vista에서 마우스 이벤트를 광산 뒤의 응용 프로그램에 전달하는 방법은 무엇입니까?

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

문제

C#에 매우 전문화 된 앱을 작성하여 전체 데스크탑 전체에 대부분 투명한 창으로 떠 다니고 있습니다. 마우스 이벤트를 내 뒤에있는 응용 프로그램에 만들고 전달할 수 있고, 해당 이벤트에 응답하여 "정상적으로"작동하는 것처럼 보이게합니다. Window Manager가 응답 할 수있는 경우에도 바람직합니다.

나는 Windows 전문가가 아니며, 이것을 가장 잘 달성하는 방법을 확신하지 못합니다.

이 페이지에서 :http://bytes.com/forum/thread270002.html

내 앱이 다른 모든 것에 떠 다니기 때문에 Mouse_event가 좋을 것 같습니다. 제 생성 된 이벤트가 다른 앱으로 만들지 않을 것이라고 생각합니다.

대안은 SendMessage 인 것처럼 보이지만 Windows의 상당한 양의 수동 조작이 필요하며 생성 된 마우스 이벤트는 "정통"이 아닙니다.

이것에 접근하는 가장 좋은 방법에 대한 생각이 있습니까?

도움이 되었습니까?

해결책 2

시스템 후크 및 기타 저수준 솔루션을 살펴본 후 훨씬 간단한 방법을 찾았습니다.

먼저 양식의 투명성 키와 백콜로를 동일하게 설정하십시오. 내 양식이 이미 시각적으로 투명했기 때문에 이것은 나에게 시각적으로 차이를 만들지 않았지만 마우스 이벤트를 통과시키는 데 도움이 될 것입니다.

둘째, 다음 코드는 마우스 이벤트가 양식을 통해 "넘어집니다".

protected override CreateParams CreateParams
{
    get
    {
        CreateParams createParams = base.CreateParams;
        createParams.ExStyle |= 0x00000020; // WS_EX_TRANSPARENT

        return createParams;
    }
}

마지막으로, 최상위를 최대한 진실로 설정하십시오.

귀하의 양식은 이제 모든 것을 시각적으로 위에 떠 다니지 만 다른 모든 앱에 초점을 맞출 것입니다.

다른 팁

사용자 입력 필터링과 같은 작업을하고 싶은 것처럼 들립니다.

키보드/마우스 후크가 필요할 수도 있습니다.

Windows API 호출 SetWindowshookex를보고 싶을 것입니다.

C#에서이를 수행하는 방법에 충분한 샘플도 있어야합니다. 내가 처음 찾은 것은 이 링크 (아마도 최고의 기사는 아니지만 아이디어를 주어야합니다).

컨트롤을 비활성화하고 반환하면 Mousedown 이벤트를 부모에게 전달할 수 있습니다.

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