Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2010
    Messaggi
    24

    [AIUTO]Dll e GetProcessId

    Ciao a tutti sono riuscito a ottenere l'handle di una finestra attraverso findwindow della user32.dll, ora lo dovrei usare x un GetProcessId ma restituisce 0, posto il source aspettando un aiuto, in anticipo grazie a tutti



    codice:
    package ennesimaprova;
    
    
    import com.sun.jna.Library;
    import com.sun.jna.Native;
    import com.sun.jna.Platform;
    import com.sun.jna.Structure;
    import com.sun.*;
    import com.sun.jna.Library;
    import com.sun.jna.Native;
    import com.sun.jna.Pointer;
    import com.sun.jna.Structure;
    import com.sun.jna.examples.win32.W32API;
    import com.sun.jna.ptr.ByteByReference;
    import com.sun.jna.ptr.IntByReference;
    /** Simple example of JNA interface mapping and usage. */
    import com.sun.jna.*;
    import com.sun.jna.ptr.PointerByReference;
    import com.sun.jna.win32.StdCallLibrary;
    
    /** Simple example of Windows native library declaration and
    usage. */
    public class Main {
    
        public interface Kernel32 extends Library {
            public boolean Beep(int frequency, int duration);
            public void Sleep(int durationInMilliSeconds);
            int GetProcessId(Pointer Process);
    
            Pointer OpenProcess(int dwDesiredAccess, boolean bInheritHandle, int dwProcessId );
        boolean WriteProcessMemory(Pointer hProcess,Pointer lpBaseAddress,Pointer lpBuffer,Pointer nSize,int lpNumberOfBytesWritten);
    
        }
        public interface User32 extends W32API {
    public Pointer FindWindow(String winClass, String title);
        User32 INSTANCE = (User32)
            Native.loadLibrary("user32", User32.class, DEFAULT_OPTIONS);
    
    
    }
        public static void main(String[] args) throws NoSuchMethodException {
            Kernel32 kernel = (Kernel32)
    Native.loadLibrary("kernel32", Kernel32.class);
    User32 user = User32.INSTANCE;
    Pointer hwnd = user.FindWindow (null, "Prato fiorito");
    System.out.println(hwnd);
    int res = kernel.GetProcessId(hwnd);
    System.out.println(res);
        }
    }
    L'output è questo
    codice:
    native@0x30924
    0
    Ciao a tutti

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: [AIUTO]Dll e GetProcessId

    Originariamente inviato da Cordand
    Pointer hwnd = user.FindWindow (null, "Prato fiorito");
    int res = kernel.GetProcessId(hwnd);
    No! GetProcessId deve ricevere l'handle di un processo ... non di una finestra (un HWND)!!

    Se parti da un HWND se ben ricordo c'è una funzione che permette di sapere il processo che l'ha creata .... ora non ricordo ... la cerco.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Questo a me funziona perfettamente. Ho verificato l'handle della finestra con Spy++ (un tool del VC++) e il PID (process ID) con il Task Manager di Windows:

    codice:
    import com.sun.jna.*;
    import com.sun.jna.ptr.*;
    import com.sun.jna.win32.*;
    
    public class Prova {
        public static void main(String[] args) {
            Pointer hwnd = MyUser32Lib.INSTANCE.FindWindowA(null, "Prato fiorito");
    
            System.out.println("Handle finestra: " + hwnd);
    
            PointerByReference refProcessId = new PointerByReference();
    
            MyUser32Lib.INSTANCE.GetWindowThreadProcessId(hwnd, refProcessId);
    
            System.out.println("ID processo: " + refProcessId.getValue());
        }
    
        public interface MyUser32Lib extends StdCallLibrary {
            MyUser32Lib INSTANCE = (MyUser32Lib) Native.loadLibrary("user32", MyUser32Lib.class);
    
            Pointer FindWindowA(String winClass, String title);
            int GetWindowThreadProcessId(Pointer hwnd, PointerByReference refProcessId);
        }
    }
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  4. #4
    Utente di HTML.it
    Registrato dal
    Mar 2010
    Messaggi
    24
    Come al solito ti devo ringraziare piano piano mi avvicino a modificare l'address XD
    Grazie ancora

  5. #5
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Correzione

    Piccolo aggiornamento: per la GetWindowThreadProcessId è più corretto che il secondo parametro sia un IntByReference .... non un PointerByReference.

    (il codice sopra l'ho scritto ieri sera un po' di fretta)
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.