본문 바로가기

전체 글317

ProcessId로 Application의 Hung체크 Process - ID 로 Window-Application의 Hung체크 하기 다음 두가지 기능으로 Process-Window의 Hung을 체크한다.1) IsHungWindow 로 "응답없음" 체크 2) EnumDesktopWindow 로 Process의 Window-Handle 찾기 //--------------------------------------------------------------------------- typedef struct _PROC_INFO { long iProcessId; HWND hWnd; }PROC_INFO; //--------------------------------------------------------------------------- BOOL __stdcal.. 2012. 4. 24.
Process 실행 체크 2 바로 앞에 실행파일 체크 방법에는 문제점이 조금 있는데.. 대소문자 구분 , Process_name은 똑같지만 실행파일 경로가 다른 경우에 대한 제대로된 체크를 하지 못한다. 실행파일 경로까지 체크하는 프로세스 실행 체크 함수는... //--------------------------------------------------------------------------- #include #include "Psapi.h" #pragma link "psapi.lib" bool __fastcall IsRunProcessEx( AnsiString sFullExeName ) { HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0); PROCESSEN.. 2012. 4. 23.
Process 실행 체크 1 초간단 Process실행 체크 함수입니다. #include bool __fastcall IsRunProcess( AnsiString sExeName ) { HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0); PROCESSENTRY32 pe32; pe32.dwSize = sizeof(PROCESSENTRY32); Process32First(hSnapshot,&pe32); do { AnsiString sProcessExe = pe32.szExeFile; if(sExeName == sProcessExe ) { CloseHandle(hSnapshot); return true; } } while(Process32Next(hSnapshot,&pe3.. 2012. 4. 23.
디버거로 실행중인지 체크 함수(IsDebuggerPresent) IsDebuggerPresent간단함 함수인데.. 이 함수를 잘 활용하면Debug-Run 으로 테스트 중일때랑 아닐때 //--------------------------------------------------------------------------- void __fastcall TF_Main::FormCreate(TObject *Sender) { if(IsDebuggerPresent()) { //Design-time에 Timer의 Interval은 180000(3분)으로 되어있음 TM_Checker->Interval=10000;//10초로 설정 } } 위 FormCreate에 위와같이 코딩하면..Test를 위해 Timr의 Interval을 10초로 짧게 설정해서 테스트 가능하다Debugger(C+.. 2012. 4. 23.
TIniFile 대신 TMemIniFile 사용하면? TMemIniFile 클래스에 대해 살펴 보고자 한다. 1. 객체 위치 TMemIniFile은 TIniFile처럼 IniFiles 유닛에 구현되어있다. C++Builder에서는 #include Delphi에서는 Uses절에 IniFiles 를 추가하면 된다. 2. TIniFile 과 같은점 TIniFile처럼 TCustomIniFile 를 상속받았다. 그래서 사용방법은 TIniFile클래스와 거의 동일하다 3. TIniFile과 MemIniFile의 다른점 @ TIniFile은? ; TIniFile클래스는 Ini파일의 어떤 값을 읽어오거나 쓸때 매번 File을 Open하여 읽기/쓰기 하고 File을 Close한다. 즉 Read를 100번 반복하면 , 100번이나 File을 open/close하게 된다. .. 2012. 4. 19.
TreeView의 TreeNode 클래스 바꾸기 음...TreeView를 조직도 및 여러가지 데이터를 관리하고 보여주는데 많이 사용한다. 그런데 VCL에서 TTreeView의 TTreeNode에는 담을수 있는 정보에 한계가 있다. Text Data ImageIndex StateIndex SelectedIndex등.. TTreeNode에 보다 많은 정보를 담아야할때( 연결해야) 할때는 어떻게 해야하나? 방법1. void * Data 활용 일반적으로 정보는 따로 가지고 있고 void *Data에다가 Poiner를 연결해서 많이 쓴다. class TMyClass { public: String sName; }; //정보 저장 Node->Data = (void *) MyData; //정보 활용 TMyClass *MyData=(TMyClass *)Node->Da.. 2012. 4. 18.
테이블 이름 바꾸기 [SQL] firebird DB에서 테이블을 만들면 NEW_TABLE 이라는 이름으로 생성된다.한번 생성되고 나면 테이블 이름 바꾸는것이 쉽지가 않은데..처음 생성하고 레코드나 관련 객체가 없을때는 아래와 같은 SQL을 실행하여 바꿀수 있다.IBExpert에서 F12 눌러서 SQL Editor 를 실행하고 아래 구문을 하나씩 실행하면된다. 테이블 처음 만들면 바로 원하는 이름으로 수정하는 습관이 필요!! update rdb$relation_fields set rdb$relation_name='TABLE_NEW' where rdb$relation_name='TABLE_OLD'; commit; update rdb$relations set rdb$relation_name='TABLE_NEW' where rdb$relat.. 2012. 4. 18.
Hex 문자열을 숫자로 변환하기 VCL ( Delphi 이나 C++Builder) 에서숫자를 Hex-String으로 변환하는 함수가 있다. IntToHex 그런데 그 반대되는 HexToInt 라는 이름의 함수는 없다. 그래서 만들어 보았다. HexToInt //==================================================int __fastcall HexToInt(String str) { return StrToInt("x"+str); }//================================================== 추신StrToInt 라는 함수는기본적으로 문자열을 숫자로 변환해주는 함수인데만약 prefix에 '$' 나 'x' , 'X' , '0x' 등이 붙으면뒤에 문자를 HexString으로 판.. 2012. 4. 10.
마우스 키보드 마지막 입력시간 확인 마우스 키보드 마지막 입력시간 확인마지막입력시간으로 부터 몇초가 지났는지 확인하는 함수입니다. 참조 http://www.devpia.com/MAEUL/Contents/Detail.aspx?BoardID=51&MAEULNo=20&no=8287&ref=8287 __int64 __fastcall GetLastInputDelay() { LASTINPUTINFO LastInput; LastInput.dwTime = 0; LastInput.cbSize = sizeof(LASTINPUTINFO); if(GetLastInputInfo(&LastInput)) { __int64 iSecond=(GetTickCount() - LastInput.dwTime)/1000; return iSecond; } else { return.. 2012. 4. 6.
파일 size를 줄이려면 .. ref : http://cbuilder.borlandforum.com/impboard/impboard.dll?action=read&db=bcb_qna&no=7105위 링크의 내용을 그대로 거져왔습니다. #include #include void change_size(char *filename,int size) { int handle=open(filename,O_RDWR); chsize(handle,size); close(handle); } //--------------------------------------------------------------------------- void __fastcall TForm1::Button3Click(TObject *Sender) { change_size("C:\\.. 2012. 4. 5.
TRichEdit에 rtf 문자열 Asssign하기 .. 다음 그림과 같기 rtf형식의 문자열이 Memo에 들어있는데..이놈을 어떻게 RichEdit 에 넣을까? [안되는 방법들..]다음과 같은 방법으로 해서는 양식적용이 안된다.안되는 방법1. RichEdit->Lines->Assign( Memo1->Lines) ; 안되는 방법2 RichEdit->Lines->Text = Memo1->Lines->Text ; 위 두가지 방법은 그냥 text형식으로 richedit에 들어간다. [되는 방법들..] RichEdit에서 rtf 형식을 판단하는 부분은 Stream으로 읽을때 하고 있다. 파일스트림, 메모리스트림, 리소스 스트림등... 1. 리소스에 넣었다가 리소스 스트림으로 읽어오는 방법 void __fastcall TForm1::Button2Click(TObject.. 2012. 3. 31.
RichEdit에서 문자열 찾아서 커서 이동 TRichEdit 에서 원하는 문자열을 찾아서 커서를 이동 시키는 코드 RichEdit1->HideSelection = false; 위 프로퍼티 세팅을 안하면 이동이 안되는 문제가 있음. int pos = RichEdit1->FindText("찾을 문자열", 0, RichEdit1->Text.Length(), TSearchTypes()); RichEdit1->SelStart = pos; //RichEdit1->SelLength = b->Caption.Length(); RichEdit1->HideSelection = false; RichEdit1->Perform(EM_SCROLLCARET, 0, 0); 2012. 3. 30.
서식있는 문서(RTF)를 exe에 포함시켜서 RichEdit로 보여주기 1. rtf 문서를 wordpad등으로 작성해서 project 경로에 복사해둔다. 2. rc 파일을 만든다. RTF_DOCUMENT RTF "문서.rtf" 3. 프로그램 시작시 리소스에서 읽어와서 RichEdit에 표시한다. void __fastcall TForm1::FormCreate(TObject *Sender) { TResourceStream *ResSt; try { ResSt = new TResourceStream((int)HInstance, L"RTF_DOCUMENT",L"문서.RTF"); RichEdit1->Lines->LoadFromStream(ResSt); } __finally { delete ResSt; } } //-----------------------------------------.. 2012. 3. 30.
프로그램 내에서 특정 모듈(dll 또는 bpl)의 경로를 알고 싶으면? //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { String sModule="vcl140.bpl"; HINSTANCE__ * hModlule=GetModuleHandleW(sModule.c_str()); if(hModlule) { wchar_t buf[256]; GetModuleFileNameW(hModlule,buf,255); ShowMessage(String(buf)); } } //--------------------------------------------------------------------------- 2012. 3. 30.
ShellExecute() : 파일 실행하기 확장자에 따라 파일 실행하기 HINSTANCE ShellExecute( HWND hwnd, LPCTSTR lpOperation, LPCTSTR lpFile, LPCTSTR lpParameters, LPCTSTR lpDirectory, INT nShowCmd ); #include "shellapi.h" //프로그램 실행 ShellExecute(NULL, "open", "C:/Program Files/NATEON/BIN/NATEON.exe", NULL, NULL, NULL); //웹사이트 접속 ShellExecute(NULL, "open", "http://www.ict-lab.com", NULL, NULL, SW_SHOWNORMAL ); //메일 보내기 ShellExecute(NULL, "open", "ma.. 2012. 3. 29.