프로그래밍44 세션 유휴 타이머 클라이언트 개발 시에 보통 세션 유휴 시간을 지정하여 시간 만료 시 프로그램을 종료하는 기능을 많이 구현한다. 보통 키보드 마우 스 입력이 일정 시간 없거나, 해당 프로그램의 포커스가 일정 시간 벗어난 경우를 조건으로 사용한다. 키보드 마우스의 입력 같은 경우는 키보드,마우스 메시지를 후킹 하여 하는방법도 있지만 대부분의 보안프로그램이 차단하기 때문에 "마지막 키보드 입력 시간을 비교" 하는 방식으로 구현 했고, 프로그램 포커스는 현재 활성화된 프로스세 핸들과 프로세스 아이디를 찾아 비교하는 식으로 구현했다.마지막 키보드 입력 시간 검사 및 프로세스 비활성화 확인 using System;using System.Collections.Generic;using System.ComponentModel;using.. 2025. 4. 10. Printer 통제 방식(1) 사내 보안솔루션 운영 중 워터마크 또는 출력물 통제 시 버그 가 자주 발생 해 원인을 분석하고, 해당 기능에 대한 이해도를 높이기 위해 보안 솔루션이 Printer 통제하는 방식에 대해 공부 하고 간단한 프로그램 제작을 해보려고 한다. Printer 통제먼저 프린터 출력 동작 방법에 대해 정리 후, 프린터 통제 방식 3가지 프린터 스풀러 모니터링, 프린터 드라이버 모니터링,애플리케이션 모니터링에 대해 예제 코드를 작성하려고한다. 프린터 출력 동작 기본적인 동작은 아래와 같이 동작한다. 1. 애플리케이션 출력시작2. 출력 데이터 GDI 데이터 변환3. GDI 객체는 Emf 형식의 특정 출력 형태 데이터 생성후 프린터 드라이버에 전달4. 프린터 드라이버는 PS 또는 PCL 형식에 맞게 변환5. 변환된 .. 2024. 9. 28. UTC 변경 시 시간 처리 프로그램 내에서 컴퓨터의 시간으로 파일을 작성하거나, 로그를 기록한다. 사용자가 컴퓨터 시간을 수동적으로 변경하거나 UTC를 바꾸면 어떻게 동작 할까? 시간 변경 이 코드를 실행 하고 컴퓨터 시간을 바꿔보자. static void Main() { while (true) { Thread.Sleep(1000); Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd-HH-mm")); } } 정상적으로 시간이 바뀐 것을 확인 할 수 있다. UTC 변경 코드를 실행 한 상태로 UTC를 사모아(UTC + 13:00) 으로 변경 하였다 컴퓨터 시간은 변경 되었으나, 프로그램에서 출력.. 2024. 5. 17. ZeroMq (1) C# 현재 담당하고 있는 제품이 ZeroMq로 통신하기 때문에 해당 내용을 공부하고 기록한다. ZeroMq ? Zeromq는 분산/동시성 응용 프로그램에서 사용하도록 개발된 고성능 메시지 라이브러리 이다. Mq는 프로그램 인스턴스 또는 프로세스가 데이터를 서로 교환할때 사용하는 방법이다. 이때 데이터 교환시 시스템이 관리하는 메시지 큐를 이용한다. ZeroMq는 메시지 큐를 제공하지만 메시지 지향 미들웨어와 달리 전용 메시지 브로커 없이 동작이 가능하다. 메시지 지향 미들웨어란 비동기 메시지를 사용하는 다른 응용 프로그램 사이에서의 데이터 송수신을 이야기한다. 정리하자면 프로그램을 통하여 사용할수 있는 단순한 메시징 라이브러리 이다. 기본적으로 메시지 시스템을 빠르게 만들수 있는 소켓 인터페이스를 제공한다. .. 2023. 4. 20. C# Dynamic var 를 활용해서 개발을 하다보니 실제로 클래스의 멤버필드를 알고 있어도 알고 있어도 컴파일러에 의해 값이 결정되니 다른곳에서 접근할때 정의되어 있지않다고 빌드 전 부터 에러가 발생하였다. 그래서 인터넷을 검색 하다보니 Dynamic 이라는 키워드에 대해 알게되어 해당 내용을 정리해두고 기록해둔다.Dynamic ? 프로그래밍 언어는, 타입을 구분하는 방식으로, 컴파일시 Tpye을 확인하는 Static Language 와 런타임시 Type을 판별하는 Dynamic Language로 구분 할 수 있다. C# 기본적으로 Static Language 속하지만 C# 4.0 에서는 DLR 를 추 가함으로써 Dynamic Language 가 갖는 기능을 언어와 Framework에 수용하였다. dynamic 키워드.. 2023. 4. 20. C# Anonymous types 오늘 API 반환 부분을 보고 있었는데 return new { a = false, result = ""} 코드가 있어서 검색해보니Anonymous types 문법이고 다양하게 사용한다고 나와있어 해당 내용을 공부하고 정리 해둔다. Anonymous types ?한국어로 익명 타입이라고 이야기하며, C# 3.0 도입된 문법으로 클래스를 미리 정의하지 않고 사용 할 수 있습니다. 특징으로는 읽기전용 (GET만 지원) , 변수에 할당할때에는 var 타입을 사용하며, new { } 방식으로 사용합니다. 익명 타입으로 변수를 선언하는 경우 변수 초기화 값을 기반으로 컴파일러가 변수의 타입을 자동으로 결정합니다. 예 var str = new {resason = "tktktktk", success =true} .. 2023. 4. 19. Winform 최소화 전 사이즈 저장 윈도우 최소화 상태에서 닫기 버튼을 눌러 종료 후 재실행시 기존 윈도우 창 사이즈가 아닌 기본 설정된 크기로 실행되는것을 확인했는데 분석을 해보니 종료시에만 해당 크기를 저장하는 로직으로 되어있었다. 로직 자체는 문제가 없으나 최소화 상태에서 크기와 위치를 구하면 위치가 - 값으로 나오는것을 확인 할 수 있다. 값을 토대로 그릴수 없으니 기본 설정된 크기로 나오는 것이였다. 해당 내용은 나중에 개선이 필요 할 수 있기에 간단한 샘플을 만들고 기록 해둔다. PS기록을 해두고 집에와서 찾아보니 Resize 이벤트시 해당 windowstate 가 최소화 된건지 확인하여 사이즈를 저장 할때는 이미 사이즈가 최소화된 상황의 크기라 최소화되기전에 크기가 아니다. ResizeBegin 이벤트는 사용자가 사.. 2023. 4. 18. 제네릭 (2) 1편에 이어서 제네릭의 타입제한 및 BCL에 적용된 제네릭에 대해서 정리하겠다. 시작 하기전에 앞서 앞서 배운 내용을 정리하자면, 제네릭이 도입 되기전에는 Object 형식의 배열 형태로 다양한 타입을 입력 받아 관리 하였으나, 박싱/언박싱 문제로 비효율적인 메모리 사용 문제가 발생하였고 이 문제를 해결하기위해 다양한 타입의 함수를 작성하여 처리하였으나, 중복의 문제가 발생하였다. 이러한 문제를 해결하기 위한 방법으로 제네릭을 사용한다. 제네릭 타입의로 지정 시 CLR은 JIT 컴파일 시에 클래스가 타입에 따라 정의 될때마다 T에 대응되는 타입을 대체해서 확장한다. 즉 매개변수 전달 타입에 따라 N개의 클래스에 해당하는 기계어 코드가 자동으로 만들어 진다는 뜻이다. 정리하자면 제네릭의 사용은 박.. 2023. 4. 17. 이전 1 2 3 4 ··· 6 다음