c#

  • c#으로 키움증권 영웅문 글로벌 제어하기 – 종목 변경

    영웅문 글로벌은 4와 비슷해 보이지만 다르게 작동한다. wm_settext와 wm_keydown을 연달아 보내면 전자만 작동하고 후자는 작동하지 않는다. 4와 달리 종목 코드를 입력하는 edit에 wm_settext로 문자열을 보내 입력하는 거로는 충분하지 않다. 이 에디트는 표준 윈도우즈 컨트롤이 아니다. 키를 하나씩 눌러 입력해 보면 각 동작에 드롭 다운 리스트가 작동하는 걸 확인할 수 있다. 이렇게 드롭 다운 리스트가 작동하는…

  • c#으로 키움증권 영웅문 4 제어하기 – 종목 변경

    영웅문 4의 0101 현재 가격창을 띄워 놓고 이 창의 종목 코드 입력 에디트에 종목 코드를 입력한 뒤 엔터를 누른 거처럼 작동하게 하는 방법이다. 이 창에서 종목을 바꾸면 다른 창들도 바뀐다. 현재 가격창을 띄워만 놓으면 되고 눈에 보이지는 않아도 된다. 핸들에 대한 기본적인 지식은 있어야 한다.

  • c# 윈도우즈 컨트롤 핸들 제어

    spy++로 객체의 핸들 찾기 아래의 방법으로 대상 컨트롤을 트리 안에서 확인한다. 핸들 액세스 스파이++로 확인한 핸들은 수시로 바뀌므로 핸들은 절대적인 위치로 액세스해야 한다. win32 api인 FindWindowA와 FindWindowExA를 이용한다. 제어 대상 컨트롤이 표준 윈도우즈 컨트롤이면 역시 win32 api인 SendMessage를 이용하여 제어할 수 있지만 microsoft foundation classmfc로 만든 AfxWnd~와 같은 건 될 수도 있고 안 될 수도…

  • .net c# FlowLayoutPanel 자식 컨트롤 늘리기

    FlowLayoutPanel에 자식 컨트롤을 두고 dock를 fill로 해도 FlowLayoutPanel의 폭이나 높이만큼 늘어나지 않는다. 정상이다. 자식 컨트롤이 채우는 폭이나 높이는 FlowLayoutPanel의 그것이 아니라 자식 컨트롤들 가운데 폭이나 높이가 제일 넓거나 높은 것에 맞춰진다. 따라서 최소한 하나는 dock를 none으로 하고 이거의 크기를 바꾸면 이거에 따라서 dock가 fill인 다른 컨트롤들이 따라 변한다. … for vertical flow directions, the FlowLayoutPanel…

  • .net c# – 동기, 비동기

    synchronous와 asynchronous, 동기와 비동기는 각 단어가 서로 반대되는 의미를 동시에 갖고 있어서 이해하기 피곤하다. synchronous는 ‘동시에’라는 뜻이고 同期라고 번역한다. 1. At the same time, at the same frequency.wiktionary 그런데 이게 컴퓨터 프로그래밍을 할 때에는 반대의 뜻으로 쓰인다. 여러 작업들이 동시에 처리되는 게 아니라 중간에 오래 걸리는 작업이 있으면 기다렸다가 순서대로 처리한다는 의미다. 2. (computing, of…

  • .net c# – T, TResult

    .네트에서 T와 TResult는 Func<T>, List<T>, Task<TResult> 등의 형태로 흔히 볼 수 있다. ‘T’는 type을 뜻한다. T는 입력하는 타입으로서 들어가는 값이고 TResult는 출력하는 타입으로서 결과값이다. async 메떠드는 문자열을 반환할 수 없어서 위와 같이 문자열을 결과값으로 같는 task로 반환해야 한다. 문자열 결과를 비동기로 처리한다는 뜻이다. 그냥 문자열로 받아서 쓰면 된다.

  • [c#] p/invoke – c++ 코드를 c#에서 읽기

    platform invocation services를 줄여서 p/invoke라 한다. 매니지드 코드에서 언매니지드 코드의 구조체 등에 액세스하는 기능이다. 예를 들면 c++로 만든 라이브러리를 c#에서 불러다 쓰는 거다. 별 거 아닌데 이름만 어렵다. 아래의 예제처럼 클래스 안에서 써야 한다.

  • c# 배열은 레퍼런스 타입이다

    배열은 레퍼런스 타입이라서 매개변수로 넘길 때 ref 키워드를 쓰지 않아도 된다. 그러나 이것은 배열을 초기화한 뒤에만 가능하다. 아래의 예제에서는 클래스만 초기화되고 필드인 배열은 초기화되지 않은 상태라서 널로 넘어가며 레퍼런스로서의 기능을 하지 못한다. 즉 주소가 없는 상태이다. 따라서 ref를 붙여 줘야 한다.