여기에있는 내용은 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
은 여기에 적용되지 않는 것처럼 보입니다.
브라우저에 초점이 맞춰져 있기 때문에 C# 응용 프로그램 대신 플러그인을 사용하여 메모장을 열어 볼 수 있습니까? 통신 채널이 열려있어 앱이 플러그인 이름을 열어 알릴 수 있습니다. C# 응용 프로그램에 생성 된 메모장 프로세스에 대한 정보가 필요하면 플러그인에서 응용 프로그램으로 다시 보낼 수 있습니다. –
@Remy : 다른 문제가 발생합니다 (택시 기사 답변 참조). –