[프로젝트, 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);
}
반응형
'삶의 늪에 들어 가기 전 > 정리중(미정리)' 카테고리의 다른 글
정보처리기사 문제 파싱 알고리즘 (0) | 2016.01.08 |
---|---|
[프로젝트, 3학년] 키로그(Keylog) 모의해킹 프로그램 (2) | 2016.01.02 |
[동영상편집]반디캠 촬영 파일 소리 증폭 방법 (2) | 2015.12.26 |
[프로젝트, 3학년] SmartFeel (0) | 2015.12.25 |
[프로젝트, 3학년] Packet Flooder (0) | 2015.12.25 |