tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
9
ZUGRIFFE
7569
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Registriert seit
    Jun 2002
    Ort
    Saarbrücken (Saarland)
    Beiträge
    9.886
    Blog-Einträge
    29
    Hallo!

    Hier mal ein Beispiel wie man mit SWT WinAPI Funktionen aufrufen kann:
    Wir rufen die Funktion LockWorkStation aus der user32.dll auf:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    
    /*
     * Created on 06.03.2005@20:15:07
     *
     * TODO Some Licence info...
     */
    package de.tutorials;
     
    import org.eclipse.swt.internal.win32.DLLVERSIONINFO;
    import org.eclipse.swt.internal.win32.OS;
    import org.eclipse.swt.internal.win32.TCHAR;
     
    /**
     * @author Administrator
     * 
     * TODO Explain me
     */
    public class SWTLockWorkstationExample {
     
        public static void main(String[] args) {
     
            DLLVERSIONINFO dvi = new DLLVERSIONINFO();
            dvi.cbSize = DLLVERSIONINFO.sizeof;
            dvi.dwMajorVersion = 4;
            dvi.dwMinorVersion = 0;
     
            TCHAR lpLibFileName = new TCHAR(0, "user32.dll", true);
            int hModule = OS.LoadLibrary(lpLibFileName);
     
            if (hModule != 0) {
                String name = "LockWorkStation\0";
                byte[] lpProcName = name.getBytes();
     
                int LockWorkStation = OS.GetProcAddress(hModule, lpProcName);
                OS.Call(LockWorkStation, dvi);
                OS.FreeLibrary(hModule);
            }
        }
    }

    //Edit: noch besser funktioniert das mit JNA:
    https://jna.dev.java.net/

    Gruß Tom
     

  2. #2
    maher maher ist offline Grünschnabel
    Registriert seit
    May 2005
    Beiträge
    4
    hi, habe ein problem und zwar ich bin neu mit java programmieren und wollt swt-dll
    importieren aber ich das beispiel eben gesehen und diese eclipse hatte org.eclispe nicht erkannt.

    grüße
     

  3. #3
    Registriert seit
    Jun 2002
    Ort
    Saarbrücken (Saarland)
    Beiträge
    9.886
    Blog-Einträge
    29
    Hallo!

    Annahme du arbeitest unter Eclipse...
    Du musst dazu auch das SWT.jar (findest du unter eclipse\plugins\org.eclipse.swt.win32_3.XXXws\win32) in den BuildPath aufnehmen.
    -> Rechte Maustaste auf das Projekt -> Kontext menü -> Properties -> java Buld Path -> Add Variable -> Eclipse Home -> extend -> plugins\org.eclipse.swt.win32_3.XXXws\win32\swt.jar

    Damit das ganze läuft musst du nicht die entsprechende swt-xxx.dll (findest du unter
    eclipse\plugins\org.eclipse.swt.win32_3.0.2\os\win32\x86...) ins winnt\system32 Verzeichnis kopieren. (Oder mit dem netten SWT App Launcher unter Eclipse 3.1) arbeiten.

    Gruß Tom
     
    Java rocks!
    How to become a good Java Programmer?
    Does IT in Java and .Net
    The only valid measurement of code quality: WTFs / minute
    Blog
    Xing
    Twitter

  4. #4
    maher maher ist offline Grünschnabel
    Registriert seit
    May 2005
    Beiträge
    4
    Hi Tom!
    ich bedanke mich herzlich bei dir für die schnelle Antwort, habe ich gemacht und läuft wunderbar.
    Du hast so ein beispiel im netz erstellt "Von API-Functions" benutzen und ist sehr schön zu sehen wie die APIs unter java benutzt werde.
    ich habe lange zeit mit diesen APIs "win32" gearbeitet und es war unter visual c++ für die uni. und jetzt brauche ich auch so ähnlich zu programmieren aber unter java und mit dieser
    swt-dll kann mann so was auch tun aber die Funktionen heißen hier anders und ausserdem habe ich keine hilfe für swt-dll gefunden, um zu sehen, was jede dieser Funktionen macht.

    was ich eigentlich brauch kann man vielleicht aufzählen:
    - CPU-eigenschaften auslesen (Type, schnelligkeit, Archithektur, Auslastung und so weiter)
    - Arbeitsspeicher (Größe und die Auslastung "wie voll sie sind")
    - Benutzer name
    - Was aus dem Registry aus lesen
    - Welches Betriebssystem hat der Rechnere (windows "95-98-2000-Nt-XP", linux, unix oder solaris)

    ich brauch so was für die Uni und ich stehe jetzt einfach so ohne weiteres.
    Es wäre nett wenn du weiter helfen würdest.

    vielen dank im voraus, Maher
     

  5. #5
    Registriert seit
    Jun 2002
    Ort
    Saarbrücken (Saarland)
    Beiträge
    9.886
    Blog-Einträge
    29
    Hallo!

    Schau mal hier:
    http://www.codeguru.com/Cpp/misc/mis...cle.php/c3847/
    ( insbesondere Programm 10)

    Gruß Tom
     
    Java rocks!
    How to become a good Java Programmer?
    Does IT in Java and .Net
    The only valid measurement of code quality: WTFs / minute
    Blog
    Xing
    Twitter

  6. #6
    maher maher ist offline Grünschnabel
    Registriert seit
    May 2005
    Beiträge
    4
    Hi Tom!
    Danke noch mal. habe eben deine Mail gesehen und habe so einbisschen reingeschaut.
    und wollte fragen, "kann man nicht solche API-Funktionen nicht direkt mit Java aufrufen, ohne
    C++, oder Assembly zu benutzen". ich meine alles mit java zu programmieren ohne andere Sprache zu benutzen.

    Grüße
     

  7. #7
    maher maher ist offline Grünschnabel
    Registriert seit
    May 2005
    Beiträge
    4
    hi
    wie kann man c-header unter eclipse 3 erstellen "native-Keyword".
    Gruß
     

  8. #8
    bcosi bcosi ist offline Grünschnabel
    Registriert seit
    May 2005
    Beiträge
    1
    Hallo Tom,

    dein SWT-Beispiel funktioniert wunderbar. Wie sieht es aber aus, wenn die Windows API Parameter hat? Wie würde zB ein SWT-Aufruf von ExitWindowsEx aussehen? Diese API besitzt zwei Parameter.

    Gruss bcosi
     

  9. #9
    Registriert seit
    Jun 2002
    Ort
    Saarbrücken (Saarland)
    Beiträge
    9.886
    Blog-Einträge
    29
    Hallo!

    Soweit ich weis gabs damit Probleme bzw. hab ich's "damals" nicht hinbekommen... schaue heute Abend nochmal nach...

    gruß Tom
     
    Java rocks!
    How to become a good Java Programmer?
    Does IT in Java and .Net
    The only valid measurement of code quality: WTFs / minute
    Blog
    Xing
    Twitter

  10. #10
    Registriert seit
    Jun 2002
    Ort
    Saarbrücken (Saarland)
    Beiträge
    9.886
    Blog-Einträge
    29
    Hallo!

    ich hab da jetzt mal wieder ein wenig herumprobiert und bin leider immernoch nicht viel weiter als damals. Mittels OS.loadLibrary kann man anlog zu C++ Dlls dynamisch laden und dann per OS.GetProcAddress ein Handle auf die aus der dll gewünschte Funktion bekommen. Leider wid's jetzt extrem kompliziert... (zumindest für mich)...
    da man mit der Methode
    Code :
    1
    
    public static final native int Call (int address, DLLVERSIONINFO arg0);
    wie man sieht außer der Adresse der Funktion (die man über GetProcAddress bekommen hat) und der DLLversion keine weiteren Paremeter übergeben kann.
    So scheint es zumindest. Jedoch wäre es möglich auf den Parameter Stack der im Speicher liegenden Funktion zuzugreifen und dort entsprechende Werte (vor!) dem Parameteraufruf zu hinterlegen. Dazu gibts ind er Klasse OS auch
    so schöne Methoden wie
    Code :
    1
    
    public static final native void MoveMemory (int [] Destination, int Source, int Length); ;-)
    etc.... es sieht so aus, als ob dieses Konstrukt innerhalb der win32 internal packages des SWT Jars recht häufig verwendet wird. Vielleicht findet man dort irgendwo ein Beispiel...(hab leider auf meiner Suche keins gefunden)
    Leider bin ich da derweil mit meinem Latein am Ende... ich weis noch, dass man die Parameter in umgekehrter Reihenfolge (letzter Paremeter zuerst, erster zuletzt) auf den Parameter Stack legen muss aber das will irgendwie nicht so wirklich funktionieren. Habe dazu auch einige C++ Bespiele gesehen, diese verwenden jedoch zur Manipulation des Parameterstacks dieser Funktion Assembler... http://www.codeguru.com/Cpp/W-P/dll/article.php/c115/

    aber vielleicht bekomme ich das ja die Tage doch noch hin, also

    stay tuned

    Gruß Tom
     
    Java rocks!
    How to become a good Java Programmer?
    Does IT in Java and .Net
    The only valid measurement of code quality: WTFs / minute
    Blog
    Xing
    Twitter

Ähnliche Themen

  1. Funktionen aufrufen.
    Von soa im Forum Javascript & Ajax
    Antworten: 2
    Letzter Beitrag: 29.03.07, 08:49
  2. Antworten: 4
    Letzter Beitrag: 19.04.05, 14:08
  3. Antworten: 2
    Letzter Beitrag: 04.11.04, 18:07
  4. Mit rundll32 beliebige Funktionen aus beliebigen DLL's aufrufen.
    Von Thomas Darimont im Forum Microsoft Windows
    Antworten: 0
    Letzter Beitrag: 02.11.04, 16:58
  5. Funktionen aus DLLs nutzen
    Von Rene Albrecht im Forum C/C++
    Antworten: 9
    Letzter Beitrag: 24.10.03, 21:28