달력

10

« 2019/10 »

  •  
  •  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  •  
  •  

계속해서 돌아가야 할 프로그램들이 종료되는 경우가 있다.
또는 시스템 재시작시 구동해야 될 목록을 관리해야 되는 경우
일일이 서버 관리자 또는 수동으로 목록 관리하여 메뉴얼 보면서 작업하는 것도 귀찮죠.

그래서 비베로 후다닥 만든 초기작...
업무상 필요해서 만든거지만, 어디에서 요청 온 것도 없고,
내가 필요해서 따로 만든거라 그냥 공개했습니다.
(사무실에서 전기가 자주 떨어져 하드가 ....완성본이 없어져 버렸네 ㅠㅠ)

로그를 볼 수 있는 기능과 실행 시 인자 값을 넣어서 가능한 버전이 사라졌지만....-_-;;;
추후에 다시 구현 하기로 하고, 초기버전을 업로드합니다..




실행화면



왠지 제목은 거창한데 프로그램은 너무 볼품이 없네요 ㅎㅎ
실행중인 프로세스에는 현재 구동된 프로세스 목록을 볼수 있으며(10초인가 30초마다 갱신),
감시 중인 프로세스에는 추가를 통해 프로그램을 등록 할수 있습니다.
등록된 프로그램은 프로세스명으로 검색하여, 해당 프로세스가 프로세스 목록에 있는지 검색하여, 없을 경우 프로그램을 재시작합니다..

시작프로그램 등록은 레지스터리에 processMonitor.exe를 등록하여,
윈도우 시작 시, processMonitor.exe를 자동으로 실행하게 됩니다.
즉, 감시중인 프로세스에 등록되어 있다면, 시스템이 리붓이 되더라도 구동이 되겠죠 ^^

아 참 실행파일이 있는 폴더에 Log폴더가 있을껍니다. 거기에 재시작시 로그 간단히 남기게 되어 있어요.

......아흑 소스 복구 언제 하나 ㅠㅠ
Posted by 현자

댓글을 달아 주세요

  1. 감사합니다. 2016.08.10 11:45  댓글주소  수정/삭제  댓글쓰기

    서버관리자로 이런프로그램 찾고 있었는데
    정말 감사드립니다.

  2. ㅇㅇ 2016.12.08 18:23  댓글주소  수정/삭제  댓글쓰기

    찾고있던거네요 감사합니다

저장하고자 하는 파일이 생성시간이 없어서 해당 오류가 난다.

notepad 나 사용하는 문서편집기로 간단히 공백 넣고 저장 지우고 저장

해당 파일을 윈도우 탐색기에서 확인해 보면 파일 생성시간이 등록 되어 있는걸 알 수 있다.

이제 이클립스로 와서 저장하면 문제 해결 ~

Posted by 현자

댓글을 달아 주세요

var targetDiv = eval("document.all." + div명);

var text = "";
text += "<TABLE>";
text += "</TABLE>";

targetDiv.innerHTML = text;
Posted by 현자

댓글을 달아 주세요

특정 string을 암호화 하고
암호화된 string을 다시 복호화 하는 기능
Java code와 
C++ code 2개 모듈을 작성하였습니다.
실제 사용하는 코드입니다.
C++로 먼저 개발을 하였고 이를 다시 java로 변경하였습니다.

<%
    WCEncrypt enc = new WCEncrypt();
    int nKey = 100;
    String sSrc = "abcdef";
    String sEnc = enc.Encrypt(sSrc.getBytes(),nKey);
    String sDec = enc.Decrypt(sEnc.getBytes(),nKey);
%>
<%="sSrc="+sSrc%><br>
<%="sEnc="+sEnc%><br>
<%="sDec="+sDec%><br>


sSrc=abcdef
sEnc=618D7F84B7E4
sDec=abcdef



아래의 code에서 WCPage는 www.webdevlib.net에서 source code를 다운로드 받아 사용이 가능합니다.
만약 WCPage를 사용하지 않고 그냥 사용하고 싶다면 WCPage가 들어간 부분을 모두 제거하면 됩니다.

package wdl;
import java.util.*;
import java.sql.*;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.text.SimpleDateFormat;

public class WCEncrypt 
{
  
    public int m_nC1Key = 74102;
  
    public int m_nC2Key = 12337;
  
    public int m_nC3Key = 100;
  
    public WCPage m_oPage = null;
  
    public void setKey1(int nKey)
    {
        m_nC1Key = nKey;
    }
  
    public void setKey2(int nKey)
    {
        m_nC2Key = nKey;
    }
  
    public WCEncrypt(WCPage oPage)
    {
        m_oPage = oPage;
    }
  
    public WCEncrypt()
    {
    }
  
    public WCEncrypt(int nKey1,int nKey2)
    {
        m_nC1Key = nKey1;
        m_nC2Key = nKey2;
    }
  
    public WCEncrypt(WCPage oPage,int nKey1,int nKey2)
    {
        m_oPage = oPage;
        m_nC1Key = nKey1;
        m_nC2Key = nKey2;
    }
  
    public void setKey(int nKey1,int nKey2,int nKey3)
    {
        m_nC1Key = nKey1;
        m_nC2Key = nKey2;
        m_nC3Key = nKey3;
    }
  
    public void setPage(WCPage oPage)
    {
        m_oPage = oPage;
    }
  
    public byte HexaByte(int nVal)
    {
        byte [] szHexaByte = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
        if (nVal > 15)
        {
            nVal = 0;
        }
        return szHexaByte[nVal];
    }
  
    public String ValueToHex(int szSrc[])
    {
        if (szSrc == null)
            return null;
        int nSrcLen = szSrc.length;
        byte szBuf[] = new byte[nSrcLen*2];
        for (int i=0;i<nSrcLen*2;i++)
        {
            szBuf[i] = 0;
        }
        for(int i=0;i<nSrcLen;i++)
        {
            szBuf[(i*2)+0] = HexaByte(((int)(szSrc[i]))/16);
            szBuf[(i*2)+1] = HexaByte(((int)(szSrc[i]))%16);
        }
        String sRet = new String(szBuf);
        return sRet;
    }
  
    public byte[] HexToValue(byte[] szSrc)
    {
        int nLen = szSrc.length;
        byte[] szDest = new byte[nLen/2];
        char szChar[] = new char[2];
        for(int I = 0 ; I < nLen/2; I++)
        {
            szChar[0] = (char)szSrc[I*2];
            szChar[1] = (char)szSrc[I*2+1];
            byte btDest = (byte)HexToDecimal(szChar);
            int nDest = btDest < 0 ? ( Byte.MAX_VALUE + 1 ) * 2 + btDest : btDest;
            szDest[I] = (byte)nDest;
        }
        String sRet = new String(szDest);
        return szDest;
    }
  
    public String Encrypt(byte btSrc[], int Key)
    {
        int nSrcLen = btSrc.length;
        long nKey2 = Key;
        int FirstResult[] = new int[nSrcLen];
        for (int i=0;i<nSrcLen;i++)
        {
            FirstResult[i] = 0;
        }
        int nLen = btSrc.length;
        for(int i = 0 ; i < nLen ; i++)
        {
            byte btByte = (byte)btSrc[i];
            int cSrc = btByte < 0 ? ( Byte.MAX_VALUE + 1 ) * 2 + btByte : btByte;
            long nXor = ((long)nKey2) / ((long)256);
            byte btTmp = (byte)(cSrc^nXor);
            FirstResult[i] = btTmp < 0 ? ( Byte.MAX_VALUE + 1 ) * 2 + btTmp : btTmp;
            byte cFirstResult = (byte)FirstResult[i];
            int nFirstResult = cFirstResult < 0 ? ( Byte.MAX_VALUE + 1 ) * 2 + cFirstResult : cFirstResult;
            long nFirstResultKey = (long)(nFirstResult + nKey2);
            nKey2 = (nFirstResultKey) * m_nC1Key + m_nC2Key;
        }
        String sRet = "";
        sRet = ValueToHex(FirstResult);
        return sRet;
    }
  
    public int HexToDecimal(char[] szSrc)
    {
        int nRet = 0;
        int nLen = szSrc.length;
        for (int i=0;i<nLen;i++)
        {
            byte cChar = (byte)szSrc[i];
            nRet = nRet * 16;
            nRet += HexToDecimal(cChar);
        }
        return nRet;
    }
  
    public int HexToDecimal(byte cChar)
    {
        if (cChar == 'A' || cChar == 'a')
            return 10;
        if (cChar == 'B' || cChar == 'b')
            return 11;
        if (cChar == 'C' || cChar == 'c')
            return 12;
        if (cChar == 'D' || cChar == 'd')
            return 13;
        if (cChar == 'E' || cChar == 'e')
            return 14;
        if (cChar == 'F' || cChar == 'f')
            return 15;
        return (cChar-48);
    }
  
    public String Decrypt(byte szSrc[],int Key)
    {
        if (szSrc == null)
            return null;
        int nSrcLen = szSrc.length;
        byte FirstResult[] = new byte[nSrcLen/2];
        for (int i=0;i<nSrcLen/2;i++)
        {
            FirstResult[i] = 0;
        }
        int nLen = 0;
        FirstResult = HexToValue(szSrc);
        byte szFirstResult[] = FirstResult;
        byte szBuf[] = new byte[nSrcLen/2];
        for (int i=0;i<nSrcLen/2;i++)
        {
            szBuf[i] = 0;
        }
        byte szResult[] = new byte[nSrcLen/2];
        for (int i=0;i<nSrcLen/2;i++)
        {
            szResult[i] = 0;
        }
        int nKey = Key < 0 ? ( Integer.MAX_VALUE + 1 ) * 2 + Key : Key;
        long nKey2 = (long)nKey;
        for(int I = 0 ; I < nSrcLen/2 ; I++)
        {
            int nVal = szFirstResult[I] < 0 ? ( Byte.MAX_VALUE + 1 ) * 2 + szFirstResult[I] : szFirstResult[I];
            long nFirstResult = ((long)nVal);
            long nXor = (nKey2/(long)256);
            long nXorResult = nFirstResult ^ nXor;
            szResult[I] = (byte)(nXorResult);
            byte cFirstResult = ((byte)szFirstResult[I]);
            long cFirstResultKey = (nFirstResult + nKey2);
            nKey2 = cFirstResultKey * m_nC1Key + m_nC2Key;
        }
        String sRet = new String(szResult);
        return sRet;
    }
}

// LEncrypt.h: interface for the CLEncrypt class.
//
//////////////////////////////////////////////////////////////////////

#if !defined(AFX_LEncrypt_H__E90C5977_3621_4B32_97AF_68E9CF9A0CC1__INCLUDED_)
#define AFX_LEncrypt_H__E90C5977_3621_4B32_97AF_68E9CF9A0CC1__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

class CLEncrypt  
{
public:
    unsigned long m_nC1Key;
    unsigned long m_nC2Key;

    CLEncrypt();
    virtual ~CLEncrypt();

    char HexaChar(int nVal);
    void ValueToHex(CString &sRet,unsigned char * szSrc,int nLen);
    void HexToValue(unsigned char * szDest,int * nDestLen,LPCTSTR szSrc);
    void Encrypt(CString &sRet,LPCTSTR szSrc,int Key);
    int HexToDecimal(LPCTSTR szSrc);
    int HexToDecimal(unsigned char cChar);
    void Decrypt(CString &sRet,LPCTSTR szSrc,int Key);

};

#endif // !defined(AFX_LENCRIPT_H__E90C5977_3621_4B32_97AF_68E9CF9A0CC1__INCLUDED_)


// LEncrypt.cpp: implementation of the CLEncrypt class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "LEncrypt.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CLEncrypt::CLEncrypt()
{
    m_nC1Key = 74102;
    m_nC2Key = 12337;
}

CLEncrypt::~CLEncrypt()
{

}
char CLEncrypt::HexaChar(int nVal)
{
    char * szHexaChar = "0123456789ABCDEF";
    if (nVal > 15)
        nVal = 0;
    return szHexaChar[nVal];
}

// Byte로 구성된 데이터를 Hexadecimal 문자열로 변환
void CLEncrypt::ValueToHex(CString &sRet,unsigned char * szSrc,int nLen)
{
    // int I;
    // SetLength(Result, Length(S)*2); // 문자열 크기를 설정
    // for I = 0 to Length(S)-1 do
    unsigned char szBuf[1024];
    memset(szBuf,0,sizeof(szBuf));
    for(int I = 0 ; I < nLen ; I++)
    {
        szBuf[(I*2)+0] = HexaChar(((unsigned char)szSrc[I]) / 16);
        szBuf[(I*2)+1] = HexaChar(((unsigned char)szSrc[I]) % 16);
    }
    sRet = szBuf;
}

// Hexadecimal로 구성된 문자열을 Byte 데이터로 변환
void CLEncrypt::HexToValue(unsigned char * szDest,int *nDestLen,LPCTSTR szSrc)
{
    // int I;
    // SetLength(Result, Length(S) div 2);
    // for I = 0 to (Length(S) div 2) - 1 do
    int nLen = strlen(szSrc);
    for(int I = 0 ; I < nLen/2; I++)
    {
        char szChar[4];
        memset(szChar,0,sizeof(szChar));
        memcpy(szChar,&szSrc[I*2],2);
        szDest[I] = HexToDecimal(szChar);
    }
    *nDestLen = nLen/2;
}

// 암호걸기
void CLEncrypt::Encrypt(CString & sRet,LPCTSTR szSrc,int Key)
{
    unsigned long nKey2 = Key;
    // byte I;
    // CString FirstResult;
    // SetLength(FirstResult, Length(S)); // 문자열의 크기를 설정
    unsigned char FirstResult[1024];
    memset(FirstResult,0,sizeof(FirstResult));
    // for I = 1 to Length(S) do 
    int nLen = strlen(szSrc);
    for(int I = 0 ; I < nLen ; I++)
    {
        unsigned char cSrc = ((unsigned char)szSrc[I]);
        unsigned long nXor = ((unsigned long)nKey2/(unsigned long)256);
        // shr : 오른쪽으로 쉬프트 시킴.
        FirstResult[I] = (unsigned char)
            (
            cSrc ^ nXor
            ); // ^ : xor
        unsigned char cFirstResult = ((unsigned char)FirstResult[I]);
        unsigned long nFirstResultKey = (unsigned long)(cFirstResult + nKey2);
        nKey2 = (nFirstResultKey) * m_nC1Key + m_nC2Key;
    }
    ValueToHex(sRet,FirstResult,nLen);
}

int CLEncrypt::HexToDecimal(LPCTSTR szSrc)
{
    int nRet = 0;
    int nLen = strlen(szSrc);
    for (int i=0;i<nLen;i++)
    {
        char cChar = szSrc[i];
        nRet = nRet * 16;
        nRet += HexToDecimal(cChar);
    }
    return nRet;
}

int CLEncrypt::HexToDecimal(unsigned char cChar)
{
    // 0 : 48
    if (cChar == 'A' || cChar == 'a')
        return 10;
    if (cChar == 'B' || cChar == 'b')
        return 11;
    if (cChar == 'C' || cChar == 'c')
        return 12;
    if (cChar == 'D' || cChar == 'd')
        return 13;
    if (cChar == 'E' || cChar == 'e')
        return 14;
    if (cChar == 'F' || cChar == 'f')
        return 15;
    return cChar-48;
}

// 암호풀기
void CLEncrypt::Decrypt(CString &sRet,LPCTSTR szSrc,int Key)
{
    // byte I;
    // CString FirstResult;
    // FirstResult = HexToValue(S);
    unsigned char FirstResult[1024];
    memset(FirstResult,0,sizeof(FirstResult));
    int nLen = 0;
    HexToValue(FirstResult,&nLen,szSrc);
    // SetLength( Result, Length(FirstResult) );
    // for I = 1 to Length(FirstResult) do
    LPCTSTR szFirstResult = (LPCTSTR)FirstResult;
    unsigned char szBuf[1024];
    memset(szBuf,0,sizeof(szBuf));
    unsigned char szResult[1024];
    memset(szResult,0,sizeof(szResult));
    unsigned long nKey2 = Key;
    for(int I = 0 ; I < nLen ; I++)
    {
        unsigned long nFirstResult = ((unsigned long)szFirstResult[I]);
        unsigned long nXor = (nKey2/(unsigned long)256);
        unsigned long nXorResult = nFirstResult ^ nXor;
        szResult[I] = (unsigned char)(nXorResult);
        unsigned char cFirstResult = ((unsigned char)szFirstResult[I]);
        unsigned long cFirstResultKey = (cFirstResult + nKey2);
        nKey2 = cFirstResultKey * m_nC1Key + m_nC2Key;
    }
    sRet = szResult;
}

출처 : 고급 웹 UI 개발 라이브러리 Web Development Library 소스공개 : http://www.webdevlib.net
Posted by 현자

댓글을 달아 주세요

1. Flash 소스

CS 3.0 에서 테스트 되었습니다.

var urlVariables:URLVariables = new URLVariables();
var sendData:String =
"동해물과,백두산이,마르고 닳도록,하느님이,";

urlVariables.textData = sendData;
var urlRequest:URLRequest = new URLRequest();
urlRequest.method = URLRequestMethod.POST;
urlRequest.url = "http://localhost/getFlashLog.jsp";

urlRequest.data = urlVariables;
 
var urlLoader:URLLoader = new URLLoader();
urlLoader.addEventListener( Event.COMPLETE, onLoaderComplete );
urlLoader.load( urlRequest );
 
function onLoaderComplete( e: Event ): void
{
 var urlVariables:URLVariables = new URLVariables( urlLoader.data );
 
 if( urlVariables[ "error" ] == "error" )
 {
  trace( "error" );
  return;
 }
}


2. JSP 소스

String 형태로 던져 주고 스트링 형태로 처리하는건 깔끔하지가 않다.
백터에 넣어서 배열로 처리

<%@ page language="java" contentType="text/html; charset=EUC-KR" pageEncoding="utf-8"%>
<%@ page import="java.io.*"%>
<jsp:directive.page import="java.util.StringTokenizer"/>
<jsp:directive.page import="java.util.Vector"/>

<%
 request.setCharacterEncoding("utf-8");
 String req = request.getParameter("textData");
 
 int parameterCnt = 7;

 
 StringTokenizer st = new StringTokenizer(req, ",");
 
 Vector vt = new Vector();
 
 int cnt=0;
 while(st.hasMoreTokens()){
  vt.add(cnt, st.nextToken());
  cnt++;
 }
 
 String path = "D://flashLog/";
 BufferedWriter bw = null;
 
 try{
  bw = new BufferedWriter( new FileWriter( path + "test.txt" ));
  
  for(int j=0; j < vt.size(); j++){
   if(j % parameterCnt != parameterCnt - 1){
    bw.write(vt.get(j).toString() + ", ");
    System.out.print(vt.get(j).toString() + ", ");
   }else{
    bw.write(vt.get(j).toString() +":\n");
    System.out.println(vt.get(j).toString() +":");
   }
  }
  
  System.out.println("성공적으로 파일을 저장하였습니다.");

 }catch(Exception e){
  e.printStackTrace();
 }finally{
  bw.close();
 }
%>

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</script>

</head>

<body>
</body>
</html>

'Language > Flash' 카테고리의 다른 글

flash 에서 로그남기기( 웹 페이지로 전달 )  (0) 2011.06.02
Posted by 현자

댓글을 달아 주세요


try {
   // ...
}
catch(Exception e){
   StackTraceElement[] elem = e.getStackTrace();
   for ( int i = 0; i < elem.length; i++ )
      log.info(elem[i]);
}

Posted by 현자

댓글을 달아 주세요

2011.05.03 15:18

post 방식으로 팝업 열기 Language/JavaScript2011.05.03 15:18

function openPop(target1, target2)
 {
 
  var f = document.map;
  
  var w = screen.availWidth-10;
  var h = screen.availHeight - 30 ;
  var settings = 'height='+h+',width='+w+',top=0,left=0;
  
  window.open( "", "pop", settings);
  
  var url = "http://sound10000w.tistory.com";
  
//인자로 넣어 줄 값 Form 에서 hidden으로 설정
  f.m1.value = target1;
  f.m2.value = target2;
  
  f.target = 'pop';
  f.action = url;
  f.method = 'post';
  
  f.submit();
 }
Posted by 현자

댓글을 달아 주세요

2011.03.30 14:22

Page Refresh Language/HTML2011.03.30 14:22

<meta http-equiv="refresh" content="180">

http-equiv 타입을 refresh 로 설정하면 현재 페이지가 자동으로 갱신된다.

<meta http-equiv="refresh" content="3" URL="test.txt">

이런식으로 URL을 붙여 다른 페이지로 이동 또는 자동 실행을 할 수도 있다.

content 에는 초단위로 값을 설정해 주면 된다.

'Language > HTML' 카테고리의 다른 글

이메일 주소 연동시키기  (0) 2011.09.03
robots.txt 파일 만들기  (0) 2011.07.21
Page Refresh  (0) 2011.03.30
[JAVA]TXT 파일 인코딩 설정하여 열기  (1) 2011.03.11
form target  (0) 2011.01.26
글자수제한 스크립트  (0) 2010.09.28
Posted by 현자

댓글을 달아 주세요

// 지우기 전에 확인하기~
function deleteAction(){
  var delFlag = window.confirm('정말 삭제 하시겠습니까?');
       
        if(delFlag){
           //확인버튼을 눌렀을 경우 수행 할 부분
           ;               
        }else{
           //취소버튼을 눌렀을 경우 수행 할 부분
            ;
        }
 }

'Language > JavaScript' 카테고리의 다른 글

div를 이용한 특정부분만 갱신하기~  (0) 2011.07.06
post 방식으로 팝업 열기  (0) 2011.05.03
확인 창 결과에 따라 분기시키기  (0) 2011.03.30
unicode 한글 변환 코드  (0) 2011.03.18
unicode 한글 변환  (0) 2011.03.18
Post 방식으로 팝업 창 열기  (0) 2010.05.07
Posted by 현자

댓글을 달아 주세요

2011.03.18 17:14

unicode 한글 변환 코드 Language/JavaScript2011.03.18 17:14

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Insert title here</title>
</head>
<body>
<script type="text/javascript">
function trans(){
 var str = document.getElementById("hangul").value;
 
 document.getElementById("unicode").value = replaceAll(escape(str),"%","\\");
}

function detrans(){
 var str = document.getElementById("unicode2").value;
 
 document.getElementById("hangul2").value = unescape(replaceAll(str,"\\","%"));
}
function replaceAll(strTemp, strValue1, strValue2){
 
    while(1){
        if( strTemp.indexOf(strValue1) != -1 )
            strTemp = strTemp.replace(strValue1, strValue2);
        else
            break;
    }
    return strTemp;
}
</script>
한글 -> 유니코드
<input type="text" name="hangul" id="hangul" onkeyDown="JavaScript:if(event.keyCode==13){trans();}">
<input type="button" name="aa" value="변환" onclick="trans()">
결과 :<input type="text" name="unicode" id="unicode" size="50">
<br><br>
유니코드 -> 한글
<input type="text" name="unicode2" id="unicode2" onkeyDown="JavaScript:if(event.keyCode==13){detrans();}">
<input type="button" name="aa" value="변환" onclick="detrans()">
결과 :<input type="text" name="hangul2" id="hangul2" size="50">
</body>
</html>

'Language > JavaScript' 카테고리의 다른 글

post 방식으로 팝업 열기  (0) 2011.05.03
확인 창 결과에 따라 분기시키기  (0) 2011.03.30
unicode 한글 변환 코드  (0) 2011.03.18
unicode 한글 변환  (0) 2011.03.18
Post 방식으로 팝업 창 열기  (0) 2010.05.07
JavaScript로 윈도우 7 확인하기  (0) 2010.05.06
Posted by 현자

댓글을 달아 주세요