2012-09-07 1 views
1

여기에있는 내용은 C++로 작성된 웹 브라우저 플러그인과 C#으로 작성된 Windows 응용 프로그램입니다. 그들은 명명 된 파이프를 통해 통신합니다. 플러그인은 파일을 열도록 C# 응용 프로그램에 지시합니다 (파일이 .txt이고 메모장에서 열린다 고 가정).AllowSetForegroundWindow 및 SetForegroundWindow : NPAPI 플러그인이 데스크톱 응용 프로그램이 성공하지 못하게하려고합니다.

일단 C# 응용 프로그램에 명령이 제공되면 파일을 열지 만 포 그라운드에서는 메모장이 표시되지 않습니다. 이는 허용되지 않습니다. 포 그라운드에서 메모장을 열어야합니다.

SetForegroundWindow 함수를 호출하도록 C# 응용 프로그램을 수정했습니다. 이번에는 메모장이 전경에서 열리지 않았지만 작업 표시 줄이 깜박입니다.

SetForegroundWindow 및 많은 기사에 대한 설명서를 읽은 후 나는 이제 문제가 무엇인지 이해합니다. C# 응용 프로그램은 전경 과정이 아니기 때문에 메모장을 포 그라운드로 가져올 수 없으며 브라우저는 (?).

". AllowSetForegroundWindow 함수를 호출하여 전경 창을 설정하는 또 다른 과정을 활성화 할 수 있습니다 전경 창을 설정할 수 있습니다 프로세스"

이를 읽은 후

플러그인을 수정하기로 결정했습니다.

플러그인이 매개 변수 (나는 ASFW_ANY이 위험 할 수있다, 알고,하지만 난 AllowSetForegroundWindow 그것을 할 것이라는 점을 확인하고 싶었)로 ASFW_ANY을 통과하는 AllowSetForegroundWindow 함수를 호출이 시간.

플러그인을 수정 한 후에 테스트를 마쳤습니다. (오페라 12.02). 그런 다음 Internet Explorer에서 테스트 해 보았습니다. 하지만 문제는 Firefox와 Chrome에서 테스트했을 때 발생했습니다. C# 응용 프로그램에는 메모장을 포 그라운드로 가져올 수있는 기능이 없습니다. 나는 그 브라우저에 대해 AllowSetForegroundWindow 함수가 false를 반환하고있는 것으로 나타났습니다.

그래서 조사를 시작했고 파이어 폭스가 사용하는 플러그인 컨테이너 때문인 것으로 결론을 내 렸습니다. 아이디어가 내 마음에 들었다. 오페라 12.02에서 작동했지만 플러그인 12.12에서는 플러그인 컨테이너가 없다. 그래서 Opera 12.00을 다운로드했는데 테스트를했는데 실패했습니다. 그러면 플러그인 컨테이너가 범인이라고 결론 내릴 수 있습니다.

질문 : 어떻게하면 전경을 설정할 수있는 능력을 C# 응용 프로그램에 제공 할 수 있습니까?

나는 계속하는 법을 모르며 나는 모든 합법적 인 방법을 시도했다고 생각합니다. AllowSetForegroundWindow & SetForegroundWindow은 여기에 적용되지 않는 것처럼 보입니다.

+0

브라우저에 초점이 맞춰져 있기 때문에 C# 응용 프로그램 대신 플러그인을 사용하여 메모장을 열어 볼 수 있습니까? 통신 채널이 열려있어 앱이 플러그인 이름을 열어 알릴 수 있습니다. C# 응용 프로그램에 생성 된 메모장 프로세스에 대한 정보가 필요하면 플러그인에서 응용 프로그램으로 다시 보낼 수 있습니다. –

+0

@Remy : 다른 문제가 발생합니다 (택시 기사 답변 참조). –

답변

0

플러그인 프로세스가 포 그라운드 프로세스가 아니기 때문에 C# 응용 프로그램에 해당 기능을 제공 할 수 없을 가능성이 높습니다. 실제로 사용할 수있는 여러 브라우저에서 다른 프로세스에서 실행 중입니다. . IE에서는 그렇지 않지만 사용자가 낮은 무결성 프로세스에 있으므로 프로세스를 직접 실행하면 require a registry entry이 해당 응용 프로그램을 시작할 수 있음을 지정합니다.

나는 당신과 동의해야한다 - 나는 당신이 모든 합법적 인 방법을 시도했다고 생각하며 단지 불가능하다. 지옥, 심지어 설치 프로그램은 종종 창문의 최근 버전에서 배경에 중요한 창을 열어 결국.

+0

오페라 12.00에 초점을 맞추자. opera.exe와 opera_plugin_wrapper.exe가 있습니다. 플러그인이 opera_plugin_wrapper.exe에서 실행 중입니다. AllowSetForegroundWindow가 false를 반환합니다 (SetForegroundWindow도 마찬가지 임). opera_plugin_wrapper.exe는 전경 프로세스 인 opera.exe에 의해 시작되었습니다. SetForegroundWindow 설명서에 따르면 "다음 조건 중 하나에 해당하는 경우에만 프로세스가 전경 윈도우를 설정할 수 있습니다. 프로세스가 전경 프로세스로 시작되었습니다." 따라서 SetForegroundWindow는 성공하지 않아도 성공해야합니다. 왜 그런지 알아? –

+0

나는 왜 그런지 모른다. 나는 오페라가 진행되는 과정에서 무언가가이 허가를 유지하는 것을 방해한다고 의심한다. 브라우저 제조업체는 일반적으로 사용자가하려는 일을 원하지 않으므로 .../- 죄송합니다. – taxilian

+0

나도 마찬가지입니다. 불행히도 Chrome, Firefox 및 Opera에서 발생합니다. GetLastError는 AllowSetForegroundWindow를 호출 한 후 ERROR_ACCESS_DENIED를 반환합니다. –