[C#] 현재 윈도우의 Top 핸들 얻기와 익스플로러로 타입캐스팅 하기


 이전글 [ http://www.scripter.co.kr/entry/C-활성윈도우-이름-과-핸들-알아내기-와-익스플로러-주소값-알아내기 ]
는 나름대로 의미가 있었지만 딱 필요한 익스플로러만의 정보를 알아내기 위해서 아래와 같이 심플한
코딩이 가능하다.

        private void getWin()
        {
            //[0] 현재의 윈두우 핸들 얻기
            int handle = GetForegroundWindow();
            

            //[1] SHDocVw 의 브라우저에서 현재부라우져들 검출 
            foreach (SHDocVw.WebBrowser wb in new SHDocVw.ShellWindowsClass())
            {
                //[2] 각각의 브라우져 핸들과 현제Top의 핸들 검출
                if (wb.HWND.Equals(handle))
                {
                    //[3] 검출된 브라우져의 타입캐스팅
                    InternetExplorer ie = wb as InternetExplorer;
                    _name = ie.Name;
                    _resultURL = ie.LocationURL;
                    
                }
            }
        }

핸들을 이용한다 (HWND) 는거 , 좀더 조사할 필요가 있다.
Yamecoder 야매코더_
C# 2011.02.01 10:20

[C#] 활성윈도우 이름 과 핸들 알아내기 와 익스플로러 주소값 알아내기




using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

//[0] 필요한 DLL 추가 SHDocVw는 윈도우에서 찾기
using SHDocVw; 
using System.Runtime.InteropServices;

namespace LINK_HELPER2
{
    public partial class MainWindow : Window
    {
        TRACE.TraceDele trace = TRACE.getTrace;
        bool isCk = false;

        //[1] user32.dll 의 필요한 함수 선언
        [DllImport("user32.dll")]
        static extern int GetForegroundWindow();
        [DllImport("user32.dll")]
        static extern int GetWindowText(int hWnd, StringBuilder text, int count);


        public MainWindow()
        {
            InitializeComponent();

            //[2] 체크박스 이벤트 선언
            checkBox1.PreviewMouseDown += new MouseButtonEventHandler(checkBox1_MouseDown); 
            check();
        }
        //[3] 체크박스의 핸들러 [검색의 실행 / 대기]  
        void checkBox1_MouseDown(object sender, MouseButtonEventArgs e)
        {
            if (!checkBox1.IsChecked == true)
                isCk = true;
            else
                isCk = false;
        }


        //[4]체크 시작
        private void check()
        {
            System.Timers.Timer t = new System.Timers.Timer();
            t.Interval = 1000;
            t.Elapsed += (s, e) =>
            {
                if (isCk == true)
                {
                    ckIE();
                    getWindow();
                }
            };
            t.Start();
        }

        //[5] 윈도우의 타이틀 얻기
        void getWindow()
        {
            const int nChars = 256;
            int handle = 0;
            StringBuilder Buff = new StringBuilder(nChars);
            handle = GetForegroundWindow();
            if (GetWindowText(handle, Buff, nChars) > 0)
            {
                trace("caption ", Buff.ToString());
                trace("handle", handle.ToString());
            }
        }

        //[6] 익스플로러의 이름과 현제 URL 얻기
        private void ckIE()
        {
            foreach (InternetExplorer ie in new ShellWindowsClass())
            {
                trace(ie.Name, ie.LocationURL);
            }
            trace("--->");
        }
    }
}


@p.s
익스플로러에 검출에 "Windows 탐색기" 도 걸린다.
Yamecoder 야매코더_
C# 2011.01.31 22:40
Powerd by Tistory, designed by criuce
rss