본문 바로가기

전체 글917

C++ ] 레지스트리 등록하여 윈도우 시작시 앱 자동 실행 하기 레지스트리 등록하여 윈도우 시작시 앱 자동 실행 하기 HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run HKEY_CURRENT_USER를 사용하면 현재 로그인한 사용자의 시작 프로그램으로 등록하고, HKEY_LOCAL_MACHINE을 사용하면 모든 사용자에게 적용된다. 위 경로에서 "새 문자열 값"을 선택하고 값 이름은 프로그램을 식별할 만한 이름으로 지정하고, 값 데이터에는 실행할 프로그램의 경로를 입력하면 윈도우 부팅 시 등록한 프로그램이 자동실행된다. // 실행파일의 경로 알아내기 wchar_t exePath[MAX_PA.. 2023. 9. 22.
Windows 프로그래밍 시 OutputDebugString 사용해 디버깅 정보 출력하기 + 가변인자 받아서 디버깅 정보 출력 OutputDebugString은 Windows 프로그래밍 환경에서 디버깅 세션에 디버깅 정보를 출력하는데 사용되는 함수이다. 이 함수는 프로젝트 문자집합 설정이 멀티바이트냐 유니코드냐에 따라 OutputDebugStringW 또는 OutputDebugStringA로 정의된다. #ifdef UNICODE #define OutputDebugString OutputDebugStringW #else #define OutputDebugString OutputDebugStringA #endif // !UNICODE 먼저 Windows.h 를 포함하고 OutputDebugString 함수를 호출해 디버깅 세션에 출력할 문자열을 넘긴다. ANSI 문자열을 사용하는 경우 그냥 출력하면 되고 유니코드 문자열을 출력할 땐.. 2023. 9. 21.
ATE ATE, Automatic Test Equipment는 다양한 방산 무기체계 디바이스의 성능을 자동으로 시험하고, 판별하여 전시해주는 시험 장비로 보통 디바이스에 전기적 신호를 전달하고 측정할 수 있는 모듈과 Pass/Fail 결과를 전시할 수 있는 디스플레이로 구성된다. 2023. 9. 20.
C++ ] 현재 실행중인 실행파일의 경로 얻기, GetModuleFileName 현재 작업 디렉토리의 경로는 GetCurrentDirectory 함수로 확인할 수 있다. 한편 실행파일이 위치한 경로의 경우 운영체제에 따라 확인하는 방법이 다른데 윈도우에서는 Windows.h 를 포함하고 GetModuleFileName() 함수를 사용하면 현재 실행중인 실행파일의 path를 알 수있다. GetModuleFileName는 유니코드를 사용하냐 ANSI를 사용하냐에 따라 GetModuleFileNameW 또는 GetModuleFileNameA로 정의된다.  wchar_t exePath[MAX_PATH];GetModuleFileName(NULL, exePath, MAX_PATH);wchar_t* folderPath = new wchar_t[wcslen(exePath) + 1];wcscpy(f.. 2023. 9. 19.
연비운전 - 셀토스 2.0 가솔린의 공인연비 12.3~12.9km/l 도심에선 8~9km/l, 고속도로에선 12~14km/l 정도 나오는 것 같다. - 3,000km 탄 셀토스 평균 연비 - 연비운전을 위한 주행 조건 1. 신호등이나 도로혼잡으로 인한 정차가 없어야 한다. 2. 경제속도(일반도로 70~80km/h, 고속도로 90~100km/h)로 계속 달릴 수 있어야한다. 3. 오르막이 없고 탄력주행을 위한 내리막 길이 많아야 한다. - 자동차 연비 높이는 습관 1. 급출발을 하지 말 것 2. 급제동을 하지 말 것 3. 평상시 차량의 무게 줄이기 4. 불필요한 공회전 하지 말기 5. 타이어 공기압 체크하기 6. 주기적으로 차량 점검하기 2023. 9. 18.
C++ ] Winsock2의 bind 함수와 functional 헤더의 std::bind 함수 충돌 방지 Winsock2 라이브러리와 C++ 표준 라이브러리인 functional 헤더를 모두 포함에서 사용하는 경우 bind함수 때문에 충돌할 수 있다. Winsock2의 bind함수는 전역함수로 전역 네임스페이스에 속해있기 때문에 using namespace std; 를 했더라도 전역 bind 함수가 우선 호출된다. Winsock2 bind함수를 호출할 때는 ::bind로 전역 네임스페이스의 bind를 호출하고 C++표준 라이브러리의 std::bind함수를 호출할 때는 std::bind로 명시적으로 써주면 충돌을 피하고 가독성을 높일 수 있다. #include #include int main() { // Winsock2 라이브러리의 bind 함수 호출 ::bind(socket, ...); // C++ 표준 라.. 2023. 9. 17.
전동 블라인드 모터 후기 / 4만원으로 수동블라인드를 스마트전동블라인드로 바꾸기 (알리익스프레스) 알리익스프레스에서 체인 롤러 방식의 전동 블라인드 모터를 구입하였다. 품목 : M616EGWT, Type B EU Plug 플러그 변환할 필요 없이 국내 콘센트에 잘 맞았다 구입가격 : 할인받아서 44,000원 링크 : https://ko.aliexpress.com/item/1005005677238932.html?spm=a2g0o.order_list.order_list_main.5.66c8140f1NHOT1&gatewayAdapt=glo2kor 구성품 본체, 어댑터, 리모콘, 설명서, 풀리 추가 부속품으로 교체가능한 모터 풀리가 3개 더 들어있었는데 자기집 블라인드 볼 체인에 가장 잘 맞는거를 테스트해보면서 찾으면 된다. 처음 리모콘으로 조작할 때는 많이 안움직일거다. 어플과 연동해서 upper limi.. 2023. 9. 16.
취업성공수당 100만원 수령 후기 국민취업지원제도 1유형 또는 2유형 참가자중 취업 후 1년간 계속 근무시 최대 150만원 지급하는 제도이다. 지급 대상 지급 요건 및 지급액 신청 방법 국민취업지원제도 - 취업지원관리 - 취업성공수당 관리 - 취업성공수당 지급 신청 https://www.kua.go.kr/uaptm010/selectMain.do 국민취업지원제도 국민취업지원제도 정보시스템 회원은 2년을 주기로 재동의 절차를 거쳐 동의한 경우에만 회원자격을 유지할 수 있습니다. 개인정보 수집∙이용 동의일로부터 2년이 되는 까지 기간 내 재동의를 www.kua.go.kr 하단의 파란색 버튼을 눌러 신청한다. 제출 서류 온라인으로 신청하면 그 자체가 신청서가 되기 때문에 따로 신청서를 첨부할 필요가 없다. 그리고 취업 및 근속사실을 증명할 증빙.. 2023. 9. 15.
GPIB (General Purpose Interface Bus) GPIB (General Purpose Interface Bus) GPIB는 계측 장비와 컴퓨터 간의 통신을 위한 하드웨어 인터페이스 표준이다. 1960년대에 Hewlett-Packard (현재 Keysight Technologies)에서 개발되었으며, IEEE-488이라는 공식 표준으로 채택되었다.GPIB는 한 대의 컨트롤러(보통 PC)와 최대 15개의 계측 장비를 연결할 수 있으며, 각 장치는 고유한 주소를 가지고 있어서 컨트롤러가 특정 장치를 선택하고 명령을 전송하여 제어할 수 있다.  IEEE-488.1 : GPIB의 하드웨어 인터페이스 및 전기적/기계적 사양을 정의한다.IEEE-488.2 : IEEE-488.1의 하드웨어 표준을 기반으로 소프트웨어 레벨의 통신 규약을 정의한다. IEEE-488... 2023. 9. 15.
RS-422 (+ RS-232/422/485 비교) RS-422 Specification AttributeSpecificationCablingPoint-to-Point, Single-ended Multi-dropMax Driver1Max Receiver10Maximum distance1200m at 100kbpsMaximum data rate10 Mbps at 15mSignalingBalancedMaximum Nominal Voltage± 7VMinimum Transmitter's Driver Output Voltage± 2VReceiver Input Sensitivity± 200mvMark (1)Positive difference (A - B > 200mv)Space (0)Negative difference (A - B SignalsTx+, Tx-, R.. 2023. 9. 15.
C++ ] 멤버 함수 포인터 사용하기 / 함수포인터 대신 std::function 사용 / using으로 별칭 사용 멤버 함수 포인터 선언 returnType (className::*pointerName)(parameterTypes); 멤버 함수 포인터에 함수 주소 대입하기 멤버 함수 포인터에 함수 주소를 대입할 때는 일반 함수포인터와는 다르게 & 연산자를 생략할 수 없다. returnType (className::*pointerName)(parameterTypes) = &className::memberFunctionName; 멤버 함수 포인터 호출하는 법 className object; // 클래스의 인스턴스 생성 (returnType)(object.*pointerName)(arguments); 만약 클래스의 멤버인 멤버 함수 포인터를 멤버 함수 내에서 호출한다면 아래처럼 하면 된다. (this->*functionP.. 2023. 9. 15.
스위치의 접점 SPST, SPDT, DPST, DPDT 스위치 또는 릴레이 등의 소자는 내부 접점 구조에 따라 SPST, SPDT, DPST, DPDT 등으로 분류된다. 각 단어의 뜻은 다음과 같으며, 스위치의 연결 유형을 결정하는 두 가지 요소는 Pole과 Throw 이다 SPST : Single Pole Single Throw SPDT : Single Pole Double Throw DPST : Double Pole Single Throw DPDT : Double Pole Double Throw . Pole : Pole은 동일한 물리적 스위치(same lever, knob or button)으로 제어할 수 있는 회로의 수를 의미한다. Single Pole 스위치는 하나의 회로를 제어할 수 있고, Double Pole 스위치는 두개의 회로를 동시에 제어할 .. 2023. 9. 15.
NI-VISA example 실행해보기 NI-VISA 설치 후  예제코드 위치:Examples: \National Instruments\NI-VISA\Examples\DotNET 참고 문서 위치Help: \National Instruments\NI-VISA\Documentation   예제폴더에 들어가면 .NET 예제와 C예제가 있다.  C프로젝트 설정 프로젝트 우클릭 - 설정 - C/C++ - 일반 - 추가 포함 디렉터리에 아래 경로 추가C:\Program Files\IVI Foundation\VISA\Win64\Include 프로젝트 우클릭 - 추가 - 기존항목, 아래경로의 visa64.lib 추가 C:\Program Files\IVI Foundation\VISA\Win64\Lib_x64\msc 또는 링커 설정을 통해 추가할 수도 있다.".. 2023. 9. 15.
UniFlash 사용 방법 UniFlash 설치파일 링크 : https://www.ti.com/tool/UNIFLASH UNIFLASH Software programming tool | TI.com 20 MHz MCU with 128KB Flash, 10KB SRAM, 16-bit Sigma-Delta ADC, dual DAC, DMA, 2 OpAmp, 160 seg L MSP430FR2000 — 16 MHz MCU with 0.5KB FRAM, 0.5KB SRAM, comparator, UART/SPI, timer MSP430FR2032 — 16 MHz MCU with 8KB FRAM, 1KB SRAM, 10-bit ADC, UART/SPI www.ti.com CCS에서 빌드하면 기본 출력물이 .out인데 UniFlash 툴을 .. 2023. 9. 15.
VISA (Virtual Instrument Software Architecture) What is VISA?VISA는 Virtual Instrument Software Architecture의 약자로 응용 프로그램과 계측기 간의 통신을 가능하게 하는 Test & Measurement 업계의 표준이다.계측기는 보통 USB, LAN, GPIB, PCI/PCIe(PXI/PXIe)등 다양한 연결을 지원하고 로우레벨에서는 이러한 물리적 인터페이스에 따라 각기 다른 방식으로 데이터 통신이 이루이지는데, 이로 인한 중복 개발을 피하고 통신과정을 더욱 단순화하고 표준화하기 위해 계측기와 어플리케이션 간 Interface I/O를 관리할 중간계층으로 VISA가 등장하게 되었다.VISA를 사용하면 물리적 인터페이스가 USB든 LAN이든 PXI든 로우레벨에서 이루어지는 세부사항을 알 필요없이 계측기에 액세.. 2023. 9. 15.
Momentary switch and Latching switch Latching switches Latching switches are switched on by the user and then remain on until switched off again. They do not require continuous compression from the user. Latching switches can be found in the home and are used for things like light switches, central heating switches or on stereos. Momentary switches Momentary switches require continuous compression. They will switch on when the user.. 2023. 9. 15.
Notepad++ ] 수정된 파일 자동으로 새로고침하기 (파일 모니터링) 보기 - 모니터링 파일의 변화를 모니터링하는 리눅스의 tail -f 명령어와 같은 기능이다. 설정 - 환경설정 - 기타 - 파일 상태 자동 확인 설정으로 가능하다. 2023. 9. 15.
'const char []'에서 'char *'(으)로 변환할 수 없습니다. 아래 방식으로 해결 가능 또는 프로젝트 우클릭 속성 - C/C++ - 언어 - 준수모드를 아니오로 설정 char* str = "Hello World\r\n";// error const char* str = "Hello World\r\n"; char str[] = "Hello World\r\n"; const char* pchar = str; 2023. 9. 15.
MFC ] 사용자 지정 메시지와 메시지 처리기 만들기, SendMessage, PostMessage 메뉴에서 프로젝트 - 클래스 마법사 - -Dlg클래스 선택 - 사용자 지정 메시지 추가로 추가하는 방법도 있다. 방법 먼저 사용자 지정 메시지를 정의한다. #define MY_MSG1(WM_USER + 1) #define MY_MSG2(WM_USER + 2) Windows API에는 미리 정의된 메시지 상수가 많이 있지만, 애플리케이션의 필요에 따라 추가적인 사용자 지정 메시지를 정의할 수 있는데, 이때 WM_USER를 사용하여 사용자 지정 메시지의 베이스 값을 설정한다. WM_USER의 값은 0x0400으로 (WM_USER + n) 이런식으로 정의하면 다른 시스템 또는 프레임워크 메시지와 충돌하지 않도록 할 수 있다. 다음은 다이얼로그 헤더에 메시지 처리기를 추가한다. afx_msg LRESULT My.. 2023. 9. 15.
Windows Command Prompt 배경색, 글자색, 글꼴 바꾸기 명령 프롬프트 제목표시줄에서 우클릭 - 속성 에 들어가 화면 배경과 화면 텍스트 색, 그리고 글꼴을 바꿀 수 있다. 이렇게 GUI로 설정한 내용은 명령 프롬프트 창이 실행될 때마다 적용되며, 사용자가 다른 설정으로 변경하지 않는 한 계속 유지된다. 단, 색의 경우 시스템명령어를 통해 현재 실행중인 프롬프트의 색만 설정을 바꿀 수 있다. color /? 명령어를 입력하면 도움말을 볼 수 있다. 2023. 9. 15.
Tftpd64 사용해서 TFTP 서버로 설정하는 방법 Tftpd64를 실행시키면 디폴트로 TFTP Server 서비스는 켜져있고, 서버 인터페이스는 디폴트로 127.0.0.1에 바인딩 되어있다. 디테일한 내용은 Setting 화면에서 설정할 수 있다. Tftp Server 탭을 활성화하고, 서버 네트워크 인터페이스와 서버의 베이스 디렉토리를 선택한다. 참고로 디폴트 디렉토리는 C:\Program Files\Tftpd64인데 권한 문제로 작동안할 가능성도 있으니 다른 폴더를 지정해주는게 좋다. https://www.youtube.com/watch?v=GigPU3ge6pE 2023. 9. 15.
D-SUB Overview D-sub 커넥터는 D-subminiature의 약자로, D모양의 금속 쉘 내부에 2열 이상의 커넥션(핀 또는 소켓)이 있는 것이 특징이다. D-sub 도입 당시엔 컴퓨터에 사용되는 가장 작은 커넥터여서 subminiature(초소형)이라는 이름이 붙었다. Types 쉘 크기와 핀 또는 소켓 수, Male/Female 타입에 따라 여러 종류가 있다. 주로 RS-232, RS-485와 같은 직렬 통신에 DB-9 커넥터를 사용하고, 컴퓨터와 디스플레이간 연결에 DE-15 커넥터를 사용한다. Pin Numbering 2023. 9. 15.
C] strstr 함수 구현 strstr() 함수는 substring을 찾는 함수로 str1에서 str2를 찾는다. str2의 길이가 0이면 str1을 리턴, str2를 못찾으면 NULL을 리턴, str2를 찾았으면 str1에서 str2 시작 위치의 포인터를 리턴한다. const char* my_strstr(const char* str1, const char* str2) { char* ret; int found = 0; if (*str2 == 0) { ret = str1; } else { for(; *str1 != 0; str1++) { if(*str1 == *str2) { const char *s1 = str1; const char *s2 = str2; while(*s1 == *s2 && *s2 != 0) { s1++; s2++;.. 2023. 9. 15.
MFC ] 리스트박스 스크롤 하단으로 내리는 법 // ... m_listBox.SetCurSel(m_listBox.GetCount() - 1); m_listBox.SetCurSel(-1); // ... 리스트박스의 가장 마지막 인덱스를 선택한다. 포커스를 다시 해제해 파란색으로 표시되지 않게하면 스크롤을 맨 아래로 이동하는 효과만 남는다. 2023. 9. 15.
MFC ] 다이얼로그 생성시 함수 호출 순서 처음 MFC 어플리케이션의 시작점인 WinMain()함수가 실행되고 InitInstance()함수를 호출하여 어플리케이션의 다이얼로그를 생성하고 .DoModal(); 함수를 호출하게 된다. DoModal() PreSubclassWindow() OnNcCreate() OnNcCalcSize() OnCreate() OnSize() OnMove() OnSetFont() OnInitDialog() OnWindowPosChanging() OnMove() OnWindowPosChanged() OnWindowPosChanging() OnNcActivate() OnActivate() OnShowWindow() OnWindowPosChanging() OnNcPaint() OnEraseBkgnd() OnChildNotif.. 2023. 9. 15.
Precompiled Header를 사용해 컴파일 시간 단축하기 1. 프로젝트에서 "stdafx.cpp" 파일을 만든다. stdafx는 Visual Studio에서 사용하는 미리 컴파일된 헤더 파일의 일반적인 이름으로 다른 이름을 사용해도 무방하다. 이 "stdafx.cpp" 파일은 이후 미리 컴파일된 헤더를 생성하는데 사용된다. 2. "stdafx.cpp" 파일에 아래 코드를 추가한다. #include "stdafx.h" 3. "stdafx.h" 파일을 만들고 무겁거나 자주변경되지 않을 헤더파일을 포함시킨다. #pragma once #include #include #include 4. 미리 컴파일된 헤더를 사용할 cpp파일에 아래 코드를 추가한다. #include "stdafx.h" 5. 프로젝트 우클릭 - 설정 - C/C++ - 미리 컴파일된 헤더 설정에서 "미리.. 2023. 9. 15.
MFC ] 멀티바이트 집합 사용시에도 현대적 UI 적용하기 Framework.h에 #ifdef _UNICODE, #endif 주석 처리 #ifdef _UNICODE #if defined _M_IX86 #pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='x86' publicKeyToken='6595b64144ccf1df' language='*'\"") #elif defined _M_X64 #pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' v.. 2023. 9. 15.
C ] Data Types Range C type stdint.h type Bits Sign Range char uint8_t 8 Unsigned 0 .. 255 signed char int8_t 8 Signed -128 .. 127 unsigned short uint16_t 16 Unsigned 0 .. 65,535 short int16_t 16 Signed -32,768 .. 32,767 unsigned int uint32_t 32 Unsigned 0 .. 4,294,967,295 int int32_t 32 Signed -2,147,483,648 .. 2,147,483,647 unsigned long long uint64_t 64 Unsigned 0 .. 18,446,744,073,709,551,615 long long int64_t 6.. 2023. 9. 15.
MFC ] EditBox에서 편집하고 엔터치면 입력되게끔 하기 PreTranslateMessage(MSG* pMsg) 함수 재정의 BOOL AppDlg::PreTranslateMessage(MSG* pMsg) { // TODO: 여기에 특수화된 코드를 추가 및/또는 기본 클래스를 호출합니다. // 키보드 입력시 if (pMsg->message == WM_KEYDOWN) { // 엔터키인 경우 if (pMsg->wParam == VK_RETURN) { // 현재 다이얼로그나 윈도우에서 포커스를 가진 컨트롤(윈도우)을 반환 CWnd* pFocusWnd = GetFocus(); // 컨트롤 ID가 에딧박스인 경우 입력처리 if (pFocusWnd != nullptr && pFocusWnd->GetDlgCtrlID() == IDC_EDIT_CMD) { OnBnClicked.. 2023. 9. 15.
MFC ] 클래스 마법사 오류 CCmdTarget 파생 클래스가 아닌 이 클래스에는 명령을 추가할 수 없습니다. 프로젝트 폴더에 가서 .vs 폴더을 다른 이름으로 바꾼 뒤 다시 프로젝트를 열면 .vs 폴더가 다시 생성되면 클래스 마법사가 된다. 리소스에서 구문분석을 하지 못했습니다. 리소스뷰에 다이얼로그에가서 버튼하나 만들어주고 빌드한뒤 다이얼로그랑 Resource.h에서 만들었던 버튼 삭제하면 됨 2023. 9. 15.