Windows Kontext Menü - Laufendes Programm

endure

Neues Mitglied
Guten Tag,

Vorerst sorry, falls es das Falsche Forum ist 🙂

Ich habe folgendes Problem.
Ich habe ein Programm in Java geschrieben. Beim Rechtsklick auf eine Datei soll ein Button im Windows Kontextmenü erscheinen, der eine Methode oder ein Event in diesem Programm aufrufen soll. Um genau zu sein, tut das Programm vorerst nichts, bis dieser Button geklickt wurde.

Beispiel:
Ich klick auf dem Desktop Rechts auf eine Datei und neben den Standard Buttons wird ein eigener Button mit aufgelistet. Wenn dieser geklickt wird, kriegt mein Programm das mit und tut etwas.

Nun habe ich es geschafft in der Registry über einen Eintrag ...
["C:\test.jar" "%1"]

...dass ein solcher Button im Kontext Menü erscheint. Aber wie kriege ich nun beim laufenden Programm 1. kein zweites geöffnet und 2. im Programm selbst hin, dass er diesen Aufruf mitbekommt und den Parameter übermittelt kriegt. Ich habe gegoogled, aber leider nichts genaues gefunden.

Im Grunde reicht mir schon das Wissen wie ich eine neue Jar Datei mit einer Main-Methode starte, und dieser über einen solchen Button im Kontextmenü einen Parameter übergeben bekommt. Ich würde später eine Listener Klasse von Thread erben lassen und dann darin warten ob ein Buttonklick reinkommt.

Ich hoffe, dass mir dabei jemand helfen kann...

Vielen Dank für eure Hilfe

Gruß Andreas
 
Hmm,
der Eintrag sollte wohl eher auf sowas wie
Code:
["C:\Programme\java1.6\bin\java -jar C:\test.jar" "%1"]
lauten.

Was das mitbekommen in deiner Anwendung angeht:
Der Parameter "args" in der Main-Methode ist ein String-Array mit den übergebenen Parametern.
 
Es gibt verschiedene Möglichkeiten sicherzustellen, dass nur eine Instanz deines Programms läuft. Lock-Files oder Socket-Kommunikation wären zwei Möglichkeiten. Beispiele dazu gibt es im Java Blog Buch.

Noch einfacher geht es höchstwahrscheinlich mit JSingleInstance, welches just von jemandem im Projektbereich vorgestellt worden ist: http://www.java-forum.org/codeschnipsel-u-projekte/120187-jsingleinstance-nur-instanz-programms.html

Du musst halt nur wie im Beispiel auf eine bereits laufende Instanz abfragen. Sollte eine gefunden werden, so musst du einfach die erhaltenen Argumente der laufenden Instanz übergeben und die neue Instanz beenden.
 
So am Rande…

Im Grunde reicht mir schon das Wissen wie ich eine neue Jar Datei mit einer Main-Methode starte, und dieser über einen solchen Button im Kontextmenü einen Parameter übergeben bekommt. Ich würde später eine Listener Klasse von Thread erben lassen und dann darin warten ob ein Buttonklick reinkommt.
Auf dem Wege funktioniert es nicht. Du kannst Dich nicht als Listener an ein ExplorerMenü hängen. Windows will ein Programm starten und diesem Programm einen absuloten Dateinamen der markierten Datei als Argument übergeben. Das funktioniert dann genau so, als würdest du in der Command Shell das Programm aufrufen:
[highlight="Command Shell"]C:\> java -jar meinprogramm.jar "C:\Diese\Datei\hatte\ich\im\Explorer\selektiert.pdf"[/highlight]

In Deinem Java-Programm bekommst Du dann die Argumente übergeben; in diesem Fall eines:
Java:
public class Main {
  public static void main(String[] args) {
    System.out.println(args[0]); // gibt C:\Diese\Datei\hatte\ich\im\Explorer\selektiert.pdf auf der Konsole aus
  }
}

Du musst nun also eine Möglichkeit finden, wie das Programm das Du schreibst erkennt, dass bereits eine andere Instanz läuft und wie es mit der anderen Instanz kommunizieren kann, damit diese das neue Argument empfangen kann. Siehe Beitrag über diesem.

Ebenius
 

Zurück
Oben