[프로젝트, 3학년] MultiCopy (다중복사 프로그램)

류명운

·

2016. 1. 2. 21:50

반응형

 

프로젝트명  MultiCopy Program
개 발 언 어  Java, C++ Database  
개 발 도 구  Eclipse Luna
 * C++ : Visual Studio 2010
라이브러리  JNI(Java Native Interface), Fat jar(Eclipse plugin), KeyboardHook.jar
 Java - awt.Robot, awt.Clipboard
프로젝트 기간  2016.01.01 ~ 2016.01.02 프로젝트 종류  스터디 개인 프로젝트
개 발 종 류  키로그 프로그램 담 당  메인 프로그래밍
프로그램 요약  
 <개발 목적>
평소 프로젝트 관련 보고서를 작성하면서 불편했던 복사 붙여넣기의 한계점을 극복하기 개발해보았습니다.


 <프로그램 설명>
총 4개의 저장소를 기반으로 단축키(F1 ~ F8)을 이용하여 구현한 다중복사 프로그램. jdk 1.3 버전 이상에서 지원해주는 robot, clipboard 라이브러리 및 키 감지를 위한 C++에서 작성된 keyboardhook.dll 파일을 JNI로 호출하여 구현


 <특이 사항>
 * 개선해야할 점 : multicopy 프로그램이 서비스에 동작 중이면 F1 ~ F7 키에 대한 감지를 해당 프로세서에서 가장 먼저하여 다른 어플리케이션에서 중복 감지되는 현상이 안 일어나도록(F1 키 입력에 따른 도움말이 실행된다던가) 개선해야 할 것으로 판단됨. 하지만 해당 부분은 C++ 단에서 작업해야 할 사항으로 판단되어 공부가 부족한 현 시점에서는 제한됨..

주 요 화 면








 

 

주요소스

//사용 라이브러리
import java.awt.AWTException;
import java.awt.Robot;
import java.awt.Toolkit;
import java.awt.datatransfer.Clipboard;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.StringSelection;
import java.awt.datatransfer.Transferable;
import java.awt.datatransfer.UnsupportedFlavorException;

//전역변수 선언
private static JPanel contentPane;
private static JTextField textField_1;
private static JTextField textField_2;
private static JTextField textField_3;
private static JTextField textField_4;

final static int f1 = 112; //f1 key code
final static int f2 = 113; //f2 key code
final static int f3 = 114; //f3 key code
final static int f4 = 115; //f4 key code
final static int f5 = 116; //f5 key code
final static int f6 = 117; //f6 key code
final static int f7 = 118; //f7 key code
final static int f8 = 119; //f8 key code

static String temp1 = null;
static String temp2 = null;
static String temp3 = null;
static String temp4 = null;

//복사 함수
public static void copy(int temp)throws Exception {
	Robot robot = new Robot();
	Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
	robot.keyPress(KeyEvent.VK_CONTROL);
	robot.keyPress(KeyEvent.VK_C);
	robot.keyRelease(KeyEvent.VK_C);
	robot.keyRelease(KeyEvent.VK_CONTROL);
	Thread.sleep(100); // 1초 쉬기
	Transferable contents = clipboard.getContents(clipboard); // 드래그된 영역 클립보드에 저장
	if (contents != null) { // 저장된 내용이 존재한다면
		switch (temp) {
		case 112:
			temp1 = (String)(contents.getTransferData(DataFlavor.stringFlavor)); // 클립보드에 저장된 내용 temp1변수에 저장

			textField_1.setText(temp1); // 저장된 내용 스윙 텍스트필드에 출력
			break;
		case 113:
			temp2 = (String)(contents.getTransferData(DataFlavor.stringFlavor));
			textField_2.setText(temp2);
			break;
		case 114:
			temp3 = (String)(contents.getTransferData(DataFlavor.stringFlavor));
			textField_3.setText(temp3);
			break;
		case 115:
			temp4 = (String)(contents.getTransferData(DataFlavor.stringFlavor));
			textField_4.setText(temp4);
			break;
		default:
			break;
		}
	}
}

//붙여넣기 함수
public static void paste(int temp)throws Exception {
	Robot robot = new Robot();
	Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
	StringSelection contents;
	switch (temp) {
	case 116:
		contents = new StringSelection(temp1);
		clipboard.setContents(contents, null);
		break;
	case 117:
		contents = new StringSelection(temp2);
		clipboard.setContents(contents, null);
		break;
	case 118:
		contents = new StringSelection(temp3);
		clipboard.setContents(contents, null);
		break;
	case 119:
		contents = new StringSelection(temp4);
		clipboard.setContents(contents, null);
		break;
	default:
		break;
	}
	robot.keyPress(KeyEvent.VK_CONTROL);
	robot.keyPress(KeyEvent.VK_V);
	robot.keyRelease(KeyEvent.VK_V);
	robot.keyRelease(KeyEvent.VK_CONTROL);
}

//메인 스레드 작성
public static void main(String[]args)throws Exception {
	new multiCopy(); //작성한 프로그램 GUI 생
	new GlobalKeyListener().addKeyListener(new KeyAdapter() { //키 감지 객체생성
		 @ Override
		public void keyPressed(KeyEvent event) { //키 입력이 감지될 경우
			//사용자 입력키에 따른 copy, paste 기능을 수행하는 함수호출
			try {
				switch (event.getVirtualKeyCode()) {
				case f1:
					copy(f1);
					break;
				case f2:
					copy(f2);
					break;
				case f3:
					copy(f3);
					break;
				case f4:
					copy(f4);
					break;
				case f5:
					paste(f5);
					break;
				case f6:
					paste(f6);
					break;
				case f7:
					paste(f7);
					break;
				case f8:
					paste(f8);
					break;
				default:
					break;
				}
			} catch (Exception e) {
				System.out.println(e);
			}
		}
	});
	//무한루프
	while (true)
		Thread.sleep(100);
}
반응형