레이블이 Application인 게시물을 표시합니다. 모든 게시물 표시
레이블이 Application인 게시물을 표시합니다. 모든 게시물 표시

2022년 2월 20일 일요일

닷넷 동영상 C# 윈폼, Application 클래스이벤트 메시지 필터링, ALT+F4 막기VS 2022

  닷넷 동영상 C# 윈폼, Application 클래스이벤트 메시지 필터링, ALT+F4 막기VS 2022


https://www.youtube.com/watch?v=qIPU85yAlzc&list=PLxU-iZCqT52CtVOhmaR6Nd-65M163g9u-&index=6 

http://ojc.asia/bbs/board.php?bo_table=LecCsharp&wr_id=423 

https://www.youtube.com/watch?v=wNo2hF0uY4U&list=PLxU-iZCqT52CtVOhmaR6Nd-65M163g9u-&index=5 


[닷넷동영상]C# 윈폼, Application 클래스 이벤트 메시지 필터링, ALT+F4 막기, KeyDown

[닷넷동영상]C# 윈폼, Application 클래스 이벤트 메시지 필터링, ALT+F4 막기, KeyDown윈폼, Application 클래스이벤트 메시지 필터링, ALT+F4 막기VS 2022C# 윈폼(Application 클래스 – 메시지 필터링)C# 윈도우 프

ojc.asia


https://www.youtube.com/watch?v=czW1j0bIR4M&list=PLxU-iZCqT52CtVOhmaR6Nd-65M163g9u-&index=7 


- YouTube


www.youtube.com


[닷넷동영상]C# 윈폼, Application 클래스 이벤트 메시지 필터링, ALT+F4 막기, KeyDown

[닷넷동영상]C# 윈폼, Application 클래스 이벤트 메시지 필터링, ALT+F4 막기, KeyDown윈폼, Application 클래스이벤트 메시지 필터링, ALT+F4 막기VS 2022C# 윈폼(Application 클래스 – 메시지 필터링)C# 윈도우 프

ojc.asia

윈폼, Application 클래스

이벤트 메시지 필터링, ALT+F4 막기


VS 2022






C# 윈폼(Application 클래스 – 메시지 필터링)


C# 윈도우 프로그램은 이벤트(Event, 사건)에 반응해서 코드가 실행되는 이벤트 기반으로 만들어지며 이러한 이벤트는 사용자가 일으키는것이 아니라 윈도우 운영체제가 일으키는 것이다.


사용자가 키보드나 마우스를 제어하면 인터럽트가 발생되고 이를 운영체제가 받아 들이는 것이다.  운영체제는 이 인터럽트를 바탕으로 윈도우 메시지를 만든 뒤 이벤트를 받아야 하는 응용프로그램에 보내는 것이다.


윈도우 메시지는 종류가 다양하다. 윈도우 응용프로그램은 마우스 이동이나 클릭, 키보드 입력처럼 미리 등록되어 있는 메시지를 받지만 다른 응용프로그램은 자체적으로 정의한 메시지도 받을 수 있다.


Application 클래스는 응용프로그램이 받고 있는 수많은 메시지 중 관심 있는 메시지만 걸러낼 수 있는 메시지 필터링 기능이 있다. 예를 들어 윈도우 응용프로그램에서 ALT+F4를 눌러 윈도우가 종료되는 것을 막고 싶다면 필터링 기능을 이용하여 이를 차단하는 것도 가능하다.


일반적으로 윈도우 메시지는 식별번호가 붙어 있는데 WM_LBUTTONDOWN 메시지 ID가 0x201,  WM_LBUTTONUP 메시지 ID가 0x202로 정의되어 있다. 



public const int WM_KEYDOWN = 0x100;
public const int WM_KEYUP = 0x101;
public const int WM_COMMAND = 0x111;
public const int WM_LBUTTONDOWN = 0x201;
public const int WM_LBUTTONUP = 0x202;
public const int WM_LBUTTONDBLCLK = 0x203;
public const int WM_RBUTTONDOWN = 0x204;
public const int WM_RBUTTONUP = 0x205;
public const int WM_RBUTTONDBLCLK = 0x206;

  

Application 클래스는 특정 ID를 갖는 메시지를 필터에 등록해 두었다가 응용프로그램에 메시지가 전달되면 해당 필터를 동작시키고, 메시지가 필터링 되지 않았다면 해당 메시지를 폼이나 컨트롤로 보내 이벤트를 발생시킨다.


Application 클래스의 AddMessageFilter() 메소드는 응용프로그램에 메시지 필터를 등록한다. 이 메소드의 매개변수로 IMessageFilter를 구현한 클래스의 인스턴스를 매개변수로 받으며 IMessageFilter의 PreFilterMessage를 구현해야 한다.


public class MessageFilter : IMessageFilter {

public bool PreFilterMessage(ref Message m) {   //m.Msg는 메시지 ID

                     //마우스 왼쪽, 오른쪽, 가운데 버튼동작, 마우스 휠굴림 메시지

                     //

              if (m.Msg >= 0x200 && m.Msg <= 0x20E) {

Console.WriteLine(“메시지 : “ + m.Msg);

return true; //메시지처리했으니 더 관심가질 필요없다.

}

return false;   //메시지를 건드리지 않았으니 응용프로그램에서 처리해라

}

}


위와 같이 메시지 필터를 구현했다면 AddMessageFilter() 메소드를 호출해서 등록하면 된다.


Application.AddMessageFilter( new MessageFilter());


[실습예제1 : 폼 클릭시 윈도우 종료, ALT+ F4 : 필터링]

using System;

using System.Windows.Forms;


namespace ConsoleApplication9

{

    class MyMessageFilter : IMessageFilter

    {

        public bool PreFilterMessage(ref Message m)

        {

            //마우스 클릭시 필터링 시킴  

            if (m.Msg == 0x201)

            {

                Console.WriteLine("마우스 클릭 필터링됨...");

                //필터에서 처리했으니 응용프로그램에서 처리안해도된다는 의미

                //Form에 걸려 있는 Click 이벤트 동작안함.즉 윈도우가 종료되지않는다

                //이 부분을 false로 바꾸면 Form에 걸려 있는 Click 이벤트 동작

                return false;

            }


            return false;

        }

    }


    class Program : Form

    {

        static void Main(string[] args)

        {

            Application.AddMessageFilter(new MyMessageFilter());

            Program p = new Program();

            p.Click += new EventHandler(p.Form_Click);

            p.KeyDown += new KeyEventHandler(p.Form_KeyDown);

            Console.WriteLine("윈도우 로딩...");

            Application.Run(p);

            Console.WriteLine("Application.Exit  이후...");

            Console.ReadLine();

        }


        void Form_Click(object sender, EventArgs e)

        {

            Console.WriteLine("마우스 클릭 이벤트 발생...");

            Application.Exit();

        }


        void Form_KeyDown(object sender, KeyEventArgs e)

        {

            if (e.KeyData == (Keys.Alt | Keys.F4))

            {

                Console.WriteLine("ALT+F4 Filtering됨.");

                e.Handled = true;

            }

        }

    }

}


ALT+F4키를 막지 위해 메시지 필터링 기능을 사용하려면 PreFilterMessage 메소드에 아래 내용을 추가하자.


  

//F10 키를 누르거나, Alt 키를 누른 다음 다른 키를 누를 때 WM_SYSKEYDOWN 메시지가 활성 창으로 전송됩니다.

//wParam : 누를 키의 가상 키 코드

//lParam : 반복 횟수, 검사 코드, 확장 키 플래그, 컨텍스트 코드, 이전 키 상태 플래그 및 전환 상태 플래그.

public bool PreFilterMessage(ref Message m)

{

const int WM_SYSKEYDOWN = 0x0104;

if (m.Msg == WM_SYSKEYDOWN)

{

         //ALT키가 눌러지면 29번째 비트가 1(비트는 0 ~31)

//0010 0000 0000 0000 0000 0000 0000 0000

bool alt = ((int)m.LParam & 0x20000000) != 0;

if (alt && (m.WParam == new IntPtr((int)Keys.F4)))

{

Console.WriteLine("ALT+F4 Filtering됨.");

return true; // alt+f4 필터링, 이벤트를 처리했으니 뒤쪽으로 넘기지 않는다.

}

}


return false;

}







#윈폼, #Application, #Application클래스  #메시지필터링, #ALTF4 막기, #KeyDown, #Message필터링, #시샵교육,#닷넷교육,#닷넷동영상, #IMessageFilter, 윈폼, Application, Application클래스  메시지필터링, ALTF4 막기, KeyDown, Message필터링, 시샵교육,닷넷교육,닷넷동영상, IMessageFilter

2022년 2월 19일 토요일

C# 동영상, 윈폼, HelloWorld 콘솔프로그램에서 윈폼, 윈도우 띄우기

 C# 동영상, 윈폼, HelloWorld  콘솔프로그램에서 윈폼, 윈도우 띄우기

http://ojc.asia/bbs/board.php?bo_table=LecCsharp&wr_id=422 


C# 동영상, 윈폼, HelloWorld 콘솔프로그램에서 윈폼, 윈도우 띄우기

C# 동영상, 윈폼, HelloWorld 콘솔프로그램에서 윈폼, 윈도우 띄우기윈폼, HelloWorld콘솔프로그램에서 윈폼 띄우기VS 2022C# 윈폼(Application 클래스)C#.NET 프레임워크에서는 간단히 윈도우를 만들 수 있도

ojc.asia






윈폼, HelloWorld

콘솔프로그램에서 윈폼 띄우기


VS 2022






C# 윈폼(Application 클래스)


C#.NET 프레임워크에서는 간단히 윈도우를 만들 수 있도록 Winform 클래스 라이브러리를 제공하며 다음과 같은 방법으로 윈도우를 생성한다. 


  • System.Windows.Forms.Form 클래스에서 파생된 윈도우폼 클래스 선언
  • 위에서 만든 클래스의 인스턴스를 System.Windows.Forms.Application.Run( Form을 상속받은 클래스의 객체 ) 메소드에 매개변수로 넘겨 호출하면서 윈폼 응용 프로그램을 시작한다.


Application 클래스의 기능은 윈도우 응용프로그램을 시작하고 종료시키고, 윈도우 메시지를 처리하는 일을 한다.


응용프로그램의 시작은 Application.Run(), 응용프로그램의 종료는 Application.Exit()인데 Exit() 메소드가 호출되었다고 바로 종료되는 것은 아니다. 이 메소드가 하는 일은 응용프로그램의 모든 윈도우를 닫은 후 Run() 메소드가 Return되도록 하는 것이므로 Run() 메소드 뒷부분에 프로그램이 종료되면서 할 일이 있다면 해당 코드를 기술하면 된다.


[별도 이벤트처리 메소드를 만들고 델리게이트의 인자로]


콘솔 프로젝트에서 System.Windows.Forms를 참조 추가해야 한다.


using System;

using System.Windows.Forms;


class Program : Form

    {

        static void Main(string[] args)

        {

            Program form = new Program();

            form.Click += new EventHandler(form.Form_Click);

            Console.WriteLine("윈도우 시작...");

            Application.Run(form);

            Console.WriteLine("윈도우 종료...");

        }


        void Form_Click(object sender, EventArgs e)

        {

            Console.WriteLine("폼클릭 이벤트...");

            Application.Exit();

        }

    }



[람다식을 이용한 무명함수로 이벤트 처리]


using System;

using System.Windows.Forms;


namespace ConsoleApplication9

{

    class Program : Form    {

        static void Main(string[] args)        {

            Program form = new Program();

            form.Click += new EventHandler(

                   (sender, eventArgs) =>

                   {

                      Console.WriteLine("폼클릭 이벤트...");

                      Application.Exit();

                   });

            Console.WriteLine("윈도우 시작...");

            Application.Run(form);

            Console.WriteLine("윈도우 종료...");            

        }

    }

}






#윈폼, #윈폼HelloWorld, #콘솔프로그램, #Application, #Winform, #Application.Run, #닷넷교육, #닷넷동영상, #시샵동영상, 윈폼, 윈폼HelloWorld, 콘솔프로그램, Application, Winform, Application.Run, 닷넷교육, 닷넷동영상, 시샵동영상, C#교육, C#학원

(C#교육동영상)C# ADO.NET 실습 ODP.NET/ODAC 설치 오라클 함수 호출 실습, C#학원, WPF학원, 닷넷학원, 자바학원

  (C#교육동영상)C# ADO.NET 실습  ODP.NET/ODAC 설치  오라클 함수 호출 실습, C#학원, WPF학원, 닷넷학원, 자바학원 https://www.youtube.com/watch?v=qIPU85yAlzc&list=PLxU-i...