ERLEDIGT
NEIN
NEIN
ANTWORTEN
9
9
ZUGRIFFE
7569
7569
EMPFEHLEN
-
06.03.05 21:54 #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
-
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
-
06.05.05 18:26 #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ß TomJava 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
-
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
-
09.05.05 11:54 #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ß TomJava 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
-
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
-
hi
wie kann man c-header unter eclipse 3 erstellen "native-Keyword".
Gruß
-
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
-
10.05.05 09:51 #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ß TomJava 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.05.05 22:03 #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
wie man sieht außer der Adresse der Funktion (die man über GetProcAddress bekommen hat) und der DLLversion keine weiteren Paremeter übergeben kann.Code :1
public static final native int Call (int address, DLLVERSIONINFO arg0);
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
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)Code :1
public static final native void MoveMemory (int [] Destination, int Source, int Length); ;-)
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ß TomJava 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
-
Funktionen aufrufen.
Von soa im Forum Javascript & AjaxAntworten: 2Letzter Beitrag: 29.03.07, 08:49 -
Funktionen, Parameter, Rueckgaben von Standard DLLs herausfinden
Von stanleyB im Forum Coders TalkAntworten: 4Letzter Beitrag: 19.04.05, 14:08 -
F: Funktionen aus DLLs in VC++ 6.0 einbinden / verwenden
Von smallone im Forum C/C++Antworten: 2Letzter Beitrag: 04.11.04, 18:07 -
Mit rundll32 beliebige Funktionen aus beliebigen DLL's aufrufen.
Von Thomas Darimont im Forum Microsoft WindowsAntworten: 0Letzter Beitrag: 02.11.04, 16:58 -
Funktionen aus DLLs nutzen
Von Rene Albrecht im Forum C/C++Antworten: 9Letzter Beitrag: 24.10.03, 21:28






Zitieren
Login





