아디봉의.net

C# dll import 사용하기 본문

C#

C# dll import 사용하기

아디봉 2012. 9. 13. 16:40

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices; //<-- 선언꼭해줘야함

namespace ConsoleApplication2
{

    class Program
    {
        [DllImport("user32.dll")]
        public static extern int FindWindow(string ipClassName, string IpWindowName);
       //1. 찾고자하는 클래스이름, 2.캡션값
       
        [DllImport("user32.dll")]
        public static extern int FindWindowEx(int hWnd1, int hWnd2, string Ipsz1, string Ipsz2);
        //1.바로위의 부모값을 주고 2. 0이나 null 3,4.클래스명과 캡션명을

        [DllImport("user32.dll")]
        public static extern int SendMessage(int hwnd, int wMsg, int wParam, int IParam);
        //1. 이벤트를 보낼 핸들 값을 넣어줌 2.이벤트 메세지에 해당 3.4. 그에따른 부수적인 메세지를 전달

        [DllImport("user32.dll")]
        public static extern IntPtr GetWindow(IntPtr hWnd, int uCmd);
        //대상이되는 핸들값 //대상 핸들의자식

        //부모핸들..이런 식으로0~5까지 값으로 구별하여 접근할수가 있는것이다.
        //const int GW_HWNDFIRST = 0;
        //const int GW_HWNDLAST = 1;
        //const int GW_HWNDNEXT = 2;
        //const int GW_HWNDPREV = 3;
        //const int GW_OWNER = 4;
        //const int GW_CHILD = 5;


        [DllImport("user32.dll")]//핸들값을 넘겨주면 캡션값을 반환해줌
        private static extern int GetWindowText(int hWnd, StringBuilder title, int size);
        //1. 알아내고자하는 핸듶대상  2. 그 윈도우의 캡션값을 두번째 인자값으로 반환해줌 3.받을 텍스트값의 최대크기


        [DllImport("user32.dll")] //윈도우 창의상태를 변경
        private static extern bool ShowWindowAsync(IntPtr hWnd, int nCmdShow);
       //1.변화시키고가자하는 핸들값 2.인자값을 어떻게 넘겨주느냐에 따라서 상태가 변하고
        //상태에 대한 값은 아래 값들을 참고하길..
        //private const int SW_HIDE = 0;
        //private const int SW_SHOWNORMAL = 1;
        //private const int SW_SHOWMINIMIZED = 2;
        //private const int SW_SHOWMAXIMIZED = 3;
        //private const int SW_SHOWNOACTIVATE = 4;
        //private const int SW_RESTORE = 9;
        //private const int SW_SHOWDEFAULT = 10;

        //마우스 이벤트 mouse_event
        [DllImport("user32.dll")]
        public static extern void mouse_event(int dwFlags, int dx, int dy, int cButtons, int dwExtraInfo);

        //마우스커서이벤트 SetCursorPos
        [DllImport("user32.dll")]
        public static extern int SetCursorPos(int x, int y);

        public const int WM_LBUTTONDOWN = 0x0202;
        public const int WM_LBUTTONUP = 0x0201;
       
        //키보드 이벤트
        [DllImport("user32.dll")]
        public static extern void keybd_event(
            byte bVk,  //virtual-key code
            byte bScan, //hardware scan code
            int dwFlags,  //function options
            ref int dwExtraInfo  //additional keystroke data
            );

        [STAThread]
        static void Main(string[] args)
        {
            /*
            Console.WriteLine("C2soft messenger 값은?");
            Console.WriteLine("캡션값만 입력한 핸들값 : " + FindWindow(null, "c2SOFT Messenger"));
            Console.WriteLine("클래스명만 입력한 핸들값:" + FindWindow("NeoBizBox_Base", null).ToString());

            int hw1 = FindWindow(null, "c2SOFT Messenger");
            Console.WriteLine("핸들값1"+hw1.ToString());
            int hw2 = FindWindowEx(hw1, 0, "사용자/부서 검색", "Edit");
            Console.WriteLine("핸들값2" + hw2.ToString());
            int hw3 = FindWindowEx(hw2, 0, "nbbSCWnd", null);
            Console.WriteLine("핸들값3" + hw3.ToString());
            int hw4 = FindWindowEx(hw3, 0, "nbbButton", "▲");
            //  Console.WriteLine("핸들값4" + hw3.ToString());
            //  int hw5 = FindWindowEx(hw4, 0, "Button", "my_cyworld");
            //  Console.WriteLine("핸들값5" + hw3.ToString());
              //int hw6 = FindWindowEx(hw5, 0, "ENLeftPaneView", null);
              //Console.WriteLine("핸들값3" + hw3.ToString());
              const int WM_LBUTTONDOWN = 0x0201;
              const int WM_LBUTTONUP = 0x0202;
              const int BM_CLICK = 0x00F5;

              SendMessage(hw1, BM_CLICK, 0, 1);
              SendMessage(hw1, WM_LBUTTONDOWN, 0, 1);
              SendMessage(hw1, WM_LBUTTONUP, 0, 1);

              SendMessage(hw2, BM_CLICK, 0, 1);
              SendMessage(hw2, WM_LBUTTONDOWN, 0, 1);
              SendMessage(hw2, WM_LBUTTONUP, 0, 1);

              SendMessage(hw3, BM_CLICK, 0, 1);
              SendMessage(hw3, WM_LBUTTONDOWN, 0, 1);
              SendMessage(hw3, WM_LBUTTONUP, 0, 1);    
          
            // 마우스 예제
            Console.WriteLine("마우스를 움직 입니다.(Enter)");
            Console.ReadLine();

            for (int i = 0; i < 1000; i++)
            {
                Random y = new Random();
                SetCursorPos(y.Next(800), y.Next(600));
            }

            Console.WriteLine("마우스를 다운 합니다. 콘솔창안에 마우스를 위치 시키세요.(Enter)");
            Console.ReadLine();
            mouse_event(WM_LBUTTONDOWN, 0, 0, 0, 0);
            Console.WriteLine("이제마우스를 움직여보세요");
            Console.ReadLine();
             *  */
            //키보드 예제
            const byte AltKey = 18;
           const byte TabKey = 9;
           const int KEYUP = 0x0002;

           int Info=0;
           for (int i = 0; i < 10; i++)
           {
               keybd_event(AltKey, 0, 0, ref Info);   // ALT key 다운
               keybd_event(TabKey, 0, 0, ref Info);   // TAB key 다운
               keybd_event(TabKey, 0, KEYUP, ref Info);  // TAB key 업
               keybd_event(AltKey, 0, KEYUP, ref Info);  // ALT key 업
           }
            //keybd_event(AltKey, 0, 0, ref Info);
            //1. 일종의 hex코드 ascii코드값을 써도 무방 2. 0으로 설정,쓸모없는 인자값
            //3.어떤이벤트를 작동시킬것인지 셋팅 0=keydown
            //4. keyup

        }
    }
}

 

'C#' 카테고리의 다른 글

C# value 타입과 reference 타입  (0) 2012.09.14
C# is와 as 차이점 사용법  (0) 2012.09.14
C# 1.1 Delegate  (0) 2012.09.02
C# 속성 1.1부터 4.0까지 소스로 구분해보쟈~!!  (0) 2012.08.30
C# 트래잭션및 com+트랜잰셕정리  (0) 2012.08.22