2009-07-11 4 views
3

이상한 (까다로운 질문입니까?) 질문입니다. 프로그래밍 방식으로 외부 응용 프로그램에서 열려있는 브라우저의 탭에 액세스 할 수 있습니까? 나는 그것이 막연한 질문이지만, 내 말을 들으려고합니다.외부 응용 프로그램에서 브라우저 탭을 열거하십시오.

답장을 보내려하지 않은 채로 채팅 메시지가있을 때 Windows 시스템 트레이에서 알림 아이콘을 깜박이는 "Gmail 채팅 알리미"응용 프로그램이 있습니다. 지금까지 내가 말할 수있는 유일한 내장 Gmail 채팅 알림은 다음과 같습니다

  1. 교류에 대한 (내가 선호하지 않음) 소리
  2. 시계 창/탭/페이지 제목을 사용 "Gmail"/ "blah says ..."메시지가 깜박입니다. 브라우저 창을 최소화 할 때, 그리고 Gmail의 탭 브라우저에서 활성 탭하지 않을 때, 창 제목은 변경되지 않습니다 내가 통지를하지 않는 :

# 2 문제는 새로운 채팅 메시지.

그래서 나는 나를 위해 탭 제목을 감시하는 응용 프로그램을 만들고 싶습니다. (활성 탭 제목 인 창 제목뿐 아니라 모든 탭 제목). 활성 Windows 프로세스를 열거하고 깜박이는 "어쩌구 저울 (Blah)"을보고 응답되지 않은 채팅 메시지를 감지하는 개념 증명 C# 응용 프로그램을 만들었습니다 창 제목에 "... 말한다 :

Process[] procs = Process.GetProcesses(); 
IntPtr hWnd; 
foreach (Process proc in procs) 
    if ((hWnd = proc.MainWindowHandle) != IntPtr.Zero) 
     if (proc.MainWindowTitle.IndexOf(" says… ") >= 0) 
     ... 

그러나 이것에 명백한 문제는 Gmail의 탭이 활성/집중 탭이없는 경우에만 창 제목에서 보이는 때문에 그것이 (작동하지 않을 것입니다). 따라서 더 깊이 파고 탭 제목을 볼 수있는 무언가가 필요합니다.

나는 무엇이든 열어두고 있습니다. 내가 무엇을 생각하고 있었는지 일이 어떻게 든 브라우저의 탭을 열거하는 방법을 찾고있다. (MDI child windows? * fingers crossed *), 어쩌면 그것도 가능하지 않다. :) 나는 또한 다른 솔루션도 열어두고있다. 파이어 폭스 플러그인이나 뭐 그런 식으로 할 수있는 방법이 있습니다 (그러나 브라우저 샌드 박스에 존재하는 것이 아니라 Windows 시스템 트레이와 통합하는 것이 좋을 것입니다).

누구나 나를 시작할 수 있습니까? 많이 미리 감사드립니다.

답변

1

일반적으로 불가능합니다. 브라우저 탭은 MDI 하위 창 일 필요는 없습니다 (실제로는 거의 틀림). 당신은 임의의 브라우저의 윈도우 트리를 모른다. 그래서 그것을 파싱하고 탭을 찾아 낼 수 없다. (심지어 특정 브라우저에서 그것을 알았더라도, 그것은 마이너 릴리즈 사이에서도 변경 될 가능성이있는 구현 세부 사항이다.). 사실 브라우저가 탭에 별도의 Win32 창 핸들을 사용하고 있는지 여부는 알지 못합니다. 주 윈도우에 대한 핸들을 하나만 가질 수 있기 때문에 모든 것을 그 자체로 그려 낼 수 있습니다 (예 : Qt 및 WPF 응용 프로그램이이를 수행합니다. 특히 오페라는 그렇게하며 아마 사파리도 그렇습니다).

이 문제에 대한 해결책은 브라우저별로 지정해야합니다. 아마도 IE와 Firefox에 해당 플러그인을 작성하여 해당 정보를 애플리케이션에 전달할 수 있습니다 (Firefox 플러그인은 샌드 박스이므로 IPC를 수행 할 수 있는지 여부는 확실하지 않습니다). Opera, Safari 또는 Chrome에 대한 옵션이 표시되지 않습니다.