자바 마우스 갈고리 활용
18683 단어 【JavaApplication】
간단 한 그림 그리 기 도구, 채색기 같은 것 은 마지막 에 작은 소프트웨어 로 통합 된다.그러나 이 과정 에서 자바 에서 화면 이 실 현 된 것 을 발견 했다.
캡 처, 색상 을 채취 할 때 마우스 의 조작 이 부족 해 보 입 니 다. 위의 기능 은 보통 전체 화면 을 미리 얻 은 다음 에 하 는 것 입 니 다.
이 그림 에서 조작 합 니 다.이것 은 인터페이스 소프트웨어 가 반드시 활성화 상태 에 있어 야 하기 때문에 매우 불편 하 다.
사실 위의 그런 조작 으로 기능 을 실현 하 는 것 도 그다지 나 쁘 지 는 않 지만 흥미 가 있 기 때문에 자바 가 몇 번 째 를 빌 리 는 지 보고 싶 습 니 다.
3 자 jar 는 windows 바 텀 과 의 상호작용 을 실현 할 수 있 습 니까?그래서 인터넷 에서 찾 아 보 니 다음 과 같다.
검색 을 통 해 '마우스 갈고리' 를 통 해 이 루어 질 수 있 는 것 이 무엇 인지 알 게 되 었 습 니 다. 다음은 '갈고리' 입 니 다.
(Hook), Windows ,
, 。 ,
。 window 。
, , 。 , ,
, 。 ( ) ,
, 。
Hook API Windows , ,
API ,Hook API
API , API 。
1) 。
(2) 。
(3) Shell 。 。
(4) 。
(5)
, java ?
jna
JNA(Java Native Access ) Java (native library: Window dll) Native/JNI 。 java native library ,JNA Java native function 。
, , , .
MouseLLHook.java
package com.kiritor; import java.awt.AWTException; import java.awt.Color; import java.awt.Cursor; import java.awt.MouseInfo; import java.awt.Point; import java.awt.Robot; import com.sun.jna.Pointer; import com.sun.jna.platform.win32.*; import com.sun.jna.platform.win32.WinUser.*; import com.sun.jna.platform.win32.WinDef.HMODULE; import com.sun.jna.platform.win32.WinDef.LRESULT; import com.sun.jna.platform.win32.WinDef.WPARAM; import com.sun.jna.platform.win32.WinUser.HHOOK; import com.sun.jna.platform.win32.WinUser.KBDLLHOOKSTRUCT; import com.sun.jna.platform.win32.WinUser.LowLevelKeyboardProc; public class MouseLLHook { private boolean flag; public ColorFrame getColorFrame() { return colorFrame; } public void setColorFrame(ColorFrame colorFrame) { this.colorFrame = colorFrame; } private static ColorFrame colorFrame = null; // public static Point mousepoint; public static MouseInfo mouseInfo = null; static Color pixel = new Color(0, 0, 0); static Integer R = 0, G = 0, B = 0; static Integer X = 0, Y = 0; public static final int WM_LBUTTONUP = 514; public static final int WM_LBUTTONDOWN = 513; public static final int WM_RBUTTONUP = 517; public static final int WM_RBUTTONDOWN = 516; public static final int WM_MOUSEHWHEEL = 526; public static final int WM_MOUSEWHEEL = 522; public static final int WM_MOUSEMOVE = 512; static HHOOK mouseHHK, keyboardHHK;// 、 static LowLevelMouseProc mouseHook;// static LowLevelKeyboardProc keyboardHook;// public MouseLLHook(ColorFrame colorFrame) { this.colorFrame=colorFrame; } // static void setHook() { HMODULE hMod = Kernel32.INSTANCE.GetModuleHandle(null); mouseHHK = User32.INSTANCE.SetWindowsHookEx(WinUser.WH_MOUSE_LL, mouseHook, hMod, 0); mouseHHK.nativeType(); keyboardHHK = User32.INSTANCE.SetWindowsHookEx(WinUser.WH_KEYBOARD_LL, keyboardHook, hMod, 0); } // static void unhook() { User32.INSTANCE.UnhookWindowsHookEx(keyboardHHK); User32.INSTANCE.UnhookWindowsHookEx(mouseHHK); } public void getColor(String[] args) { keyboardHook = new LowLevelKeyboardProc() { @Override // :http://msdn.microsoft.com/en-us/library/windows/desktop/ms644985(v=vs.85).aspx public LRESULT callback(int nCode, WPARAM wParam, KBDLLHOOKSTRUCT lParam) { int w = wParam.intValue(); // alt w=.WM_SYSKEYDOWN; w=WinUser.WM_KEYDOWN if (w == WinUser.WM_KEYDOWN || w == WinUser.WM_SYSKEYDOWN) System.out.println("key down: vkCode = " + lParam.vkCode); else if (w == WinUser.WM_KEYUP || w == WinUser.WM_SYSKEYUP) System.out.println("key up: vkCode = " + lParam.vkCode); // 'q' ,'q' vkCode 81 if (lParam.vkCode == 81) { unhook(); System.err.println("program terminated."); System.exit(0); } return User32.INSTANCE.CallNextHookEx(keyboardHHK, nCode, wParam, lParam.getPointer()); } }; mouseHook = new LowLevelMouseProc() { @Override // :http://msdn.microsoft.com/en-us/library/windows/desktop/ms644986(v=vs.85).aspx public LRESULT callback(int nCode, WPARAM wParam, MOUSEHOOKSTRUCT lParam) { switch (wParam.intValue()) { case WM_MOUSEMOVE: //System.out.print("mouse moved:"); break; case WM_LBUTTONDOWN: { try { Robot robot = new Robot(); mousepoint = mouseInfo.getPointerInfo().getLocation(); // System.out.println(mousepoint); pixel = robot.getPixelColor(mousepoint.x, mousepoint.y); X = mousepoint.x; Y = mousepoint.y; R = pixel.getRed(); G = pixel.getGreen(); B = pixel.getBlue(); String s16 = "#" + Integer.toHexString(R) + Integer.toHexString(G) + Integer.toHexString(B);// 。 Color col = new Color(R, G, B); if(colorFrame.isFlag()==false) { colorFrame.getRedText().setText(R.toString()); colorFrame.getGreenText().setText(G.toString()); colorFrame.getBlueText().setText(B.toString()); colorFrame.getColor16Text().setText(s16); colorFrame.getNewColor().setBackground(col); colorFrame.setFlag(true); } colorFrame.setVisible(true); } catch (AWTException ex) { ex.printStackTrace(); } } break; case WM_LBUTTONUP: //System.out.print("mouse left button up"); break; case WM_RBUTTONUP: //System.out.print("mouse right button up:"); break; case WM_RBUTTONDOWN: //System.out.print("mouse right button down:"); break; case WM_MOUSEWHEEL: //System.out.print("mouse wheel rotated:"); break; } //System.out.println("(" + lParam.pt.x + "," + lParam.pt.y + ")"); return User32.INSTANCE.CallNextHookEx(mouseHHK, nCode, wParam, lParam.getPointer()); } }; setHook(); int result; MSG msg = new MSG(); // // while , GetMessage , 。 while ((result = User32.INSTANCE.GetMessage(msg, null, 0, 0)) != 0) { if (result == -1) { System.err.println("error in GetMessage"); unhook(); break; } else { User32.INSTANCE.TranslateMessage(msg); User32.INSTANCE.DispatchMessage(msg); } } unhook(); } }
package com.kiritor; import com.sun.jna.Structure; import com.sun.jna.platform.win32.BaseTSD.ULONG_PTR; import com.sun.jna.platform.win32.WinDef.HWND; import com.sun.jna.platform.win32.WinDef.LRESULT; import com.sun.jna.platform.win32.WinDef.WPARAM; import com.sun.jna.platform.win32.WinUser.HOOKPROC; import com.sun.jna.platform.win32.WinUser.POINT; interface LowLevelMouseProc extends HOOKPROC { LRESULT callback(int nCode, WPARAM wParam, MOUSEHOOKSTRUCT lParam); } public class MOUSEHOOKSTRUCT extends Structure { public class ByReference extends MOUSEHOOKSTRUCT implements Structure.ByReference { }; public POINT pt; public HWND hwnd; public int wHitTestCode; public ULONG_PTR dwExtraInfo; }
ColorFrame.java
4. 567913. 일부 이미지 파일 을 잃 어 버 려 서 인터페이스 효과 도 는 붙 이지 않 습 니 다!이 프로그램 에 사용 할 jar 패키지package com.kiritor; import java.awt.AWTException; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Cursor; import java.awt.Dimension; import java.awt.Font; import java.awt.Graphics; import java.awt.GraphicsDevice; import java.awt.GraphicsEnvironment; import java.awt.Image; import java.awt.Menu; import java.awt.MenuItem; import java.awt.PopupMenu; import java.awt.Rectangle; import java.awt.Robot; import java.awt.SystemTray; import java.awt.Toolkit; import java.awt.TrayIcon; import java.awt.datatransfer.StringSelection; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.event.MouseMotionAdapter; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JWindow; public class ColorFrame extends JWindow { private boolean flag= false; public boolean isFlag() { return flag; } public void setFlag(boolean flag) { this.flag = flag; } private JLabel color16 = null; private JLabel color16Text = null; private JLabel red = null; private JLabel redText = null; private JLabel green = null; private JLabel greenText = null; private JLabel blue = null; private JLabel blueText = null; private JPanel newColor = null; private JLabel newLabel = null; private int xx; private int yy; private boolean isDraging; private TrayIcon trayIcon; private JPanel bgJPanel = null; private ImageIcon bg = new ImageIcon(getClass().getClassLoader() .getResource("images/bg.png")); /** * */ // private JLabel jiantieban = null; private ImageIcon jiantiebanIcon = new ImageIcon(getClass() .getClassLoader().getResource("images/jiantieban.png")); private ImageIcon jiantiebanIcon_entered = new ImageIcon(getClass() .getClassLoader().getResource("images/jiantieban_entered.png")); // private JLabel getAgain = null; private ImageIcon getAgainIcon = new ImageIcon(getClass().getClassLoader() .getResource("images/getagain.png")); private ImageIcon getAgainIcon_entered = new ImageIcon(getClass() .getClassLoader().getResource("images/getagain_entered.png")); // private JLabel cancel = null; private ImageIcon cancelIcon = new ImageIcon(getClass().getClassLoader() .getResource("images/cancel.png")); private ImageIcon cancel_entered = new ImageIcon(getClass() .getClassLoader().getResource("images/cancel_entered.png")); public ColorFrame(){} public ColorFrame(int x,int y) { setLocation(x, y); } public void showUI() { init(); setSize(150, 150); setLayout(null); setAlwaysOnTop(true); addMouseListener(new MouseAdapter() { public void mousePressed(MouseEvent e) { requestFocus(); isDraging = true; xx = e.getX(); yy = e.getY(); } public void mouseReleased(MouseEvent e) { isDraging = false; } @Override public void mouseEntered(MouseEvent e) { // TODO Auto-generated method stub setFlag(true);// } }); addMouseMotionListener(new MouseMotionAdapter() { public void mouseDragged(MouseEvent e) { if (isDraging) { int left = getLocation().x; int top = getLocation().y; setLocation(left + e.getX() - xx, top + e.getY() - yy); } } }); setVisible(true); // // TestEvent t = new TestEvent(this); // t.setLayout(null); // t.add(bgJPanel); // this.getContentPane().add( t); add(bgJPanel); //setLocationRelativeTo(null); } public void init() { bgJPanel = new JPanel() { public void paintComponent(Graphics g) { super.paintComponent(g); g.drawImage(bg.getImage(), 0, 0, null); this.setOpaque(false); } }; bgJPanel.setOpaque(false); bgJPanel.setLayout(null); bgJPanel.setBounds(0, 0, 150, 150); newColor = new JPanel(); newLabel = new JLabel(" "); newLabel.setFont(new Font(" ", 0, 12)); newLabel.setBounds(30, 10, 30, 20); newColor.setBounds(20, 35, 50, 50); newColor.setBackground(Color.gray); red = new JLabel("Red:"); red.setFont(new Font(" ", 0, 12)); red.setBounds(80, 35, 30, 10); redText = new JLabel("sdf"); redText.setFont(new Font(" ", 0, 12)); redText.setBounds(115, 35, 30, 10); green = new JLabel("Green:"); green.setFont(new Font(" ", 0, 12)); green.setBounds(80, 53, 40, 10); greenText = new JLabel("sdf"); greenText.setFont(new Font(" ", 0, 12)); greenText.setBounds(115, 53, 30, 10); blue = new JLabel("Blue:"); blue.setFont(new Font(" ", 0, 12)); blue.setBounds(80, 71, 30, 10); blueText = new JLabel("sdf"); blueText.setFont(new Font(" ", 0, 12)); blueText.setBounds(115, 71, 30, 10); color16 = new JLabel(" :"); color16.setBounds(20, 95, 45, 10); color16.setFont(new Font(" ", 0, 10)); color16Text = new JLabel("#aaaa"); color16Text.setBounds(70, 95, 60, 10); color16Text.setFont(new Font(" ", 0, 12)); color16Text.setForeground(Color.red); /** */ // jiantieban = new JLabel(jiantiebanIcon_entered); jiantieban.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { // TODO Auto-generated method stub setClipboard(color16Text.getText()); } @Override public void mouseEntered(MouseEvent e) { // TODO Auto-generated method stub jiantieban.setIcon(jiantiebanIcon); setFlag(true); } @Override public void mouseExited(MouseEvent e) { // TODO Auto-generated method stub jiantieban.setIcon(jiantiebanIcon_entered); } }); jiantieban.setBounds(10, 115, 40, 20); // getAgain = new JLabel(getAgainIcon_entered); getAgain.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { // TODO Auto-generated method stub setFlag(false); setVisible(false); } @Override public void mouseEntered(MouseEvent e) { // TODO Auto-generated method stub getAgain.setIcon(getAgainIcon); } @Override public void mouseExited(MouseEvent e) { // TODO Auto-generated method stub getAgain.setIcon(getAgainIcon_entered); } }); getAgain.setBounds(55, 115, 40, 20); // cancel = new JLabel(cancel_entered); cancel.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { setVisible(false); } @Override public void mouseEntered(MouseEvent e) { // TODO Auto-generated method stub cancel.setIcon(cancelIcon); } @Override public void mouseExited(MouseEvent e) { // TODO Auto-generated method stub cancel.setIcon(cancel_entered); } }); cancel.setBounds(100, 115, 40, 20); bgJPanel.add(newLabel); bgJPanel.add(newColor); bgJPanel.add(red); bgJPanel.add(redText); bgJPanel.add(green); bgJPanel.add(greenText); bgJPanel.add(blue); bgJPanel.add(blueText); bgJPanel.add(color16); bgJPanel.add(color16Text); bgJPanel.add(jiantieban); bgJPanel.add(getAgain); bgJPanel.add(cancel); } public JPanel getNewColor() { return newColor; } public void setNewColor(JPanel newColor) { this.newColor = newColor; } public JLabel getColor16Text() { return color16Text; } public void setColor16Text(JLabel color16Text) { this.color16Text = color16Text; } public JLabel getRedText() { return redText; } public void setRedText(JLabel redText) { this.redText = redText; } public JLabel getGreenText() { return greenText; } public void setGreenText(JLabel greenText) { this.greenText = greenText; } public JLabel getBlueText() { return blueText; } public void setBlueText(JLabel blueText) { this.blueText = blueText; } public void getColor(String[] args) { new MouseLLHook(this).getColor(null); } public static void main(String[] args) { ColorFrame colorFrame = new ColorFrame(); colorFrame.showUI(); MouseLLHook hook = new MouseLLHook(colorFrame); hook.getColor(null); } /* */ public void setClipboard(String str) { StringSelection ss = new StringSelection(str); Toolkit.getDefaultToolkit().getSystemClipboard().setContents(ss, null); } }
http://download.csdn.net/detail/kiritor/5115277
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
자바 마우스 갈고리 활용작년 겨울방학 에 집에 돌아 와 아무 일 없 이 집에 서 코드 를 두 드 렸 다.주로 자바 언어 로 작은 활용: 확대경, 화면 캡 처 간단 한 그림 그리 기 도구, 채색기 같은 것 은 마지막 에 작은 소프트웨어 로 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.