IT_Programming/Java

[JNI] 키보드 후킹 소스

JJun ™ 2009. 4. 13. 00:00


tool-maul5.zip

[원문]

http://www.velocityreviews.com/forums/t360927-setwindowshookex-not-notifing-me-on-key-pressed-using-jni-and-c-dll.html


 

[환경]
1. JAVA 다운로드 및 설치

2. Borland C++ 컴파일러 다운로드 및 설치

3. JAVA_HOME, 자바 및 C PATH 설정   (ex) PATH=C:\j2sdk1.4.2_08\bin;C:\bcc55\bin

 

 

[컴파일]

1. javac

2. javah -jni $(FileNameNoExt)
3. C++ 소스파일 컴파일
    bcc32 -c -IC:\bcc55\Include -LC:\bcc55\Lib -IC:\jdk1.5.0_17\include -IC:\jdk1.5.0_17

     \include\win32 $(FileNameNoExt)

 

4. 컴파일된 C++ 오브젝트 화일을 동적라이브러리로 생성
   bcc32 -tWD -IC:\bcc55\include -LC:\bcc55\lib -IC:\jdk1.5.0_17\include -IC:\jdk1.5.0_17

    \include\win32 $(FileNameNoExt).obj

5. [참고] java.library.path 설정이 필요한 경우 방법
   1) LD_LIBRARY_PATH 설정(SHLIB_PATH) :  java.library.path는 LD_LIBRARY_PATH를 기본적으로 사용
   2) java -D 옵션 활용 :  ex) java -Djava.library.path=./ Hello

 

[EditPlus]

1. 볼랜드 C++ bin 디렉토리를 PATH로 설정 할 것

////////////////////////////////////////////////////////////////////////////////
// FrameTest.java
//
00001 : package hook;
00002 :
00003 : import java.awt.*;
00004 : import java.awt.event.*;
00005 : import javax.swing.*;
00006 :
00007 : public class FrameTest extends JFrame {
00008 :     private JPanel mainPanel;
00009 :     private JTextArea mainTextArea;
00010 :     private HookTest hook;
00011 :    
00012 :     public static void main(String[] args) {
00013 :         SwingUtilities.invokeLater(new Runnable() {
00014 :             public void run() {
00015 :                 new FrameTest().setVisible(true);
00016 :             }
00017 :         });
00018 :     }
00019 :
00020 :     FrameTest() {
00021 :         super("FrameTest");
00022 :         setSize(200, 200);
00023 :         setDefaultCloseOperation(EXIT_ON_CLOSE);
00024 :         mainPanel = new JPanel();
00025 :         mainPanel.setLayout(new BorderLayout());
00026 :         mainTextArea = new JTextArea();
00027 :         mainPanel.add(mainTextArea, BorderLayout.CENTER);
00028 :         getContentPane().add(mainPanel);
00029 :         addWindowListener(new WindowAdapter() {
00030 :             public void windowClosing(WindowEvent event) {
00031 :                 hook.unRegisterHook();
00032 :             }
00033 :         });
00034 :         new Thread() {
00035 :             public void run() {
00036 :                 hook = new HookTest();
00037 :                 hook.registerHook();
00038 :             }
00039 :         }.start();
00040 :     }
00041 : }

 

////////////////////////////////////////////////////////////////////////////////
// HookTest.java
//
00001 : package hook;
00002 :
00003 : public class HookTest {
00004 :     static {
00005 :         System.loadLibrary("HookTest");
00006 :     }
00007 :
00008 :     void processKey(int key, boolean pressed) {
00009 :         System.out.println("Java: HookTest.processKey - key = " + key
00010 :                 + (pressed ? " pressed" : " released"));
00011 :     }


tool-maul5.zip
0.0MB