2012-09-06 4 views
0

나는 여기서 막 다른 길을 걷고있는 것 같습니다. 나는 다음을 수행 프로젝트가 :UAC 창 상단에

  • 그냥 실행하고 사용자가 마우스 가운데 버튼을 누를 때, 그것은
  • 사용자가 다음 폼에서 어떤 선택 할 수있는 형태를 보여줍니다
  • 알림 영역에 남아, 그리고 수 행복.

이것은 제대로 작동하지만 작동하지 않는 것은 양식이 표시 될 때 활성화되지 않는다는 것입니다.

이제는 app.manifest를 requireAdmin으로 수정하기 전에 문제가 없었습니다. 폼이 보여 질 때마다, 그것은 활발했습니다.

하지만 이제 관리자로서 양식을 실행 중이므로 다른 응용 프로그램 중 하나를 제어 할 수 있어야합니다 (관리자도 실행 됨). 양식은 잘 처리되지만 활성화되지 않습니다. ShowDialog 모두의 Form_Load에 호출 양식이 만들어진 경우에도 그것을 시도 -의 Form_Load 에 처리하는 형태의 SetForegroundWindow를 호출 -의 Form_Load 방법 의 내부 TopMost = true - 을 :

는 내가 노력했다. - 의 Form_Load에 Activate뿐만 아니라 양식이 여기에

을 구축했을 때와 내 레이아웃의 호출 :

  • 프로그램 실행을 인해 매니페스트에 UAC 권한이 필요, 사용자가 동의하고 만
  • 개막 알림 아이콘이 표시는
  • Program.cs가 마우스 가운데 버튼 또는 키보드 후크 중 하나가 트리거 될 때
  • , 그것은 새를 만드는 키보드/마우스 후크를 모니터링 실행중인 말하는 좋은 작은 거품을 보여줍니다 양식 개체
  • 은 양식을 표시 할 위치를 설정합니다.
  • 마지막으로 양식을 표시합니다.

다시 말해서 UAC 및 requireAdmin이 app.manifest 내부에 없어도 정상적으로 작동합니다. 하지만 일단 관리자로서 운영되고 있다면, 앞으로는 머물러 가지 않을 것입니다.

나는 MS가 SetForegroundWindow 요구 사항을 훨씬 더 최신 버전의 윈도우 (Vista, 7, 8)로 만들었지 만,이 양식을 맨 위의 활성 창으로 표시 할 수 있어야합니다. 상황 별 메뉴).

어떻게 제대로 할 수 있습니까?

+0

몇 가지 사용성 죄를 저지르고 있습니다. 윈도우가 전경 사랑을 얻고 싶다면 컨텍스트 메뉴를 사용하여 활성화시켜야합니다. –

+0

당신이 무엇을 언급하고 있는지 확실하지 않습니다. 내가 중요한 로깅이나 그런 것 같지는 않다. – zackrspv

답변

1

프로그램을 두 명으로 나눌 수 있습니다. 즉 관리자가 아닌 관리자가 트레이에 앉아서 중간 버튼을 볼 필요가있는 절반과 마우스 버튼을 눌렀을 때 실행하는 관리자 권한이 필요한 절반으로 구분할 수 있습니다. 고가가 아닌 절반은 필요에 따라 SetForegroundWindow 또는 AllowSetForegroundWindow을 호출 할 수 있습니다.

CoCreateInstanceAsAdmin 메서드를 통해 COM 권한 객체를 캐싱 할 때마다 UAC 프롬프트가 표시되지 않도록 반복적으로 사용하십시오.