Windows Form 실행시에 Message 순서출력
Windows Form 실행시에 Message 순서출력, Windows Form 실행시에 Message 순서출력

namespace WindowsFormsApp1
{
    public partial class Form1 : Form
    {
        private IntPtr tailHandle = IntPtr.Zero;
        int index = 0;
        public Form1()
        {
            InitializeComponent();

            //this.Visible=false;
        }
        private void SendToTail(int index, string data)
        {
            tailHandle = APMApiPublic.FindWindow(null, "DEBUGDEBUGDEBUG");
            if (tailHandle != IntPtr.Zero && data.Length > 0 && APMApiPublic.IsWindow(tailHandle))
            {
                try
                {
                    byte[] dataByte = Encoding.UTF8.GetBytes(data);

                    APMApiPublic.COPYDATASTRUCT copyData = new APMApiPublic.COPYDATASTRUCT();
                    copyData.dwData = (IntPtr)0;
                    copyData.cbData = dataByte.Length;
                    copyData.lpData = Marshal.AllocHGlobal(dataByte.Length);
                    Marshal.Copy(dataByte, 0, copyData.lpData, dataByte.Length);

                    IntPtr sendData = Marshal.AllocHGlobal(Marshal.SizeOf(copyData));
                    Marshal.StructureToPtr(copyData, sendData, true);

                    IntPtr _result = APMApiPublic.SendMessage(tailHandle, APMApiPublic.WM_COPYDATA, (IntPtr)index, sendData);

                    Marshal.FreeHGlobal(copyData.lpData);
                    Marshal.FreeHGlobal(sendData);
                }
                catch (Exception exp)
                {
                    //MessageBox.Show(exp.Message);
                }
            }
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            SendToTail(1, "(Form1_Load)()()()()()[INDEX]:" + index.ToString("0000000"));
            index++;
        }

        private void Form1_Shown(object sender, EventArgs e)
        {
            SendToTail(1, "(Form1_Shown)()()()()()[INDEX]:" + index.ToString("0000000"));
            index++;
        }

        private void Form1_Enter(object sender, EventArgs e)
        {
            SendToTail(1, "(Form1_Enter)()()()()()[INDEX]:" + index.ToString("0000000"));
            index++;
        }

        private void Form1_ForeColorChanged(object sender, EventArgs e)
        {
            SendToTail(1, "(Form1_ForeColorChanged)()()()()()[INDEX]:" + index.ToString("0000000"));
            index++;
        }

        private void Form1_FormClosed(object sender, FormClosedEventArgs e)
        {
            SendToTail(1, "(Form1_FormClosed)()()()()()[INDEX]:" + index.ToString("0000000"));
            index++;
        }

        private void Form1_Activated(object sender, EventArgs e)
        {
            SendToTail(1, "(Form1_Activated)()()()()()[INDEX]:" + index.ToString("0000000"));
            index++;
        }

        private void Form1_Paint(object sender, PaintEventArgs e)
        {
            SendToTail(1, "(Form1_Paint)()()()()()[INDEX]:" + index.ToString("0000000"));
            index++;
        }
    }
}

 

 

 

현재 로칼 컴퓨터의 아이피 알아내기





using System.Net.NetworkInformation;
using System.Net.Sockets;
using System.Diagnostics;
using System;
using System.Linq;
using System.Net;

class Program
{
    public static void Main(string[] args)
    {
        NETNM nmm = new NETNM();
        nmm.RUN();
    }
}
class NETNM
{
    public void RUN()
    {
        var host = Dns.GetHostEntry(Dns.GetHostName());
        foreach (var ip in host.AddressList)
        {
            if (ip.AddressFamily == AddressFamily.InterNetwork)
            {
                Console.WriteLine(ip.ToString());
            }
        }
    }
}

문제

'Dummy' 라는 도스게임이 있다. 이 게임에는 뱀이 나와서 기어다니는데, 사과를 먹으면 뱀 길이가 늘어난다. 뱀이 이리저리 기어다니다가 벽 또는 자기자신의 몸과 부딪히면 게임이 끝난다.

게임은 NxN 정사각 보드위에서 진행되고, 몇몇 칸에는 사과가 놓여져 있다. 보드의 상하좌우 끝에 벽이 있다. 게임이 시작할때 뱀은 맨위 맨좌측에 위치하고 뱀의 길이는 1 이다. 뱀은 처음에 오른쪽을 향한다.

뱀은 매 초마다 이동을 하는데 다음과 같은 규칙을 따른다.

  • 먼저 뱀은 몸길이를 늘려 머리를 다음칸에 위치시킨다.
  • 만약 벽이나 자기자신의 몸과 부딪히면 게임이 끝난다.
  • 만약 이동한 칸에 사과가 있다면, 그 칸에 있던 사과가 없어지고 꼬리는 움직이지 않는다.
  • 만약 이동한 칸에 사과가 없다면, 몸길이를 줄여서 꼬리가 위치한 칸을 비워준다. 즉, 몸길이는 변하지 않는다.

사과의 위치와 뱀의 이동경로가 주어질 때 이 게임이 몇 초에 끝나는지 계산하라.

입력

첫째 줄에 보드의 크기 N이 주어진다. (2 ≤ N ≤ 100) 다음 줄에 사과의 개수 K가 주어진다. (0 ≤ K ≤ 100)

다음 K개의 줄에는 사과의 위치가 주어지는데, 첫 번째 정수는 행, 두 번째 정수는 열 위치를 의미한다. 사과의 위치는 모두 다르며, 맨 위 맨 좌측 (1행 1열) 에는 사과가 없다.

다음 줄에는 뱀의 방향 변환 횟수 L 이 주어진다. (1 ≤ L ≤ 100)

다음 L개의 줄에는 뱀의 방향 변환 정보가 주어지는데, 정수 X와 문자 C로 이루어져 있으며. 게임 시작 시간으로부터 X초가 끝난 뒤에 왼쪽(C가 'L') 또는 오른쪽(C가 'D')로 90도 방향을 회전시킨다는 뜻이다. X는 10,000 이하의 양의 정수이며, 방향 전환 정보는 X가 증가하는 순으로 주어진다.

출력

첫째 줄에 게임이 몇 초에 끝나는지 출력한다.

public string SPACEPADDING(string strText)
{
    string specialToken = "#";
    string mmmText = strText.ToUpper();
    mmmText = mmmText.Replace(" ", specialToken );

    string mmmToken = "";
    for(int iii=20; iii >= 1; iii--)
    {
        mmmToken = "";
        for(int kkk=iii; kkk >= 1; kkk--)
        {
            mmmToken += specialToken ;
        }
        mmmText = mmmText.Replace(mmmToken, " ");
    }
    mmmText = mmmText.Replace( specialToken, " ");

    return mmmText;
}





IT 업계에서는 어떤 언어들이 좋은 대접을 받고 있을까? 5위부터 1위까지를 소개한다.

5위 : C#
2021년에는 4위를 했다. C#와 C/C++은 위에서 언급된 여러 자료들에서 고루 상위권을 차지했다. 
다만 C#의 경우 거의 모든 목록에서 2021년 대비 2023년 순위가 비슷할 정도로 안정적인 모습을 보이고 있다는 것은 사뭇 다르다. 
티오비, PYPL, 레드몽크, 깃허브 모두에서 C#은 5위권 안에 안착했다.

C#은 2000년에 개발된 언어로 C 및 C++와 매우 유사하다. 
다용도로 사용될 수 있는 다목적 언어이며, 실제 다방면에서 사용되고 있다. 
비디오 게임과 웹 애플리케이션 개발, 모바일 애플리케이션 개발 등 분야를 가리지 않는다. 

하지만 MS의 윈도 플랫폼을 위한 애플리케이션 개발에 가장 많이 활용되고 있다.
하지만 MS의 윈도 플랫폼을 위한 애플리케이션 개발에 가장 많이 활용되고 있다.
하지만 MS의 윈도 플랫폼을 위한 애플리케이션 개발에 가장 많이 활용되고 있다.
하지만 MS의 윈도 플랫폼을 위한 애플리케이션 개발에 가장 많이 활용되고 있다.

4위 : C/C++
2021년에는 5위를 차지했었다. 
2년 만에 한 단계 오른 것으로, 전체적으로는 C#과 비슷한 순위를 유지하고 있다는 점도 재미있다. 
C와 C++은 사실 다른 언어이지만 대부분의 프로그래밍 언어 목록에서 묶이는 건, 둘이 매우 유사하기 때문이다. 
또한 둘 다 높은 순위를 기록한다는 점에서도 비슷하다. 
티오비 인덱스에서 C는 2위, C++는 3위에 올랐다. 
인디드닷컴에서는 두 언어가 공동으로 1위에 올랐다.

C와 C++ 모두 다목적 언어다. 
C#과는 비교도 되지 않을 만큼 긴 역사를 가지고 있기도 하다. 
C와 C++은 얼마나 비슷한지, C로 만들어진 프로그램의 99%를 C++로도 돌릴 수 있다. 
그것도 아무런 변경 작업 없이 말이다. 
다만 C는 구조적 프로그래밍 언어로, 클래스를 지원하지 않는다는 차이점을 가지고 있다. 
C++은 객체 지향 언어이기 때문에 클래스를 지원한다.

3위 : 자바(Java)
2021년에도 3위를 기록했다. 
여전히 세계에서 한 손에 꼽히는 인기를 누리고 있는 언어로 남아 있는 것이다. 
위에서 언급한 목록 모두에서 높은 순위(2~3위)를 기록했으나 그 어떤 것도 1위에 자바를 올리지는 않고 있다. 
그 때문에 이번 목록에서도 3위에 그치게 됐다.

자바는 1995년 처음으로 등장한 언어로, 그 때부터 세계에서 가장 인기 높은 언어 중 하나로 계속해서 군림해 왔다. 
다재다능한 언어로, 모든 상황에서 사용이 가능하지만 특히 모바일 앱 개발 분야에서 널리 사용된다. 
안드로이드 애플리케이션들 중 상당수가 자바로 만들어졌다. 
자바는 플랫폼에 대한 의존성이 전혀 없어, 한 번 만들어진 소프트웨어를 다양한 플랫폼에서 실행할 수 있다. 
이것이 자바의 인기 지분을 상당히 차지한다.

2위 : 자바스크립트(JavaScript)
2021년에도 2위를 차지했다. 올해에는 위에서 언급한 7개 목록 중 3개에서 1위를 차지했다. 
그렇기에 이번 목록에서도 거의 1위를 차지할 뻔 했으나 티오비 인덱스에서 7위를 기록하는 바람에 아쉽게 놓쳤다. 
이 말은 1위를 해도 이상하지 않다는 것이고, 1~2위의 차이가 근소하다는 뜻이 된다.

자바스크립트는 스크립팅 언어 중 하나로 프론트엔드 웹 개발에 특히 유용하다. 
웹 브라우저를 가리지 않고 기능한다는 점이 가장 큰 장점이자 강점이다(이를 ‘이식성(portability)’이 뛰어나다고 한다). 
자바스크립트의 또 다른 강점은 배우기 쉽다는 것이다. 
프로그래밍 초보자들이 가장 많이 배우는 언어가 자바스크립트인 데에는 이러한 이유가 있다.

1위 : 파이선(Python)
2021년에도 1위를 기록했고, 여전히 1위를 기록 중인, 현 시대의 대세 언어다. 
파이선이 1위 자리를 놓치지 않은 지 이미 수년이 지나고 있다. 
위에서 언급한 7개 목록 중 파이선을 4위 이하로 둔 것은 하나도 없다. 3개 목록에서 1위를 기록하기도 했다.

다목적, 다기능을 가진 언어가 여러 개 존재하지만 파이선만큼 유연하게 여러 가지 목적으로 활용 가능한 언어는 그리 많지 않다. 
수많은 기능을 수행할 수 있으며, 수많은 모습으로 변신할 수도 있다. 
웹 개발, 자동화, 데이터 분석, 머신러닝, 소프트웨어 실험 등 파이선을 활용할 수 있는 분야에는 그 어떤 제약도 없는 것처럼 보인다. 
특히 어떤 분야에서 많이 사용된다는 것도 딱히 존재하지 않는다. 
배우기도 쉬워 대학 학부에서 초심자용 과목으로 널리 선택되는 편이다.


새롭게 프로젝트를 만들고 “Application Folder” 속성에 “DefaultLocation” 정보가 보이게 됩니다. 이곳의 정보를 수정하면은 변경을 할수 있습니다.

// [ProgramFilesFolder] :: 설치할 경로
// [Manufacturer] :: 필수 유지 위에서 설명함.
// [ProductName] :: 설치할 폴더명(프로젝트 이름과 달리 할수 있음)
[ProgramFilesFolder][Manufacturer]\[ProductName]

저 처름 입력하면은 “C:\Default Company Name\MyPROGRAM” 경로에 디렉토리를 만들고 Installer에 추가한 파일이 설치가 됩니다. 간단하면서도 모르면 그냥 헤메가 되는것 같아서 적어 봅니다.

 Windows에서 사용하는 환경변수를 그대로 사용할수 있어서 글 말미에 참고 삼아서 넣어 놓습니다. 현재 모두 테스트를 해 본것은 아니지만 어느정도 사용이 가능한 부분이여서 참고만 해주시면 됩니다.
%HomeDrive% – 로그인한 계정의 정보가 들어있는 드라이브
%HomePath% – 로그인한 계정의 폴더
%SystemDrive% – 윈도우가 부팅된 드라이브
%SystemRoot% – 부팅된 운영체제가 들어있는 폴더
%ProgramFiles% – 기본 프로그램 설치 폴더
%TEMP%, %TMP% – 임시 파일이 저장되는 폴더
%ComSpec% – 기본 명령 프롬프트 프로그램
%USERDOMAIN% – 로그인한 시스템의 도메인 명
%USERNAME% – 로그인한 계정 이름
%USERPROFILE% – 로그인한 유저의 프로필이 들어있는 폴더명
%ALLUSERPROFILE% – 모든 사용자 프로필이 저장된 폴더
%APPDATA% – 설치된 프로그램의 필요 데이터가 저장된 폴더
%LOGONSERVER% – 로그인한 계정이 접속한 서버명
%Path% – 실행 참조용 폴더 지정 목록
%PathEXT% – 참조용 폴더에서 검색한 파일들의 확장자 목록





using System;
using System.IO;

class Program
{
    public static void Main(string[] args)
    {
        CHKNM nmm = new CHKNM();
        nmm.RUNNING();
    }
}
class CHKNM
{
    int[] BGN_RATR_DT = new int[]
    {
        20211115,
20220515,
20221115,
20230515,
20231115,
    };
    int[] END_RATR_DT = new int[]
    {
        20220514,
20221114,
20230514,
20231114,
20241231,
    };
    double[] RATE_INFO_VALUE = new double[]
    {
        0.0346,
0.0402,
0.0507,
0.0586,
0.0612,
    };

    double GET_RATEINFO(int days)
    {
        double rc = 0;

        for(int ii=0; ii<BGN_RATR_DT.Length; ii++)
{
    if(days >= BGN_RATR_DT[ii] && days <= END_RATR_DT[ii])
    {
        rc = RATE_INFO_VALUE[ii];
break;
    }
}
return rc;         
    }  
    public void RUNNING()
    {
        int days = 0;

        double MIDDLE = 0;
        double FEE_DAY = 0;
        double FEE_SUM = 0;
        double RATEINFO = 0;

        string manualDT = "20211115120000";
        DateTime now = DateTime.ParseExact(manualDT, "yyyyMMddHHmmss", System.Globalization.CultureInfo.InvariantCulture);
       DateTime calcnow;

        while(true)
        {
             calcnow = now.AddDays(days);

             if(calcnow.ToString("yyyyMMdd") == "20211115") MIDDLE += 66048000;
             if(calcnow.ToString("yyyyMMdd") == "20220415") MIDDLE += 66048000;
             if(calcnow.ToString("yyyyMMdd") == "20220915") MIDDLE += 66048000;
             if(calcnow.ToString("yyyyMMdd") == "20230215") MIDDLE += 66048000;
             if(calcnow.ToString("yyyyMMdd") == "20230715") MIDDLE += 66048000;
             if(calcnow.ToString("yyyyMMdd") == "20231215") MIDDLE += 60000000;

             RATEINFO = GET_RATEINFO(Convert.ToInt32(calcnow.ToString("yyyyMMdd")));

             FEE_DAY = MIDDLE * RATEINFO / 365.0;
             FEE_SUM += FEE_DAY;

             Console.WriteLine(calcnow.ToString("yyyyMMdd") + " " + MIDDLE.ToString() + " " + RATEINFO.ToString("000.0000") + " " + 
    FEE_DAY.ToString("000000000.000") + " " + FEE_SUM.ToString("000000000.000"));

             if(calcnow.ToString("yyyyMMdd") == "20240701") break;

            days++;
        }
    }
}



 

1. INIT(BackgroundWorker/Redis Server Connect)
2. Get Music List & BLPUSH( with Redis Key)
3. BackgroundWorker Process(BLPOP with Redis Key)

 

 

UAPDBMQ0010.cs
0.01MB
program.cs
0.00MB
RADIO_K_18_00.cs
0.01MB

 



csc.exe /reference:ServiceStack.Common.dll,
ServiceStack.dll,ServiceStack.Interfaces.dll,
ServiceStack.ServiceInterface.dll,
Newtonsoft.Json.Net20.dll 
/out:MMM.exe 
/recurse:*.cs



+ Recent posts