Dateien vom Windows-Explorer zum Programm senden

RedFox

Mitglied
Moin,

ich hab ein Programm geschrieben mit dem ich Dateien Multiplizieren/Kopieren/usw. kann.
Jetzt will ich Dateien im Windows-Explorer Makieren und die mit rechtsklick mit meinem Programm öffnen und die jeweiligen Aktionen ausführen, dabei läuft das Programm, also es darf kein neues Programm geöffnet werden, sondern beim geöffneten Programm die Dateien eingefügt werden, ählich wie ein Download-Manager mit Links, nur halt mit Dateien/Ordnern vom Windows-Explorer, weiß einer wie man das lösen kann?

Ich wiederhole nochmal: Das Programm läuft bereits, und darf nicht erneut geöffnet werden. Ich hab vielleicht gedacht ein art Programm zu schreiben, das die Dateien weiter leitet zu mein anderes Programm...

Bin schlecht im erklären, hab euch hoffentlich nicht verwirrt ^^

MFG RedFox
 
Zuletzt bearbeitet von einem Moderator:

Dit_

Bekanntes Mitglied
Hi,

da muss doch das java-Programm tief im System integriert sein oder?

würde mich auch sehr interessieren ob sowas nur mit Java geht, wenn nicht dann einfach andere Sprache zu Hilfe nehmen oder in deinem Programm einen eigenen Explorer implementieren :)

gruß
 

Andi_CH

Top Contributor
Wenn ich es richtig verstanden haben möchtest du im Kontextmenue -> senden an Dein Programm sehen.
Worauf dein Programm auf "magische" Art und Weise erfährt, dass es die entsprechende Datei zu lesen hat.

Stimmt das soweit? (Wenn ja, bin ich sehr gespannt auf die Antworten weil es mich auch interessiert)

Ich verstehe nur nicht, warum es so extrem relevant ist, dass das Programm schon läuft - üblicherweise wird ein Programm so gestartet (Mail, Texteditor .....) aber wenn sich über das Kontextmenue nur ein Programm starten lässt, ist das auch kein grösseres Problem. Das neu gestartete schickt dann halt dem anderen, schon laufenden Programm eine Meldung und terminiert dann.
 
M

maki

Gast
Jetzt will ich Dateien im Windows-Explorer Makieren und die mit rechtsklick mit meinem Programm öffnen und die jeweiligen Aktionen ausführe
Wenn ich mich nicht komplett irre reicht dafür ein Eintrag in die Registry.
Eingabeaufforderung direkt über das Kontextmenü des Explorers öffnen

dabei läuft das Programm, also es darf kein neues Programm geöffnet werden, sondern beim geöffneten Programm die Dateien eingefügt werden
Das aufgerufene Progamm muss sich selber darum kümmern dass es nur einmal gestartet wird.
 

Andi_CH

Top Contributor
Wenn ich mich nicht komplett irre reicht dafür ein Eintrag in die Registry.
Eingabeaufforderung direkt über das Kontextmenü des Explorers öffnen

Das aufgerufene Progamm muss sich selber darum kümmern dass es nur einmal gestartet wird.

Ein Eintrag in "öffnen mit" kann über das Kontextmenu selbst erstellt werden - vielleicht reicht der ja auch vielleicht muss es nicht zwingend "senden an" sein-

Weisst du gerade wie Windows das gewählte File übergibt. (Ich habe dummerweise gerade keine Zeit für Versuche)
 

RedFox

Mitglied
Also das mit dem Kontextmenü is kein problem damit kenne ich mich aus. Einfach in [HKEY_CLASSES_ROOT/*/shell/] einen neuen Key erstellen, unter diesem noch ein Key mit dem Namen Command und da bei Standard als value den Dateipfad angeben und danach noch nen %1 drannhängen, damit wird dann das jeweilige Programm gestarten mit der Datei.

[..]Ich verstehe nur nicht, warum es so extrem relevant ist, dass das Programm schon läuft[...]

Ich habe so eine art Betriebssystem gebaut, das darf nur einmal gestartet werden.

Das aufgerufene Progamm muss sich selber darum kümmern dass es nur einmal gestartet wird.

Ja da weiß ich nicht wie ich das anstelle, da ich nicht weiß wie man überprüfen kann ob solche instanz schon existiert.
 
M

maki

Gast
Weisst du gerade wie Windows das gewählte File übergibt. (Ich habe dummerweise gerade keine Zeit für Versuche)
Denke als Kommandozeile (wie im Link beschreiben), in den 90er Jahren gab es noch die Möglichkeit per OLE, aber das ist zu lange her als dass ich mich noch an die Details erinnere (konnte mit OLE auch komplett daneben liegen).

Ja da weiß ich nicht wie ich das anstelle, da ich nicht weiß wie man überprüfen kann ob solche instanz schon existiert.
Man kann einen Port belegen, wenn dieser bereits belegt ist, läuft das Programm schon, alternativ geht das auch mit Dateien (aber nicht so sicher), oder man mischt beide Methoden (Datei + Port).
http://www.java-forum.org/allgemeine-java-themen/34662-verhindern-programm-mehrmals-geoeffnet.html
 

Andi_CH

Top Contributor
Ich habe so eine Art Betriebssystem gebaut, das darf nur einmal gestartet werden.

Ja da weiß ich nicht wie ich das anstelle, da ich nicht weiß wie man überprüfen kann ob solche Instanz schon existiert.

Ok, dann kannst du den Weg gehen den Maki beschreibt (Port) oder meinen (Hilfsprogramm), wobei du genau dasselbe Problem lösen musst. Du musst mit der schon laufenden Instanz kommunizieren.

Von der Denkweise her ist das mit dem Hilfsprogramm möglicherweise einfacher zu verstehen, aber es hat auch Nachteile (was wenn dein BS noch nicht läuft?)

Nächstes Thema dürfte Interprozesskommunikation sein
 

Michael...

Top Contributor
aber weiss gerade jemand wie man einen solchen Eintrag machen muss?
Unter "Documents and Settings" gibt es entweder userspezifisch oder beim "Default User" ein Verzeichnis "SendTo" hier kann man dann beliebige Verknüpfungen, Applikationen, Skripte... reinhängen, die im Kontextmenü unter "Senden an" bzw. "Send to" verfügbar sein sollen.
 

Andi_CH

Top Contributor
Nur nützt ein Eintrag hier nichts - bin ziemlich ratlos, aber ich hab mich soeben in einem Windowsforum angemeldet.
 

Anhänge

  • SendToVersuch.jpg
    SendToVersuch.jpg
    94,3 KB · Aufrufe: 50

slawaweis

Bekanntes Mitglied
ich habe so was schon mal gemacht. Mit dem folgenden Script (in "open-notepad.reg" speichern):

Code:
REGEDIT4

[HKEY_CLASSES_ROOT\*\shell]

[HKEY_CLASSES_ROOT\*\shell\Open Notepad]

[HKEY_CLASSES_ROOT\*\shell\Open Notepad\command]
@="notepad.exe \"%1\""

kann man z.B. erreichen, dass jede Datei über das Kontextmenu in Notepad geöffnet wird. Sehr nützlich übrigens. Man muss das Script natürlich vorher installieren.

Nun kann man mit einem ähnlichen Script sein eigenes Programm aufrufen, entweder über eine neue JVM oder über eine eigene EXE. Dieses Unterprogramm übergibt dann die Parameter an das Hauptprogramm und beendet sich. Falls das Hauptprogramm nicht läuft, wird es gestartet. Für eine reine Java Lösung gibt es JUnique:

JUnique - Prevent multiple instances of a Java application

Slawa
 

Andi_CH

Top Contributor
Bei was für einem Windows war das? Vermutlich XP - Ab Vista lese ich eben nichts mehr von Registry Einträgen...

(Dein Ziel erreicht man übrigens einfacher über das KontextMenu "öffnen mit ..." und sich dort zur Applikation durchklicken )
 

Michael...

Top Contributor
Eine Verknüpfung auf ein jar wird hier vermutlich nicht viel nutzen. Man könnte hier eine Verknüpfung auf ein batch File machen, welches die Java Applikation startet und dieser die selektierte Datei als Parameter übergibt.
 

Andi_CH

Top Contributor
Genau den Stand habe ich vor einer Minute auch erreicht - wenn ich ein exe angebe geht es, bei einem jar wird der Menupunkt nicht angezeigt - das soll einer verstehen, denn ich kann die Verknüpfung doppelklicken und es geht.

Die Lösung ist folgende:

Die Verknüpfung muss lauten:
Code:
C:\Programme\Java\jre6\bin\java.exe -jar C:\dvlp\temp\Test.jar

(Ja logisch läuft das so nur auf meiner Maschine :D aber es ist ja wohl klar was angepasst werden muss)

Für den Fall dass man innerhalb der Software unterscheiden muss ob sie per "send to" oder direkt aufgerufen wurde wird empfohlen den Link z.B. mit /sendto oder etwas ähnlich eindeutigem zu ergänzen.

Mein Programm gibt nur die Parameterliste aus - was noch unangenehm ist, ist die Tatsache dass sich ein Cmd-Fenster (im Hintergrund sichtbar) öffnet und nicht von selbst schliesst.

Der Link hier lautet
Code:
C:\Programme\Java\jre6\bin\java.exe -jar C:\dvlp\temp\Test.jar /sendto
 

Anhänge

  • SendToVersuch_2.jpg
    SendToVersuch_2.jpg
    24 KB · Aufrufe: 40
Zuletzt bearbeitet:

Michael...

Top Contributor
Im batch gibt's z.B. das Kommando start, damit wird die Anwendung ausserhalb des Konsolenfensters gestartet und das Konsolenfenster kann sich schließen.
Code:
start java -jar xxx.jar
 

Andi_CH

Top Contributor
Die Batchlösung sehe höhstens ich als unschönen Murks(work)-around -- es ist ja wirklich nicht sehr elegant erst ein Batch zu starten, das java startet, das dann mein Programm startet - die Parameterübergabe vom Batch zum Javaprogramm ist auch noch spannend - wieviel Parameter soll man da übergeben - eigentlich weiss man ja nicht wieviele es sind - hm so auf Verdacht hin mal 20?

Es zeigt sich einmal mehr dass sich Java halt eben nicht so gut an Betriebssyteme ankoppeln lässt.

Doof finde ich natürlich das Verhalten von Windows - was auf Doppelklick geht sollte definitiv auch aus einem anderen Kontext gehen :-(

EDIT:

Was ncoh viel schlimmer ist, es nützt nicht einmal etwas:

Test.bat:
Code:
start java -jar c:\dvlp\temp\Test.jar %1 %2 %3

und das schwarze Fenster kommt und bleibt trotzdem ... Wenn ich noch genügend Haare hätte würde ich die mir jetzt wohl ausreissen :-(
 
Zuletzt bearbeitet:

slawaweis

Bekanntes Mitglied
dann nimmt man noch zusätzlich launch4j:

Launch4j - Cross-platform Java executable wrapper

oder ein anderes Framework, welches eine Start-EXE erstellen kann. Oder man schreibt gleich in C/C++/C# ein eigenes Programm, welches sich selber registriert und die Parameter über ein Socket an die Java-Applikation übergibt. Hätte auch den Vorteil, dass keine JVM dafür gestartet werden muss.

Slawa
 

RedFox

Mitglied
So, ersteinmal Vielen Dank für euren ganzen Antworten.

Mit der Info auf JUnique von slawaweis ist es mir gelungen mein vorhaben zu erfüllen.

Für alle die es gerne wissen wollen, stelle ich ein beispielcode rein (Grundwissen muss vorhanden sein^^):

Zu erst müsst ihr JUnique Runterladen und in euer classpath setzen.

Die Main.java
Java:
package euer.package;

import it.sauronsoftware.junique.AlreadyLockedException;
import it.sauronsoftware.junique.JUnique;
import it.sauronsoftware.junique.MessageHandler;

public class Main {

    private static MainFrame mainFrame = null;
    private static final String APPID = "java.appid_00";
    private static boolean alreadyRunning;

    public static void main(String[] args) {
        try {
            JUnique.acquireLock(APPID, new MessageHandler() {
                public String handle(String message) {
                    mainFrame.handleMessage(message);
                    return null;
                }
            });
            alreadyRunning = false;
        } catch(AlreadyLockedException ex) {
            alreadyRunning = true;
        }

        if(!alreadyRunning) {
            mainFrame = new MainFrame();
        } else {
            for(int i=0; i<args.length; i++) {
                JUnique.sendMessage(APPID, args[i]);
            }
        }
    }

}

Die MainFrame.java (Dieser hier is als Vorschau angepasst der macht also nicht wirglich viel)
Java:
package OOSA;

import javax.swing.DefaultListModel;
import javax.swing.JFrame;
import javax.swing.JList;

public class MainFrame extends JFrame {

    DefaultListModel listModel = new DefaultListModel();
    JList list = new JList(listModel);

    public MainFrame() {
        initComponents();
        scrollPane_list.setViewportView(list);
        setVisible(true);
    }

    private void initComponents() {
        //AUTOMATISCH ERSTELLTER CODE VON NETBEANS
    }

    // Das muss in der MainFrame unbedingt drinn stehen damit ihr was mit dem Text anfangen könnt wenn er übergeben wird.
    public void handleMessage(String message) {
        listModel.addElement(message); // Wegen Vorschau werden hier alle args nur in eine JList eingefügt, ich werde da meine Datei Operationen machen.
    }

    // Variables declaration - do not modify
    private javax.swing.JScrollPane scrollPane_list;
    // End of variables declaration

}

Hier die .reg die ihr benutzen müsst damit ihr jede Datei mit dem Programm dann öffnen könnt (Bitte anpassen, und als name.reg Speichern und ausführen, oder gleich in die Registry Schreiben.):
Code:
Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\*\shell\[B]NAMEHIER[/B]\Command]
@="javaw -jar [B]PFAD_ZUR_JAR.jar[/B] \"%1\""

Wenn ihr jetzt Rechtsklick auf einer Datei macht, könnt ihr auf NAMEHIER klicken, somit wird dann, wenn das Programm geöffnet ist, der Pfad zur JList hinzugefügt. Oder halt nur das Programm gestartet, ohne den Dateipfad mit drann zu hängen... Das würde man auch noch hinbekommen, das habe ich jetzt aber nicht nicht getestet.

MFG RedFox :)
 
Zuletzt bearbeitet:

Andi_CH

Top Contributor
Danke für den Hinweis mit javaw.

Bei Windows Vista und Windows 7 muss die Registry nicht editiert werden. Da muss der Eintrag als Link in
Code:
C:\Users\<username>\AppData\Roaming\Microsoft\Windows\SendTo
eingetragen sein.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
J jar Dateien unter Windows 7 mit spezifischer jdk öffnen Allgemeine Java-Themen 2
R Windows-XP-Suchfunktion: Nach Text in Java-Dateien suchen Allgemeine Java-Themen 9
Thomasneuling Java Jar datei erstellen, von Projekt, dass auch Javafx Dateien, FXML Dateien und CSS Dateien, sowie Bilder enthält? Allgemeine Java-Themen 14
G Dateien lesen Allgemeine Java-Themen 3
OnDemand Unterschiedliche jar Dateien zusammen führen Allgemeine Java-Themen 8
A Sicheres Löschen von Dateien Allgemeine Java-Themen 7
O git ignore für Intellji braucht es die .idea Dateien? Allgemeine Java-Themen 8
Master3000 Dateien zwischen verschiedenen Netzwerken senden Allgemeine Java-Themen 17
L Jar Dateien in Classpath laden ab JDK 9+ Allgemeine Java-Themen 11
d.lumpi JDA eclipse dateien versenden Allgemeine Java-Themen 4
O Produziert das Tool "jpackage" (ab JDK 14) .exe Dateien, die auf einer Zielumgebung ohne JRE lauffähig sind ?` Allgemeine Java-Themen 7
O Wie kann ich in Apache POI (Excel Dateien schreiben) Datumszellen in Excel erzeugen Allgemeine Java-Themen 6
T Meine Frage lautet wie ich 2 CSV Dateien miteinander in Java verbinde und Spalten die zueinander gehören durch den gleichen Key zusammen ausgebe? Allgemeine Java-Themen 5
L Dateien richtig auslesen Allgemeine Java-Themen 6
L Eclipse Runnable Jar mit Dateien Allgemeine Java-Themen 8
W Server-Thread schreibt nicht alle Dateien Allgemeine Java-Themen 6
MiMa Logging mit log4j2 in verschiedene Dateien? Allgemeine Java-Themen 22
I Klassen aus Jar-Dateien aus anderem Ordner laden Allgemeine Java-Themen 3
O jar und EXE Dateien, Pfade zur Laufzeit Allgemeine Java-Themen 1
W Dateien werden nicht gelöscht - warum? Allgemeine Java-Themen 12
B Dateien / Bilder von "webapp" Ordner bekommen? Allgemeine Java-Themen 1
P Erste Schritte Dateien löschen Allgemeine Java-Themen 4
H Erste Schritte Ausführbare Dateien lassen sich nicht starten Allgemeine Java-Themen 5
I Java als exe veröffentlichen inkl. kompletter Dateien Allgemeine Java-Themen 4
M Drucken von Dateien Allgemeine Java-Themen 10
I Laden von Informationen aus Dateien: Austauschbarkeit: 2 Dateien sinnvoll? Allgemeine Java-Themen 2
N Temporäre Dateien Allgemeine Java-Themen 3
Bluedaishi Druck Probleme mit PDF dateien Allgemeine Java-Themen 4
M Dateien schneller kopieren Allgemeine Java-Themen 1
M Dateien nach kopieren vergleichen Allgemeine Java-Themen 9
Arif Input/Output Dateien im Jar-Programm speichern Allgemeine Java-Themen 12
D Collections.sort funktioniert nicht in exportierten .class Dateien Allgemeine Java-Themen 10
K Große JSON-Dateien schnell und effizient verarbeiten Allgemeine Java-Themen 16
J Programm zum Download von CSV-Dateien Allgemeine Java-Themen 4
V Eclipse .class Dateien Allgemeine Java-Themen 9
B Download von dateien Allgemeine Java-Themen 2
K Nicht alle class-Dateien im JRE? Allgemeine Java-Themen 2
MiMa Log4j in Dateien mit eigenem Namen schreiben Allgemeine Java-Themen 3
D Kopieren von Dateien aus einem Ordner in einen anderen Allgemeine Java-Themen 6
C Dateien in Jar aufrufen Allgemeine Java-Themen 14
X NetBeans Bilder und andere Dateien ins .jar schreiben und wieder aus .jar lesen Allgemeine Java-Themen 6
JavaWolf165 Externe .jar-Dateien in .jar-Datei intigrieren Allgemeine Java-Themen 0
X Dateien für Benutzer Sperren Allgemeine Java-Themen 4
D Dateien aus den Internet herunterladen Allgemeine Java-Themen 6
L Methoden Dateien älter als 30 Tage? Allgemeine Java-Themen 11
J .exe Dateien werden nicht gestartet obwohl Pfad richtig Allgemeine Java-Themen 6
RalleYTN Classpath Native Dateien(DLL, SO, JNILIB) Allgemeine Java-Themen 2
J Java .jar Dateien zusammenführen Allgemeine Java-Themen 1
L Best Practice Log Dateien analysieren und eventuell passende Daten am Chart darstellen Allgemeine Java-Themen 1
F Platzsparende Alternative zu .txt-Dateien Allgemeine Java-Themen 12
X Dateien von der Jar zum Ordner kopieren. Allgemeine Java-Themen 4
Ananaskirsche Input/Output Dateien im Ordner Allgemeine Java-Themen 8
A Input/Output Liste der Dateien in einem Ordner in einer Jar Datei erhalten Allgemeine Java-Themen 11
X Herunterladen von Dateien aus dem Internet Allgemeine Java-Themen 2
V Input/Output Sound Dateien aus Jar laden Allgemeine Java-Themen 18
M Dateien aus einem Verzeichnis auf einem Server auflisten Allgemeine Java-Themen 5
H PDFBox akzeptiert Dateien nicht Allgemeine Java-Themen 1
B Java - einlesen von Dateien und herausschneiden von XML Dokumenten Allgemeine Java-Themen 5
A Input/Output Spätes Schreiben von Dateien der JVM Allgemeine Java-Themen 3
M Zwei unterschiedliche JAR Dateien mit ANT erstellen Allgemeine Java-Themen 8
Thallius Dateien Zippen und wieder heraus lesen? Allgemeine Java-Themen 4
T Dateien zur Laufzeit in Java-Programm packen? Allgemeine Java-Themen 3
Maxim6394 Jar Dateien starten nicht Allgemeine Java-Themen 7
U Eclipse Java Programm beschädigt .tar.gz dateien beim Entpacken Allgemeine Java-Themen 7
GUI-Programmer Mp3 Dateien bearbeiten und speichern Allgemeine Java-Themen 3
S Exklusive Sperre auf Dateien: FileChannel, FileLock Allgemeine Java-Themen 0
Bluedaishi Dateien löschen die älter als das aktuelle Datum sind Allgemeine Java-Themen 9
OnDemand Dateien einlesen und vergleichen Allgemeine Java-Themen 1
T Ordner samt Dateien kopieren Allgemeine Java-Themen 11
R Importieren von Txt-Dateien in AbstractTableModel Allgemeine Java-Themen 0
C Dateien komprimieren und verschlüsseln Allgemeine Java-Themen 3
F Eclipse Eclipse kompiliert nicht mehr die aktuellen Dateien Allgemeine Java-Themen 2
R Java Dateien "verschlüsseln" Allgemeine Java-Themen 2
L Passwortgeschützte Dateien Allgemeine Java-Themen 6
A Datentypen Dateien umbenennen mit Dateiendungen - Dateiendungen ausgeben Allgemeine Java-Themen 2
L Reparieren beschädigter PDF Dateien Allgemeine Java-Themen 3
F Dateien ins Array lagern und Optionen zur Auswahl, Allgemeine Java-Themen 5
J XML Dateien vergleichen Allgemeine Java-Themen 9
B Umbenennen von Dateien Allgemeine Java-Themen 2
B Erste Schritte Plugin erkennen und Class Dateien anzeigen lassen Allgemeine Java-Themen 3
W Best Practice Dateien parsen Allgemeine Java-Themen 3
B Dateien verschwinden aus bin Ordner?! Allgemeine Java-Themen 5
B Dateien prüfen auf Gleichheit Allgemeine Java-Themen 5
M Java Dateien verschieben Allgemeine Java-Themen 2
R Wav-Dateien wiederholt abspielen Allgemeine Java-Themen 2
L Methoden Verarbeitung von Größen Dateien Allgemeine Java-Themen 9
B Alt-Griechisch Zeichen in Dateien Allgemeine Java-Themen 2
M JAR Dateien nur mit Compiler Level 1.6 ausführbar Allgemeine Java-Themen 8
E Zugriff auf Dateien im Filesystem überwachen Allgemeine Java-Themen 5
G .jar Dateien lassen sich nicht mehr öffnen Allgemeine Java-Themen 2
M Datentypen Jar-Dateien öffnen nicht mit Java Allgemeine Java-Themen 4
C Mit Java PDF Dateien bearbeiten. Allgemeine Java-Themen 2
B Input/Output .java-Dateien auslesen Allgemeine Java-Themen 17
B Methoden Alle Methoden und Variablen aus Java-Dateien auslesen. Allgemeine Java-Themen 7
E Vorschläge, effizientes Hashing von Dateien für vergleich Allgemeine Java-Themen 7
W Vergleich eines Datenträgers auf neue Dateien Allgemeine Java-Themen 14
C Java-Dateien in einheitlichen Zeichensatz umwandeln Allgemeine Java-Themen 10
E Dateien aus / im JAR Allgemeine Java-Themen 2
K LibreOffice Tabelle Dateien im Format .ods bearbeiten Allgemeine Java-Themen 2
L Input/Output Dateien erstellen, wenn ein JAR ausgeführt wird Allgemeine Java-Themen 13

Ähnliche Java Themen

Neue Themen


Oben