오늘은 자바스크립트에서 정수부 또는 소수점  반올림 관련 함수에 대해 설명하고자 합니다.


당연히 Math.round 함수를 사용하면 되지만 좀 더 경우의 수가 많은 경우에도 문제없이 사용하려면 좀 다듬어서 함수를 만들어서 사용해야 합니다.



* 소스코드


// n : 수치

// digits : 자를 소수점 자리수

function RoundXL(n, digits) {


var str_n = String(n); //숫자를 스트링으로 변환 

str_n = replaceAll(str_n, ",", "");

var float_n = parseFloat(str_n);


        // 소수부 반올림

if (digits >= 0) return parseFloat(float_n.toFixed(digits)); 


        // 정수부 반올림 ( digit값이 - 이면 정수부 상위 부분이 반올림 )

digits = Math.pow(10, digits); 

var t = Math.round(float_n * digits) / digits;


return parseFloat(t.toFixed(0));

}


* 사용법


var aa = RoundXL(123,456, 2);    // result : 123.46

var aa = RoundXL(123,456, -1);   // result : 120



이 함수만 있으면 소수점이든, 정수든 원하는 위치에서 반올림이 가능합니다.















오늘은 자바스크립트에서 DoModal 을 사용하는 방법에 대해 설명하고자 합니다.


C++ 에서는 DoModal 함수가 있어서 Modal 방식의 창을 띄울 수 있는데


자바스크립트에서도 그와 같은 함수가 있습니다.


showModalDialog 라는 함수입니다. 이 함수를 좀더 쉽게 다룰 수 있도록 함수화 해서 만든게 있어서 알려드립니다. (IE기준)


* 소스코드


// parm_url : 호출할 페이지

// w : 가로크기 (px)

// h : 세로크기 (px)

function DoModal(parm_url, w, h)

{

var pop_layer = null;

var is_style="edge:raised;center:yes; dialogwidth:"+w+"px; dialogheight:"+h+"px; scroll:yes; resizable:no; status:no; select:yes;"; 

        // 창 틀의 두께를 의미하며, sunken이 두텁고, raised가 얇음. 

return showModalDialog(parm_url, window, is_style);

}


* 사용법


var mm = DoModal('modal.asp', 300, 400);


위 함수처럼 사용하시면 쉽게 모달을 구현할 수 있습니다.










오늘은 작업관리자에서 강제로 프로세스를 종료하는 방법이 있는데 이런 방법을 프로그램을 하는 것에 대해 설명하고자 합니다.


보통 메인 프로그램이 서브프로그램을 강제로 종료시킬 때 sendmessage 을 통해서 종료를 시키게 되는데 해당 프로그램이 lock이 걸렸거나 이벤트를 받지를 못하는 상황이 생겼을 때 위 메세지는 의미가 없게 된다.


그렇기에 강제로 프로세스를 종료를 시켜야 하는데 이에 사용한 함수를 소개 하고자 합니다.


** 소스코드


// CString strProcessName : 프로세스 파일명.확장자

BOOL Util::ProcessKill(CString strProcessName)

{

HANDLE hProcessSnap = NULL;

BOOL bRet = FALSE; 

PROCESSENTRY32 pe32 = {0}; 


hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); 

if (hProcessSnap == (HANDLE)-1) 

return false;

pe32.dwSize = sizeof(PROCESSENTRY32); 


//프로세스가 메모리상에 있으면 첫번째 프로세스를 얻는다

if (Process32First(hProcessSnap, &pe32)) 

BOOL bCurrent = FALSE; 

MODULEENTRY32 me32 = {0}; 


do { 

bCurrent = GetProcessModule(pe32.th32ProcessID,strProcessName);

if(bCurrent) { 

HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pe32.th32ProcessID); 

if(hProcess) {

if(TerminateProcess(hProcess, 0)) {

unsigned long nCode; //프로세스 종료 상태 

GetExitCodeProcess(hProcess, &nCode);

}

CloseHandle(hProcess); 

}

}

}

//다음 프로세스의 정보를 구하여 있으면 루프를 돈다.

while (Process32Next(hProcessSnap, &pe32)); 


CloseHandle (hProcessSnap); 

return true;

}



// 위 함수애서 호출되는 것으로 해당 프로세스아이디, 이름이 존재하는지 찾는다.'

// DWORD dwPID : 프로세스아이디

// CString sProcessName : 프로세스파일명.확장자

BOOL Util::GetProcessModule(DWORD dwPID, CString sProcessName)

{

HANDLE hModuleSnap = NULL;

MODULEENTRY32 me32 = {0};


hModuleSnap = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, dwPID); 

if(hModuleSnap == (HANDLE)-1) 

return (FALSE); 

me32.dwSize = sizeof(MODULEENTRY32); 


//해당 프로세스의 모듈리스트를 루프로 돌려서 프로세스이름과 동일하면 

//true를 리턴한다.

if(Module32First(hModuleSnap, &me32)) { 

do { 

if(me32.szModule == sProcessName)

CloseHandle (hModuleSnap); 

return true;


while(Module32Next(hModuleSnap, &me32)); 


CloseHandle (hModuleSnap); 

return false;

}


* 사용법


BOOL ret = m_util.ProcessKill("aaa.exe");


작업관리자에서 보이는 파일명.확장을 인자로 넘기면 됩니다. 대소문자 구분도 하니 보이는 그대로 인자를 넘겨야 합니다.







+ Recent posts