2012-04-18 2 views
0

말하기, 나는 Windows 서비스 응용 프로그램을 가지고 있으며 로그온 한 각 사용자 세션에서 실행중인 클라이언트 응용 프로그램도 창에 있습니다. 각 클라이언트 응용 프로그램에서 RegisterWindowMessage를 호출하고 거기에 해당 메시지를 트랩합니다. 또한 서비스 응용 프로그램에서 동일한 메시지 이름으로 RegisterWindowMessage를 호출 한 다음 서비스에서 다시 SendNotifyMessage를 호출하여 각 클라이언트 응용 프로그램에 단일 화재 이벤트를 알리면 작동할까요?SendNotifyMessage API는 사용자 세션에서 작동합니까?

추신. 나는 C++/MFC와 네이티브 WinAPI를 사용하여 프로그램을 작성한다.

답변

1

서비스 응용 프로그램이 시스템 계정으로 실행중인 경우 사용자 계정의 응용 프로그램으로 메시지를 보낼 수 없습니다.

당신의 다음과 같은 접근 시도 할 수 있습니다 : 모든 WindowStation를 얻기 위해 모든 세션 (WTSEnumerateSessions)를 통해 이동

  • 을 여는 스테이션 (OpenWindowStation), 스테이션 당
    • 스테이션과 스테이션을 연결 (SetProcessWindowStation),
    • 모든 스테이션 데스크톱 (Enumdesktops),
    • 때까지 모든 창 (EnumdesktopWindows)를 통해 이동하여 당신은 아마하지만 UAC에 문제가있을 것이다

당신의 응용 프로그램의 창 중 하나를 발견했다.

+0

입력 해 주셔서 감사합니다. 나는 그것을 시험해 봄으로써 어려운 방법을 배웠다)) 그래서, 위의 방법이 효과가 없을 것이라고 확신 할 수있다. API에 대한 설명서에 그 정보가 표시 되었으면 좋겠습니다. 오, 전 세계 이벤트로 돌아가는 것 같습니다. 나는 그들이 Windows 서비스와 사용자 모드 프로세스 사이에서 통신하기가 더 쉬워 지길 바란다 ... – ahmd0

+1

서비스와 사용자 모드 프로세스 사이에서 통신하는 방법은 사용자 모드 프로세스가 [COM] (http://msdn.microsoft.com/en-us/library/ms809975.aspx) 또는 RPC. 이것이 표준 시스템 서비스의 작동 방식입니다. –

관련 문제