TWSequoia 
TWSequoia - Die Java Lib für den Zugriff auf CD-ROM und Systemzeit
Problem:
Von einem Java Programm aus auf die CD-ROM Laufwerke und die Systemzeit zugreifen.
Lösung:
Eine Java Klasse zum Zugriff auf die CD-Rom Laufwerke,
zum setzen der Systemzeit und Maus über die nativen Funktionen von Java auf die CDDLL.DLL.
Die CDDLL.DLL habe ich in C++ geschrieben
und ist nur 24 kB klein und kann frei verwendet werden. Die Klasse ist Systemabhängig, d.h. sie ist durch die DLL nur auf Windows Systeme lauffähig, und muss in das Windows/System
Verzeichnis kopiert werden. Es folgt die Java Klasse CdRom und eine Testklasse CdRomTest die die Anwendung zeigt.
1:/**
2:*
3:* ----------------------------------------
4:* @author Copyright 2003 by Thomas Wenzlaff (<a href=mailto://cdromdll@wenzlaff.de>cdromdll@wenzlaff.de</a>)
5:* @see <a href=http://www.wenzlaff.de>www.wenzlaff.de</a>
6:* @since 07.04.2003 20:04:22
7:* ----------------------------------------
8:*
9:*
10:* Source is only for non commercial and coaching usage.
11:* Not Warranty to use it.
12:*/
13:package de.wenzlaff.cdrom;
14:
15:import java.util.Calendar;
16:import java.util.Date;
17:import java.util.GregorianCalendar;
18:import java.util.SimpleTimeZone;
19:import java.util.TimeZone;
20:
21:/**
22: * Diese Klasse stellt alle Funktionen der CDDLL.DLL bereit, die für Windows einige CD-ROM Zugriffsfunktionen
23: * und das setzten der Systemzeit erledigt. Die Dll muss in das Windows\System Verzeichnis kopiert werden.
24: *
25: * @author Thomas Wenzlaff (<a href=mailto://cdromdll@wenzlaff.de>cdromdll@wenzlaff.de</a>)
26: * @version 1.0
27: * @since 07.04.2003
28: * @see <a href=http://www.wenzlaff.de>www.wenzlaff.de</a>
29: *
30: */
31:public abstract class CdRom
32:{
33: /** Öffnet das CD-ROM Laufwerk */
34: public static final boolean OPEN_CDROM = true;
35: /** Schließt das CD-ROM Laufwerk */
36: public static final boolean CLOSE_CDROM = false;
37: /**
38: * Methode setCD öffnet oder schließt das CD-ROM
39: * @param pvOpenDrive true öffnet, false schließt das CD-Rom
40: * @param pvDrive der Laufwerksbuchstabe des CD-ROM Laufwerkes der geöffnet oder geschlossen wird
41: */
42: public static native void setCD(boolean pvOpenDrive, char pvDrive);
43: /**
44: * Methode setAlleCD öffnet oder schließt alle vorhandenen CD-ROMs
45: * @param pvOpenDrive true öffnet, false schließt alle CD-Rom
46: */
47: public static native void setAlleCD(boolean pvOpenDrive);
48: /**
49: * Methode getVersion gibt die Versions Nummer der Dll zurück
50: * @return int die Versions Nummer der DLL
51: */
52: public static native int getVersion();
53: /**
54: * Methode getInfo gibt den Copyright String zurück
55: * @return String der Copyright String
56: */
57: public static native String getInfo();
58: /**
59: * Methode setTime setzt die UTC Systemzeit. Zum setzen der Zeit, die Funktion setTime(Date pvDate)
60: * aufrufen, da die Umwandlung von UTC zur Lokalenzeit dort gemacht wird. Deshalb auch private.
61: * Diese Funktion kann aber auch direkt aufgefrufen werden,
62: * dann muss die Differenz zur UTC selbst gesetzt werden
63: * mit setTime(long pvOffset).
64: *
65: * @param pvJahr int das Jahr z.b. 2003
66: * @param pvMonat int der Monat z.b. 2 für Februar
67: * @param pvTag int der Tag z.b. 12
68: * @param pvStunde int die Stunde z.b. 13
69: * @param pvMinute int die Minute z.b. 22
70: * @param pvSekunde int die Sekunde z.b. 12
71: * @param pvMillisekunde int die Millisekunden z.b. 12
72: * @return boolean true wenn ohne Fehler, false wenn keine Berechtigung oder Fehler beim Zeitsetzen
73: */
74: private static native boolean setTime(int pvJahr, int pvMonat, int pvTag, int pvStunde, int pvMinute, int pvSekunde, int pvMillisekunde);
75:
76: static
77: {
78: if (System.getProperty("os.name").startsWith("Windows"))
79: {
80: System.loadLibrary("CDDLL"); // lädt die cddll.dll
81: }
82: else
83: {
84: System.out.println("Das laden der CDDLL.DLL geht nur für Windows!");
85: }
86: }
87:
88: /** TimeZone UTC zur lokalen Zeit umwandeln */
89: private static TimeZone icUTC = new SimpleTimeZone(0, "UTC");
90:
91: /**
92: * Setzt das lokale Datum und Zeit über die dll Funktion setTime.
93: * @param pvDate Date
94: * @return boolean true wenn ohne Fehler, false wenn keine Berechtigung oder Fehler beim Zeitsetzen
95: */
96: public static boolean setTime(Date pvDate)
97: {
98: Calendar lvCalender = new GregorianCalendar(icUTC);
99: lvCalender.setTime(pvDate);
100: int lvYear = lvCalender.get(Calendar.YEAR);
101: int lvMonth = lvCalender.get(Calendar.MONTH) + 1;
102: int lvDay = lvCalender.get(Calendar.DAY_OF_MONTH);
103: int lvHour = lvCalender.get(Calendar.HOUR_OF_DAY);
104: int lvMinute = lvCalender.get(Calendar.MINUTE);
105: int lvSecond = lvCalender.get(Calendar.SECOND);
106: int lvMillis = lvCalender.get(Calendar.MILLISECOND);
107: // aufrufen der nativen setTime Funktion in der DLL
108: return setTime(lvYear, lvMonth, lvDay, lvHour, lvMinute, lvSecond, lvMillis);
109: }
110: /**
111: * Fügt einen offset in Millisekunden zu der lokalen Zeit hinzu
112: * @param pvOffset long in Millisekunden z.b. 1 Stunde = 3600 000
113: */
114: public static void setTimeOffset(long pvOffset)
115: {
116: setTime(new Date(System.currentTimeMillis() + pvOffset));
117: }
118:}
119:
Die Klasse kann wie folgt eingesetzt werden:
1:/**
2:*
3:* ----------------------------------------
4:* @author Copyright 2003 by Thomas Wenzlaff (<a href=mailto://cdromdll@wenzlaff.de>cdromdll@wenzlaff.de</a>)
5:* @see <a href=http://www.wenzlaff.de>www.wenzlaff.de</a>
6:* @since 07.04.2003 20:04:22
7:* ----------------------------------------
8:*
9:*
10:*
11:* Source is only for non commercial and coaching usage.
12:* Not Warranty to use it.
13:*/
14:package de.wenzlaff.cdrom;
15:
16:import java.util.Date;
17:
18:/**
19: * Testklasse für die nativen Funktionen der CDDLL.DLL:
20: *
21: *
22: * getVersion();
23: * getInfo();
24: * setAlleCD(boolean);
25: * setCD(boolean);
26: * setTimeOffset(long);
27: * setTime(Date);
28: *
29: * @author Thomas Wenzlaff (<a href=mailto://cdromdll@wenzlaff.de>cdromdll@wenzlaff.de</a>)
30: * @version 1.0
31: * @since 07.04.2003
32: * @see <a href=http://www.wenzlaff.de>www.wenzlaff.de</a>
33: *
34: */
35:public class CdRomTest
36:{
37:
38: /**
39: * Method main mit dem Testcode
40: * @param args Parameter
41: */
42: public static void main(String[] args)
43: {
44: System.out.println("Version der CDDLL.DLL=" + CdRom.getVersion());
45: System.out.println("Copyright String der CDDLL.DLL=" + CdRom.getInfo());
46:
47: System.out.println("Fahre alle vorhandenen CD-Rom Schubladen raus.");
48: CdRom.setAlleCD(CdRom.OPEN_CDROM); // fährt alle CDs raus
49:
50: System.out.println("Fahre alle vorhandenen CD-Rom Schubladen wieder rein.");
51: CdRom.setAlleCD(CdRom.CLOSE_CDROM); // fährt alle CDs wieder rein
52:
53: System.out.println("Fahre nur das Laufwerk V raus.");
54: CdRom.setCD(CdRom.OPEN_CDROM, 'V'); // nur Laufwerk V open
55:
56: System.out.println("Fahre nur das Laufwerk V wieder rein.");
57: CdRom.setCD(CdRom.CLOSE_CDROM, 'V'); // nur Laufwerk V close
58:
59: System.out.println("--- Zeitfunktion testen. ---");
60:
61: Date lvDate = new Date();
62: System.out.println("Systemzeit jetzt=" + lvDate);
63:
64: System.out.println("Eine Stunde hinzufügen (in Millisekunden = Stunde * Minute * Millisekunden)");
65: CdRom.setTimeOffset(60 * 60 * 1000);
66: System.out.println("Neue gesetzte Systemzeit=" + new Date());
67:
68: System.out.println("Und eine Stunde wieder zurück");
69: lvDate.setTime(new Date().getTime() - 3600000);
70:
71: if (CdRom.setTime(lvDate))
72: {
73: System.out.println("Ohne Fehler die Zeit gesetzt");
74: }
75: else
76: {
77: System.out.println("Fehler beim Zeitsetzen");
78: }
79:
80: System.out.println("Systemzeit wieder =" + new Date());
81: }
82:}
83:
Im dll Verzeichnis ist eine Zugriff für alle CD-Rom Laufwerke per Kommandozeile enthalten.
So kann per Klick, wenn man die *.bat Dateien als Link auf den Desktop ablegt das CD-Rom
Laufwerk bedient werden.
Die Command Line Optionen fuer das TWCDROM Programm im Verzeichnis ./dll
CdRomCommand [optionen]
Folgende Optionen sind moeglich:
-h fuer die Hilfe
-c fuer close oder schliessen der CD-ROM Laufwerke.
-o fuer open oder oeffnen der CD-ROM Laufwerke.
-a fuer alle CD-ROM Laufwerke im System.
-cd X fuer das CD-ROM Laufwerk mit dem Buchstaben X
Beispiel:
-a -o oeffnet alle vorhandenen Laufwerke.
-a -c schliesst alle vorhandenen Laufwerke.
-cd V -o oeffnet nur das Laufwerk V.
-cd V -c schliesst nur das Laufwerk V.
[Spende] - [Top] - [Home] - [Tools] - [Text] - [Suche] - [Kontakt]
Copyright ©1998-2010 by Thomas Wenzlaff
Alle Rechte vorbehalten. Disclaimer
http://www.wenzlaff.de vom 28.11.2008