Olá pessoal ! Uma duvida que eu verifiquei em alguns sites que fala do assunto ! é possivel utilizar algumas funções da API do windows com Java ? Se for o caso de poder utilizar, qual metodou ou implementação eu posso utilizar ?
É possivel utilizar a API do Windows 32 com Java ?
7 Respostas
Quais funções você pretende usar?
Provavelmente, vai precisar de JNI ou JNA, caso as funções desejadas dependam de interagir com DLL.
Se não for o caso, existe a possibilidade de tentar usar a classe Runtime e/ou ProcessBuilder
A classes Runtime e ProcessBuilder eu dei uma lida mas não se encaixa no que eu queria estudar. Tipo, é possivel utilizar algum ouvinte do mouse por exemplo e jogar em uma aplicação java ?
Tópico duplicado?
Até onde eu sei, o java consegue capturar as informações do mouse quando você está com o mouse sobre um elemento java (javafx, java swing, java awt).
O máximo que vai conseguir é algo assim
import java.awt.MouseInfo;
public class MyClass {
public static void main(String[] args) throws InterruptedException {
System.out.println("Mouse has " + MouseInfo.getNumberOfButtons() + " buttons");
while (true) {
Thread.sleep(100);
System.out.println("(" + MouseInfo.getPointerInfo().getLocation().x + ", "
+ MouseInfo.getPointerInfo().getLocation().y + ")");
}
}
}
a classe MouseInfo ela traz as respostas de “ouvinte” dos componentes awt, existe a possibilidade e pegar os eventos de mouse ate depois da borda desses componente ?? Por exemplo esse é o codigo que eu montei no NETBEANS:
/*
- To change this license header, choose License Headers in Project Properties.
- To change this template file, choose Tools | Templates
- and open the template in the editor.
*/
package descifrador.de.coordenadas.visao;
import com.sun.java.accessibility.util.AWTEventMonitor;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.awt.MouseInfo;
import java.awt.Point;
import java.awt.peer.MouseInfoPeer;
import java.util.EventListener;
/**
*
-
@author RIVALDO
*/
public class visualizador extends javax.swing.JFrame implements MouseMotionListener, MouseListener{/**
-
Creates new form visualizador <em>/ public visualizador() { initComponents(); } /</em>*
-
This method is called from within the constructor to initialize the form.
-
WARNING: Do NOT modify this code. The content of this method is always
-
regenerated by the Form Editor. */ @SuppressWarnings(“unchecked”) // private void initComponents() {
jPanel1 = new javax.swing.JPanel(); descricaoY = new javax.swing.JLabel(); descricaoX = new javax.swing.JLabel(); titulo = new javax.swing.JLabel(); posicaoY = new javax.swing.JLabel(); posicaoX = new javax.swing.JLabel();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
jPanel1.setBackground(new java.awt.Color(0, 0, 0));descricaoY.setForeground(new java.awt.Color(0, 102, 0));
descricaoY.setText(“POSIÇÃO Y:”);descricaoX.setForeground(new java.awt.Color(0, 102, 0));
descricaoX.setText(“POSIÇÃO X:”);titulo.setForeground(new java.awt.Color(0, 102, 0));
titulo.setText(“POSIÇÃO DO MOUSE”);posicaoY.setForeground(new java.awt.Color(0, 102, 0));
posicaoY.setText("…");posicaoX.setForeground(new java.awt.Color(0, 102, 0));
posicaoX.setText("…");javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1); jPanel1.setLayout(jPanel1Layout); jPanel1Layout.setHorizontalGroup( jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel1Layout.createSequentialGroup() .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel1Layout.createSequentialGroup() .addContainerGap() .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) .addGroup(jPanel1Layout.createSequentialGroup() .addComponent(descricaoX) .addGap(18, 18, 18) .addComponent(posicaoX, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) .addGroup(jPanel1Layout.createSequentialGroup() .addComponent(descricaoY) .addGap(18, 18, 18) .addComponent(posicaoY, javax.swing.GroupLayout.PREFERRED_SIZE, 62, javax.swing.GroupLayout.PREFERRED_SIZE)))) .addGroup(jPanel1Layout.createSequentialGroup() .addGap(36, 36, 36) .addComponent(titulo))) .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); jPanel1Layout.setVerticalGroup( jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel1Layout.createSequentialGroup() .addContainerGap() .addComponent(titulo) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 39, Short.MAX_VALUE) .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(descricaoY) .addComponent(posicaoY)) .addGap(36, 36, 36) .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(descricaoX) .addComponent(posicaoX)) .addGap(21, 21, 21)) );
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); getContentPane().setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) );
pack();
}//
/**
-
@param args the command line arguments
/
public static void main(String args[]) {
/ Set the Nimbus look and feel /
//
/ If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.- For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html
*/
try {
for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
if (“Windows”.equals(info.getName())) {
javax.swing.UIManager.setLookAndFeel(info.getClassName());
break;
}
}
} catch (ClassNotFoundException ex) {
java.util.logging.Logger.getLogger(visualizador.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (InstantiationException ex) {
java.util.logging.Logger.getLogger(visualizador.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (IllegalAccessException ex) {
java.util.logging.Logger.getLogger(visualizador.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (javax.swing.UnsupportedLookAndFeelException ex) {
java.util.logging.Logger.getLogger(visualizador.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
}
//
/* Create and display the form */ java.awt.EventQueue.invokeLater(new Runnable() { public void run() { new visualizador().setVisible(true); }
});
} - For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html
Point Local;
// Variables declaration - do not modify private javax.swing.JLabel descricaoX; private javax.swing.JLabel descricaoY; private javax.swing.JPanel jPanel1; private javax.swing.JLabel posicaoX; private javax.swing.JLabel posicaoY; private javax.swing.JLabel titulo; // End of variables declaration
<a class="mention" href="/u/override">@Override</a> public void mouseDragged(MouseEvent e) { //To change body of generated methods, choose Tools | Templates. posicaoY.setText(Integer.toString(e.getY())); posicaoX.setText(Integer.toString(e.getX())); }
<a class="mention" href="/u/override">@Override</a> public void mouseMoved(MouseEvent e) { posicaoY.setText(Integer.toString(e.getY())); posicaoX.setText(Integer.toString(e.getX())); //To change body of generated methods, choose Tools | Templates. }
<a class="mention" href="/u/override">@Override</a> public void mouseClicked(MouseEvent e) { posicaoY.setText(Integer.toString(e.getY())); posicaoX.setText(Integer.toString(e.getX()));//To change body of generated methods, choose Tools | Templates. }
<a class="mention" href="/u/override">@Override</a> public void mousePressed(MouseEvent e) { posicaoY.setText(Integer.toString(e.getY())); posicaoX.setText(Integer.toString(e.getX())); //To change body of generated methods, choose Tools | Templates. }
<a class="mention" href="/u/override">@Override</a> public void mouseReleased(MouseEvent e) { posicaoY.setText(Integer.toString(e.getY())); posicaoX.setText(Integer.toString(e.getX())); //To change body of generated methods, choose Tools | Templates. }
<a class="mention" href="/u/override">@Override</a> public void mouseEntered(MouseEvent e) { posicaoY.setText(Integer.toString(e.getY())); posicaoX.setText(Integer.toString(e.getX())); //To change body of generated methods, choose Tools | Templates. }
<a class="mention" href="/u/override">@Override</a> public void mouseExited(MouseEvent e) { posicaoY.setText(Integer.toString(e.getY())); posicaoX.setText(Integer.toString(e.getX())); //To change body of generated methods, choose Tools | Templates. }
public void iniciar(){ addMouseListener(this); addMouseMotionListener(this); setDefaultCloseOperation(EXIT_ON_CLOSE);
}
} -
Nele eu adicionei o this para ficar dentro da janela no JFrame, porem não existe um parametro diferente que eu pegue essas chamadas de fora.
Você precisa lembrar que o java depende de uma máquina virtual que pode ter limitações quanto a determinadas funcionalidades.
Mas, eu realmente não conheço outras maneiras de capturar eventos/dados do mouse sem ser estas.
O mais simples é usar JNA.
Exemplo:
Valeu Kronal ! Vou dar uma lida.