TWSequoia  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.


Download von TWSequoia Download: TWSequoia    PAD Factsheet von TWSequoia



[Spende] - [Top] - [Home] - [Tools] - [Text] - [Suche] - [Kontakt]  RSS wenzlaff.de XML Feed [Valid Wenzlaff RSS XML feed] Valid HTML 4.0!
Copyright © 2016 by Thomas Wenzlaff. Alle Rechte vorbehalten. http://www.wenzlaff.de