JNA y manipulacion de apis de Windows en JAVA

Iniciado por cyberserver, 24 Enero 2010, 07:31 AM

0 Miembros y 1 Visitante están viendo este tema.

cyberserver

 JNA: Auuu un proyecto relativamente nuevo que permite usar los metodos(funciones o procedimientos) dentro de una libreria dinamica sin necesidad de realizar ningun programa en c++ ni usar headers... :S

Para hacer esto les dejo estos codigos, para los que les interese valdran oro a los que no solo los guardaran en documentos y los abandonaran.

Uso de printf  que esta dentro de la libreia msvcrt. este codigo lo encontre en internet no recuerdo la pagina pero es la primera liga cuando buscas JNA java.

Código (java) [Seleccionar]
import com.sun.jna.Library;
import com.sun.jna.Native;
import com.sun.jna.Platform;

public class HelloWorld {

  public interface CLibrary extends Library {
      CLibrary INSTANCE = (CLibrary)Native.loadLibrary(
         (Platform.isWindows() ? "msvcrt" : "c"),
         CLibrary.class);
 
      void printf(String format, Object... args);
  }

  public static void main(String[] args) {
      CLibrary.INSTANCE.printf("Hola mundo!\n")
  }
}


Y el segundo codigo yo lo cree (claro basandome en el primero)no tiene gran ciencia si alguna ves has manejado programacion de apis por lo regular en vb 6.0, este codigo utiliza la api de windows de dar click...  ;D ;D

Código (java) [Seleccionar]
import com.sun.jna.Library;
import com.sun.jna.Native;
import com.sun.jna.Platform;
import javax.swing.*;

public class prueba {

  public interface CLibrary extends Library {
      CLibrary INSTANCE = (CLibrary)Native.loadLibrary(
         (Platform.isWindows() ? "user32" : "c"),
         CLibrary.class);
         //Firma de los metodos de la libreria
         public void mouse_event(int dwFlags, int dx, int dy, int cButtons, int dwExtraInfo);
  }

  public static void main(String[] args) {
  //Llamada al metodo
  CLibrary.INSTANCE.mouse_event(2,0,0,0,0);
 
  }
}


Si quieres saber de mas apis recomiendo el programita Api Guide, dentro de este viene una gran coleccion de apis y codigos que de ejemplo en vb 6.0 y .net



NOTA: Antes de poder usar estos codigos tienes que descargar el .jar de JNA. no recuerdo la pagina pero buscando en google en 1 minuto los encuentras "JNA.jar",
este paquete tendras que pegarlo en dentro de la ruta de la maquina virtual en
jdk1.6.0_13\jre\lib\ext y listo!!!! a programar APIS!!! :P







cyberserver

Hola amigos, quiero ver si alguien me puede ayudar a solucionar una incognita, veran con relacion a lo de arriva tengo esta funcion declarada que es para buscar archivos dentro de una ruta.


public int SearchTreeForFile(String RootPath , String InputPathName,String OutputPathBuffer);

Citar
RootPath:Ruta  de la busqueda
InputPathName: Nombre del archivo a buscar
OutputPathBuffer: Variable String Buffer que regresara la ruta del archivo

la funcion retorna un valor entero que es 1: se encontro el archivo, 0: no se encontro.

Pero el problema radica en que no se como obtener a OutputPathBuffer ya que mando como parametro una variable String y no me retorna nada dentro de la variable.

String Salida_Ruta="";
        int Verificacion=CLibrary.INSTANCE.SearchTreeForFile(Ruta,Archivo,Salida_Ruta);
JOptionPane.showMessageDialog(null,"El archivo esta en la Ruta " + Salida_Ruta );


Tengo un ejemplo de como usar la funcion en vb 6.0 pero OutputPathBuffer lo toman como una variable string de buffer pero no se como hacer esto en java!!!!

Ejemplo en vb 6.0

# On Error GoTo Error_Sub 
#   
#     Dim temp As String, Ret As Long 
#   
#     Me.MousePointer = vbHourglass 
#     'Creamos un bufer para almacenar el resultado osea del path 
#     temp = String(MAX_PATH, 0) 
#   
#     'Retorna 1 si se encontró ( text1 es el path, text2 es el archivo ) 
#     Ret = SearchTreeForFile(Text1, Text2, temp) 
#       
#     ' encontrado 
#     If Ret <> 0 Then 
#         MsgBox "Archivo encontrado en: " + Left$(temp, InStr(1, _ 
#                 temp, Chr$(0)) - 1), vbInformation 
#     ' no encontrado 
#     Else 
#         MsgBox "Archivo no encontrado", vbInformation 
#     End If 
#       
#     Me.MousePointer = 0 



De antemano mil gracias :P








biribau

Ya lo has resuelto?, has probado con Buffer's?

cyberserver

 ::) no no lo e resulto..... tu sabes como puedo usar buffers en java???






biribau

Yo estoy metido en una cosa que necesito la WinAPI pero todavía no llegué a necesitarla. De lo poco que he leído en la docu de JNA, String sólo mapea para const char *. Trae que para arrays modificables usar la clase Buffer. De hecho creo que en java los String son inmutables.