# SetWindowLong 함수란 무엇인가,mmmm
# SetWindowLong 함수란 무엇인가,mmmm

 


SetWindowLong 
LONG WINAPI SetWindowLong(
_In_HWND hWnd,
_In_int nIndex,
_In_LONG dwNewLong
);

지정된 윈도우의 속성을 변경합니다. 이 함수로 지정된 기능을 32bit 값으로 메모리에 추가합니다.
이 함수는 SetWindowLongPtr 함수로 대체 되었습니다.32bit, 64bit와 호환됩니다. 사용법은 같습니다.
이 함수는 SetWindowPos함수를 호출할때까지 적용되지 않습니다.

hWnd
변경을 원하는 윈도우의 핸들

nIndex
어느 설정을 변경 할 것인지 정해진 상수로 넣어줍니다.
GWL_STYLE - 새로운 윈도우 스타일을 설정합니다.
GWL_EXSTYLE - 새로운 확장 윈도우 스타일을 설정합니다.
GWL_HINSTANCE - 새 응용 프로그램 인스턴스 핸들을 설정합니다.
GWL_ID - 하위 윈도우의 새 식별자를 설정합니다. 창은 최상위 창이 될수없습니다.
GWL_USERDATA - 창과 관련된 사용자 데이터를 설정합니다. 이 값은 창을 만든 응용프로그램에서 사용하기 위한 값입니다. 초기 값은 0입니다.
GWL_WNDPROC - 윈도우 프로시저의 새주소를 설정합니다. 창이 호출한 스레도와 동일한 프로세스에 속하지 않으면 이 값은 변경 할수 없습니다.


Ex)
public static extern Int32 GetWindowLong(IntPtr hWnd, Int32 Offset);
[DllImport("user32.dll")]
public static extern Int32 SetWindowLong(IntPtr hWnd, Int32 Offset, Int32 newLong);
[DllImport("user32.dll")]

WindowStyle myStyle = (WindowStyle)style;
myStyle = myStyle & ~WindowStyle.WS_SYSMENU;
style = SetWindowLong(childForm.Handle, GWL_STYLE, (int)myStyle);

#함수를 하나만 사용해서, 두개의 함수를 구현하는 방법(오버라이딩의 진화,ㅡ,ㅡㅡ)
#함수를 하나만 사용해서, 두개의 함수를 구현하는 방법(오버라이딩의 진화,ㅡ,ㅡㅡ)
#함수를 하나만 사용해서, 두개의 함수를 구현하는 방법(오버라이딩의 진화,ㅡ,ㅡㅡ)


using System;

class Program
{
    public static void Main(string[] args)
    {
        checkparameters nm = new checkparameters();
nm.run();

checkparametersdown nmm = new checkparametersdown();
nmm.run();
    }
}

//함수를 하나만 사용해서, 두개의 함수를 구현하는 방법
//함수를 하나만 사용해서, 두개의 함수를 구현하는 방법
class checkparameters
{
    void basefrm(string portno, string apmLiteRedismanager, string apmLiteRedismanagers = null )
    {
        Console.WriteLine(portno + "/" + apmLiteRedismanager + "/" + apmLiteRedismanagers);
    }
    public void run()
    {
        basefrm("1010", "1010");
basefrm("1010", "1010", "1010");
    }
}
class checkparametersdown
{
    void basefrm(string portno, string apmLiteRedismanager, string apmLiteRedismanagers)
    {
        Console.WriteLine(portno + "/" + apmLiteRedismanager + "/" + apmLiteRedismanagers);
    }
    void basefrm(string portno, string apmLiteRedismanager)
    {
        Console.WriteLine(portno + "/" + apmLiteRedismanager);
    }
    public void run()
    {
        basefrm("1010", "1010");
basefrm("1010", "1010", "1010");
    }
}



[Git] push 명령어로 local 변경 사항 원격 저장소에 반영하기
[Git] push 명령어로 local 변경 사항 원격 저장소에 반영하기
[Git] push 명령어로 local 변경 사항 원격 저장소에 반영하기
[Git] push 명령어로 local 변경 사항 원격 저장소에 반영하기
[Git] push 명령어로 local 변경 사항 원격 저장소에 반영하기







아래는 해당 프로젝트 소스디렉토리로 이동해서 수정된 부분을 반영하는 방법이다.

>cd ~/source/repository/Final/
>git branch -M BRANCH_PROJECT_NAME
>git add .
>git commit -m "query 2024.01.25 history commit"
>git push -u origin BRANCH_PROJECT_NAME


- git commit과 push의 차이점 이해하기
- git commit과 push의 차이점 이해하기
- git commit과 push의 차이점 이해하기

그렇다면 git commit과 push의 차이는 뭘까?
그렇다면 git commit과 push의 차이는 뭘까?
그렇다면 git commit과 push의 차이는 뭘까?

git commit만으로는 왜 원격 저장소에 반영이 안될까?
git commit만으로는 왜 원격 저장소에 반영이 안될까?
git commit만으로는 왜 원격 저장소에 반영이 안될까?

우리가 데이터를 변경한 후 commit을 하면 그 내역은 로컬 저장소에 반영이 된다.
우리가 데이터를 변경한 후 commit을 하면 그 내역은 로컬 저장소에 반영이 된다.
우리가 데이터를 변경한 후 commit을 하면 그 내역은 로컬 저장소에 반영이 된다.
즉, 내 pc 내의 저장소에만 반영이 된 것이다.
즉, 내 pc 내의 저장소에만 반영이 된 것이다.
즉, 내 pc 내의 저장소에만 반영이 된 것이다.

로컬저장소에 반영된 변경 사항을 원격에도 반영하기 위한 도구가 push다.
로컬저장소에 반영된 변경 사항을 원격에도 반영하기 위한 도구가 push다.
로컬저장소에 반영된 변경 사항을 원격에도 반영하기 위한 도구가 push다.

commit한 내역을 push하게 되면, 이제 원격 저장소에도 그 내역이 업데이트 되는 것이다.
commit한 내역을 push하게 되면, 이제 원격 저장소에도 그 내역이 업데이트 되는 것이다.
commit한 내역을 push하게 되면, 이제 원격 저장소에도 그 내역이 업데이트 되는 것이다.

따라서, commit은 내 pc 내의 작업이 때문에 크게 위험하지 않다.
따라서, commit은 내 pc 내의 작업이 때문에 크게 위험하지 않다.
따라서, commit은 내 pc 내의 작업이 때문에 크게 위험하지 않다.

하지만 push는 원격 저장소, 즉 공동으로 작업하는 프로젝트에 (개인 프로젝트일 수도 있지만)
하지만 push는 원격 저장소, 즉 공동으로 작업하는 프로젝트에 (개인 프로젝트일 수도 있지만)
하지만 push는 원격 저장소, 즉 공동으로 작업하는 프로젝트에 (개인 프로젝트일 수도 있지만)

그 내역이 반영되는 것이기 때문에 신중하게 해야한다.
그 내역이 반영되는 것이기 때문에 신중하게 해야한다.
그 내역이 반영되는 것이기 때문에 신중하게 해야한다.





 

"파일"이라는 한글을 여러타입으로 저장후에 c언어에서 읽어서 출력해보기
"파일"이라는 한글을 여러타입으로 저장후에 c언어에서 읽어서 출력해보기
"파일"이라는 한글을 여러타입으로 저장후에 c언어에서 읽어서 출력해보기


c언어에서 언어셋을 다루는일은 어려운일이다. 특히 한글을 다루는 일은 더더욱 그렇다.
아래는 여러가지 방식으로 저장되어진 "파일"이라는 한글을 바이트단위로 출력해본다.

 

 

#include <stdio.h>
#include <string.h>
 
int main(int argc, char *argv[])
{
    int kk;
    char tmp[1024];
    FILE *fp = NULL;

    if(argc != 2) return(-1);

    if(( fp = fopen(argv[1], "rt")) == NULL) return(-1);

    memset(tmp, 0x00, sizeof(tmp));

    while(1)
    {
        memset(tmp, 0x00, sizeof(tmp));
        if(fgets(tmp, sizeof(tmp), fp) == NULL) break;

        for(kk=0; kk<sizeof(tmp); kk++)
        {
            if(tmp[kk]==0x00) break;
            printf("[%d],", tmp[kk]);
        }
        printf("\n");
        printf("%s", tmp);
        printf("\n");
    }

    if(fp != NULL) fclose(fp);
    return(0);
}

# Windows Console에 Sin,Cos 그래프 표시

 

 

 



using System;

class Program
{
    public static void Main(string[] args)
    {
        CHKNM nmm = new CHKNM();
nmm.RUN();
    }
}
class CHKNM
{
    //Console Width, Heigth
    int width = 0;
    int height = 0;

    //Math.Cos,Math.Sin's Value to mapping Console Screen Size
    double mapx = 0.0;
    double mapy = 0.0;

    int toggle = 0;
    int nextxpos = 0;

    int end_degree_value = 360 * 2;

    public void RUN()
    {
width  = Console.WindowWidth;
        height = Console.WindowHeight;

        //Dynamic array index possible
int[,] screenposition = new int[width,height];

for(int ii=0; ii<height; ii++)
for(int kk=0; kk<width; kk++)
{
    screenposition[kk,ii]=0;
}

        for(int degree = 1; degree < end_degree_value; degree++)
{
    double radian = Math.PI * degree / 180.0;
    double funcy = Math.Cos(radian) + 1.0;

    mapy = height * 0.99 / 4.0;
    mapx = Convert.ToDouble(width) / Convert.ToDouble(end_degree_value);

    int ypos = Convert.ToInt32(funcy * mapy);
    int xpos = Convert.ToInt32(degree * mapx);

    if(ypos == height) continue;
    if(xpos == width) continue;

            if(toggle == 0)
    {
        toggle = 100;
nextxpos = xpos;
screenposition[xpos,ypos]=1;
    }
    else
    {
        if(nextxpos == xpos) continue;
else
{
    screenposition[xpos,ypos]=1;
    nextxpos = xpos;
}
    }
}
#if(true)
        string screenTxt = "";
for(int ii=0; ii<height/2; ii++)
{
    for(int kk=0; kk<width; kk++)
    {
        if(screenposition[kk,ii] == 1) screenTxt += "*";
else screenTxt += " ";
    }
    screenTxt += "\n";
}
Console.WriteLine(screenTxt);
#endif
    }
}









# visual studio offline 2019->2022 설치

# visual studio offline 2019가 이미 설치되어져 있다.
# visual studio offline 2022를 동시에 설치한다.

- 현재 장비에 인터넷은 되지 않는다. 통합설치는 불가능하고, 개별설치로 2019를 설치해서 사용중이다.
- 어찌 어찌 visual studio offline 2019 버젼을 설치해서 소스코드를 빌드해서 사용중이다.
- 이제 visual studio offline 2022버젼을 설치해야 한다. 물론 이것도 개별설치로 진행해야 할것이다. 통합설치는 불가능.



    - (참고문헌의 예)
    - (99.9) Visual Studio(2019) 설치 관리자를 엽니다. 제품 카드에서 기타 단추를 선택한 후 구성 내보내기를 선택합니다.

- Visual studio offline 2022버젼 binary 폴더로 이동한다.
- (99.9)의 내용을 d:\tmp\memo\myconfig.vsconfig로 저장한다.
- 아래의 shell을 실행한다.
- vs_setup.exe --config d:\tmp\memo\myconfig.vsconfig
- 실행결과 (?)
- InstallerProjects2022.visx 확장프로그램 더블클릭시에, 자동실행
- Visual Studio 2022에 확장 이식가능.
- Visual Studio 2019는 InstallerProjects.visx로 해야한다.
- 실행결과 (?)

호환적인부분에서 문제점이 발견되어진다. 해결방법은(?)


 

Visual studio 2019 Installer 내보내기결과)

{
  "version": "1.0",
  "components": [
    "Microsoft.VisualStudio.Component.CoreEditor",
    "Microsoft.VisualStudio.Workload.CoreEditor",
    "Microsoft.VisualStudio.Component.NuGet",
    "Microsoft.VisualStudio.Component.Roslyn.Compiler",
    "Microsoft.VisualStudio.Component.Roslyn.LanguageServices",
    "Microsoft.Net.Component.4.8.SDK",
    "Microsoft.Net.Component.4.7.2.TargetingPack",
    "Microsoft.Net.ComponentGroup.DevelopmentPrerequisites",
    "Microsoft.Component.MSBuild",
    "Microsoft.VisualStudio.Component.TextTemplating",
    "Microsoft.Net.Component.4.TargetingPack",   -> 2022에 적용되지 않음(?)
    "Microsoft.Net.Component.4.6.TargetingPack",
    "Microsoft.VisualStudio.Component.DiagnosticTools",
    "Microsoft.VisualStudio.Component.AppInsights.Tools",
    "Microsoft.VisualStudio.Component.IntelliCode",
    "Microsoft.Net.Component.4.8.TargetingPack",
    "Microsoft.VisualStudio.Component.VSSDK",
    "Microsoft.VisualStudio.ComponentGroup.VisualStudioExtension.Prerequisites",
    "Microsoft.VisualStudio.Component.DslTools",
    "Microsoft.Component.CodeAnalysis.SDK",
    "Microsoft.VisualStudio.Workload.VisualStudioExtension",
    "Microsoft.Component.ClickOnce"
  ]
}

 

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());
            }
        }
    }
}

+ Recent posts