>Erledigt< ExplorerComboGadget und Netzlaufwerke
- Elektrolurch
- Beiträge: 168
- Registriert: 11.10.2007 16:48
- Wohnort: 49°26'51.46"N - 8°59'49.06"E
- Kontaktdaten:
>Erledigt< ExplorerComboGadget und Netzlaufwerke
Hi all
ich möchte in meinem Programm die Möglichkeit anbieten ein Laufwerk, einen Server oder einen Ordner auszuwählen, dies hätte ich gerne mit einem komfortablen Gadget durchgeführt.
Kann man das ExplorerComboGadget irgendie dazu überreden, dass es auch Netzwerklaufwerke u.s.w. anzeigt?
Gibt es eine alternative dazu?
BYe André
ich möchte in meinem Programm die Möglichkeit anbieten ein Laufwerk, einen Server oder einen Ordner auszuwählen, dies hätte ich gerne mit einem komfortablen Gadget durchgeführt.
Kann man das ExplorerComboGadget irgendie dazu überreden, dass es auch Netzwerklaufwerke u.s.w. anzeigt?
Gibt es eine alternative dazu?
BYe André
Zuletzt geändert von Elektrolurch am 17.09.2009 21:17, insgesamt 1-mal geändert.
Wer Rechtschreibfehler findet darf sie ruhig behalten, ich brauche sie nicht mehr, ich habe noch genug davon.






-
- Beiträge: 167
- Registriert: 29.12.2005 09:58
- Computerausstattung: Intel Core2 Quad (4x2,4 GHz), 4096 MB RAM, GForce 8800GTX 786 MB
Windows XP 32 Bit, PureBasic 4.40 (x86)
Re: ExplorerComboGadget und Netzlaufwerke
Wenn du ein Netzlaufwerk verbindest, dann erhält es einen Laufwerksbuchstaben wie jedes andere Laufwerk und ist auch im ExplorerComboGadget auswählbar.
/Edit:
Eine andere Möglichkeit wäre über SetGadgetText() den Pfad im Format \\server\verzeichnis\ einem ExplorerListGadget zuzuweisen, dann musst du ihn aber selbst eingeben, z.B. über ein StringGadget.
/Edit:
Eine andere Möglichkeit wäre über SetGadgetText() den Pfad im Format \\server\verzeichnis\ einem ExplorerListGadget zuzuweisen, dann musst du ihn aber selbst eingeben, z.B. über ein StringGadget.
WinXP 32 Bit, PureBasic 4.40 (x86)
- Elektrolurch
- Beiträge: 168
- Registriert: 11.10.2007 16:48
- Wohnort: 49°26'51.46"N - 8°59'49.06"E
- Kontaktdaten:
Re: ExplorerComboGadget und Netzlaufwerke
Hi Rokur
Meine User sollen aber die Möglichkeit haben, auch Laufwerke und Ordner aus der Netzwerkumgebung zu wählen, ohne dass sie alle verbunden sind, in etwa so wie im Explorer.
Ich hatte ja zuerst den Pathrequester benutzt, aber der brachte nur dann richtige Ergebnisse, wenn ein Verzeichnis gewählt wurde. Klickt man nur den Server also das Root an gibt er nur "\" zurück.
Ich habe die Frage ähnlich schon in meinem andren Thread ausführlicher gestellt. http://www.purebasic.fr/german/viewtopi ... 16&t=20864
Leider paßte nun eigentlich die Überschrift nicht mehr so richtig, deshalb habe ich den 2 Thread eröffnet.
BYe André
Meine User sollen aber die Möglichkeit haben, auch Laufwerke und Ordner aus der Netzwerkumgebung zu wählen, ohne dass sie alle verbunden sind, in etwa so wie im Explorer.
Ich hatte ja zuerst den Pathrequester benutzt, aber der brachte nur dann richtige Ergebnisse, wenn ein Verzeichnis gewählt wurde. Klickt man nur den Server also das Root an gibt er nur "\" zurück.
Ich habe die Frage ähnlich schon in meinem andren Thread ausführlicher gestellt. http://www.purebasic.fr/german/viewtopi ... 16&t=20864
Leider paßte nun eigentlich die Überschrift nicht mehr so richtig, deshalb habe ich den 2 Thread eröffnet.
BYe André
Wer Rechtschreibfehler findet darf sie ruhig behalten, ich brauche sie nicht mehr, ich habe noch genug davon.






-
- Beiträge: 167
- Registriert: 29.12.2005 09:58
- Computerausstattung: Intel Core2 Quad (4x2,4 GHz), 4096 MB RAM, GForce 8800GTX 786 MB
Windows XP 32 Bit, PureBasic 4.40 (x86)
Re: ExplorerComboGadget und Netzlaufwerke
Dann fang das doch ab und zeige bei Rückgabewert "\" eine Meldung an, das der Benutzer ein Verzeichnis wählen muss.
Wenn deine Nutzer nur Netzwerkfreigaben auswählen sollen, dann wäre der PathRequester doch ok, denn der Server alleine ist keine gültige Pfadangabe, da man unter \\servername keine Dateien lesen und schreiben kann, das geht nur mit einem freigegebenen Verzeichnis.
Wenn deine Nutzer nur Netzwerkfreigaben auswählen sollen, dann wäre der PathRequester doch ok, denn der Server alleine ist keine gültige Pfadangabe, da man unter \\servername keine Dateien lesen und schreiben kann, das geht nur mit einem freigegebenen Verzeichnis.
WinXP 32 Bit, PureBasic 4.40 (x86)
- Elektrolurch
- Beiträge: 168
- Registriert: 11.10.2007 16:48
- Wohnort: 49°26'51.46"N - 8°59'49.06"E
- Kontaktdaten:
Re: ExplorerComboGadget und Netzlaufwerke
Hi Rokur
Im Prinzip has du schon recht, aber ich hole mir mit dem Servernamen ja erst die Liste mit den wirklichen Freigaben.
Wenn ich den User dann nötige einen Freigabeordner zu wählen und ich ihn dann nochmal die Freigabe wählen lasse, ist das vielleicht doch etwas verwirrend.
Eigentlich würde mir eine Serverliste fürs Erste genügen.
Aber anders kann ich leider nicht agieren, da Cifs als Syntax den Servernamen und den Freigabenamen verlangt und ich nicht immer davon ausgehen kann das die Ordnerbezeichnung = dem Freigabenamen ist. (auch wenn dies in 99,9% aller Fälle so sein wird)
BYe André
Im Prinzip has du schon recht, aber ich hole mir mit dem Servernamen ja erst die Liste mit den wirklichen Freigaben.
Wenn ich den User dann nötige einen Freigabeordner zu wählen und ich ihn dann nochmal die Freigabe wählen lasse, ist das vielleicht doch etwas verwirrend.
Eigentlich würde mir eine Serverliste fürs Erste genügen.
Aber anders kann ich leider nicht agieren, da Cifs als Syntax den Servernamen und den Freigabenamen verlangt und ich nicht immer davon ausgehen kann das die Ordnerbezeichnung = dem Freigabenamen ist. (auch wenn dies in 99,9% aller Fälle so sein wird)
BYe André
Wer Rechtschreibfehler findet darf sie ruhig behalten, ich brauche sie nicht mehr, ich habe noch genug davon.






-
- Beiträge: 167
- Registriert: 29.12.2005 09:58
- Computerausstattung: Intel Core2 Quad (4x2,4 GHz), 4096 MB RAM, GForce 8800GTX 786 MB
Windows XP 32 Bit, PureBasic 4.40 (x86)
Re: ExplorerComboGadget und Netzlaufwerke
Das ist dann so mit PB-Bordmitteln nicht lösbar, dazu müsstest du die Netzwerkabfragen selber einbauen und dann ein normales ComboBoxGadget verwenden. Evtl. gibts dafür auch was in der Win-API. Oder mal einen Vorschlag für eine kommende PB-Version einreichen: Explorer-Gadgets sollten über ein Flag verfügen, um die Netzwerkumgebung mit anzuzeigen.
Aber ich weiß immer noch nicht was du genau vor hast, warum willst du erst einen Server auswählen lassen um dann, evtl. umständlich, die Freigaben selber zu ermitteln, wenn das der PathRequester automatisch macht?
Aber ich weiß immer noch nicht was du genau vor hast, warum willst du erst einen Server auswählen lassen um dann, evtl. umständlich, die Freigaben selber zu ermitteln, wenn das der PathRequester automatisch macht?
WinXP 32 Bit, PureBasic 4.40 (x86)
- Elektrolurch
- Beiträge: 168
- Registriert: 11.10.2007 16:48
- Wohnort: 49°26'51.46"N - 8°59'49.06"E
- Kontaktdaten:
Re: ExplorerComboGadget und Netzlaufwerke
Hi Rokur
Also gut ich erkläre es halt mal etwas genauer.
Das Ganze dient ja dazu, einen stationären MP3Player mit Festplatte, Internetradio u.s.w.zu modifizieren.
Dieser Player erkennt externe, angesteckt MP3Player und bindet sie im Display ein, so dass man auch diese Lieder abspielen kann. Nun besteht über das einbinden mit Cifs die Möglichkeit Netzlaufwerke ebenfalls dorthin zu mounten.
Dies geschieht in der Regel per Telnet und ist aber etwas umständlich vor allem für Leute ohne Linuxkenntnisse wie mich.
Da setze ich mit meinem Programm an. Mein User wählt hier einfach den PC (Server), die Freigabe, den Namen im Display des Players, das Passwort, und den Usernamen. Ich bastle daraus die Bash, kopiere sie auf den Player integriere sie in das Startscript des Players und Voila der Player hat Zugriff auf neue Mucke und das für immer.
Nun möchte ich die Auswahl des Servernamens und der Freigabe so einfach wie möglich machen und Tippfehler des Users ausschließen, da Fehler in der Bash ja nicht angezeigt werden,würden sie halt einfach ins leere laufen und man wüßte nicht warum.
So nun habe ich es mit dem Pathrequester versucht der gibt aber nur den Servernamen zurück wenn ich ein Unterverzeichnis auswähle, will der User den Server komplett anbinden geht das garnicht. Zwinge ich den User in ein Unterverzeichnis ist dies auch nicht ohne Erklärung zu verstehen. Wenn ich dann per Procedure dann eine Liste mit den realen Freigaben zur Auswahl anbiete verwirrt dies den User erst recht.
Ich muß aber diesen Weg gehen da wie ich schon ermittelt habe manche User dem Ordner einen ähnlichen aber nicht den gleichen Freigabenahmen geben. Also geht diese Auswahl nur über die Liste der Freigaben. Diese Liste krieg ich aber nur über den Servernamen (den ich ja sowieso brauche). Um Fehler zu minimieren möchte ich diesen Servernamen am besten mit einem Gadget zum selektieren auswählen.
Das EplorerComboGadget wäre optimal, aber es spart ja die Netzwerkumgebung aus. Ich dachte aber ich hätte einmal etwas von einer Erweiterung gehört.
Ich hoffe ich habe nun mein Problem umfasend geschildert.
BYe André
Also gut ich erkläre es halt mal etwas genauer.
Das Ganze dient ja dazu, einen stationären MP3Player mit Festplatte, Internetradio u.s.w.zu modifizieren.
Dieser Player erkennt externe, angesteckt MP3Player und bindet sie im Display ein, so dass man auch diese Lieder abspielen kann. Nun besteht über das einbinden mit Cifs die Möglichkeit Netzlaufwerke ebenfalls dorthin zu mounten.
Dies geschieht in der Regel per Telnet und ist aber etwas umständlich vor allem für Leute ohne Linuxkenntnisse wie mich.

Da setze ich mit meinem Programm an. Mein User wählt hier einfach den PC (Server), die Freigabe, den Namen im Display des Players, das Passwort, und den Usernamen. Ich bastle daraus die Bash, kopiere sie auf den Player integriere sie in das Startscript des Players und Voila der Player hat Zugriff auf neue Mucke und das für immer.

Nun möchte ich die Auswahl des Servernamens und der Freigabe so einfach wie möglich machen und Tippfehler des Users ausschließen, da Fehler in der Bash ja nicht angezeigt werden,würden sie halt einfach ins leere laufen und man wüßte nicht warum.
So nun habe ich es mit dem Pathrequester versucht der gibt aber nur den Servernamen zurück wenn ich ein Unterverzeichnis auswähle, will der User den Server komplett anbinden geht das garnicht. Zwinge ich den User in ein Unterverzeichnis ist dies auch nicht ohne Erklärung zu verstehen. Wenn ich dann per Procedure dann eine Liste mit den realen Freigaben zur Auswahl anbiete verwirrt dies den User erst recht.
Ich muß aber diesen Weg gehen da wie ich schon ermittelt habe manche User dem Ordner einen ähnlichen aber nicht den gleichen Freigabenahmen geben. Also geht diese Auswahl nur über die Liste der Freigaben. Diese Liste krieg ich aber nur über den Servernamen (den ich ja sowieso brauche). Um Fehler zu minimieren möchte ich diesen Servernamen am besten mit einem Gadget zum selektieren auswählen.
Das EplorerComboGadget wäre optimal, aber es spart ja die Netzwerkumgebung aus. Ich dachte aber ich hätte einmal etwas von einer Erweiterung gehört.
Ich hoffe ich habe nun mein Problem umfasend geschildert.
BYe André
Wer Rechtschreibfehler findet darf sie ruhig behalten, ich brauche sie nicht mehr, ich habe noch genug davon.






-
- Beiträge: 167
- Registriert: 29.12.2005 09:58
- Computerausstattung: Intel Core2 Quad (4x2,4 GHz), 4096 MB RAM, GForce 8800GTX 786 MB
Windows XP 32 Bit, PureBasic 4.40 (x86)
Re: ExplorerComboGadget und Netzlaufwerke
Kleiner Tipp am Rande, wenn ein Kommandozeilenprogramm keine Fehlermeldungen auf der Konsole ausgibt:Elektrolurch hat geschrieben: Nun möchte ich die Auswahl des Servernamens und der Freigabe so einfach wie möglich machen und Tippfehler des Users ausschließen, da Fehler in der Bash ja nicht angezeigt werden,würden sie halt einfach ins leere laufen und man wüßte nicht warum.
Code: Alles auswählen
kommando param1 param2
if [[ "$?" -ne 0 ]] ; then
echo "Fehler beim Aufruf von Kommando"
echo "Das geht in die Protokolldatei" >> /home/protokolle/ladescript.txt
else
echo "Alles OK"
fi
Ok das erklärt jetzt wofür das sein soll.Elektrolurch hat geschrieben: So nun habe ich es mit dem Pathrequester versucht der gibt aber nur den Servernamen zurück wenn ich ein Unterverzeichnis auswähle, will der User den Server komplett anbinden geht das garnicht. Zwinge ich den User in ein Unterverzeichnis ist dies auch nicht ohne Erklärung zu verstehen. Wenn ich dann per Procedure dann eine Liste mit den realen Freigaben zur Auswahl anbiete verwirrt dies den User erst recht.
Wenn ich das richtig verstanden habe braucht der MP3-Player den Namen der Netzwerkfreigabe, wie er in der Netzwerkumgebung angezeigt wird und nicht den absoluten Pfad auf der Platte des Servers? In dem Fall liefert der PathRequester den richtigen Freigabenamen (den lokalen Pfad kennt erstmal eh nur der Server selbst).Elektrolurch hat geschrieben: Ich muß aber diesen Weg gehen da wie ich schon ermittelt habe manche User dem Ordner einen ähnlichen aber nicht den gleichen Freigabenahmen geben. Also geht diese Auswahl nur über die Liste der Freigaben. Diese Liste krieg ich aber nur über den Servernamen (den ich ja sowieso brauche). Um Fehler zu minimieren möchte ich diesen Servernamen am besten mit einem Gadget zum selektieren auswählen.
Wenn auf dem Server "Musik1" jemand ein Verzeichnis anlegt mit dem Pfad C:\Daten\Musik\Favoriten\ und das dann frei gibt als "TolleMusik", dann ist das im PathRequester unter \\Musik1\TolleMusik\ zu finden. Den Pfad wolltest du doch, oder?
Bleibt also nur noch das Problem das ein Server komplett ausgewählt werden soll:
Ich würde als Umgehungslösung ein StringGadget nehmen, und dann per Ping prüfen ob der eingegebene Server erreichbar ist, bis sich eine Möglichkeit findet, die ExplorerGadgets so hinzubiegen.
Vielleicht postet hier auch noch wer von den API-Spezis was um die Netzwerkumgebung selber zu durchsuchen, dann könntest es mit nem normalen ComboBoxGadget/TreeGadget/ListViewGadget machen.
WinXP 32 Bit, PureBasic 4.40 (x86)
- Elektrolurch
- Beiträge: 168
- Registriert: 11.10.2007 16:48
- Wohnort: 49°26'51.46"N - 8°59'49.06"E
- Kontaktdaten:
Re: ExplorerComboGadget und Netzlaufwerke
Hi Rokur
http://www.purebasic.fr/english/viewtop ... ombogadget
Ich habe auch darüber nachgedacht den IPRange des Netzwerkes abzuklappern und so eine Liste mit allen potentiellen Quellen zu erstellen. Ist aber aufwendig langsam und evtl nicht komplett wenn die Netzwerke kompliziert sind.
Ich kann mich irgendwie noch nicht für einen Weg entscheiden da alle noch nicht so richtig gut sind.
Ich bin also noch aufgeschlossen für jegliche Vorschläge.
BYe André
Ja ist schon klar aber ich habe lediglich einen Telnetzugang zu diesem Linuxsystem und eigentlich läuft dies ja nach der Installation autark. Ich habe aber eine Testfunktion und optional einen kleinen Monitor, so dass ich einmal die Bash per Telnet starte und die Ausgaben in meinem Monitor sehen kann.Rokur hat geschrieben: Kleiner Tipp am Rande, wenn ein Kommandozeilenprogramm keine Fehlermeldungen auf der Konsole ausgibt:$? gibt den Rückgabewert (Returncode/Exitcode) des letzten Kommandos zurück, 0 ist erfolgreich, alles andere eine Fehlernummer.Code: Alles auswählen
kommando param1 param2 if [[ "$?" -ne 0 ]] ; then echo "Fehler beim Aufruf von Kommando" echo "Das geht in die Protokolldatei" >> /home/protokolle/ladescript.txt else echo "Alles OK" fi
Ups, das war mir noch garnicht aufgefallen allerdings muß ich dann noch überprüfen, dass der User dann auch den Freigabenamen und nicht den Ordner nimmt. Im Pathrequester sind beide möglich!Wenn ich das richtig verstanden habe braucht der MP3-Player den Namen der Netzwerkfreigabe, wie er in der Netzwerkumgebung angezeigt wird und nicht den absoluten Pfad auf der Platte des Servers? In dem Fall liefert der PathRequester den richtigen Freigabenamen (den lokalen Pfad kennt erstmal eh nur der Server selbst).
Wenn auf dem Server "Musik1" jemand ein Verzeichnis anlegt mit dem Pfad C:\Daten\Musik\Favoriten\ und das dann frei gibt als "TolleMusik", dann ist das im PathRequester unter \\Musik1\TolleMusik\ zu finden. Den Pfad wolltest du doch, oder?
Das ist wohl die einzige praktikable Lösung, hat allerdings ein Bequemlichkeitsdefizit.Bleibt also nur noch das Problem das ein Server komplett ausgewählt werden soll:
Ich würde als Umgehungslösung ein StringGadget nehmen, und dann per Ping prüfen ob der eingegebene Server erreichbar ist, bis sich eine Möglichkeit findet, die ExplorerGadgets so hinzubiegen.
Im englischen Forum gab es mal ein gleiches anliegen ist aber auf der Ziellinie eingeschlafen.Vielleicht postet hier auch noch wer von den API-Spezis was um die Netzwerkumgebung selber zu durchsuchen, dann könntest es mit nem normalen ComboBoxGadget/TreeGadget/ListViewGadget machen.
http://www.purebasic.fr/english/viewtop ... ombogadget
Ich habe auch darüber nachgedacht den IPRange des Netzwerkes abzuklappern und so eine Liste mit allen potentiellen Quellen zu erstellen. Ist aber aufwendig langsam und evtl nicht komplett wenn die Netzwerke kompliziert sind.
Ich kann mich irgendwie noch nicht für einen Weg entscheiden da alle noch nicht so richtig gut sind.
Ich bin also noch aufgeschlossen für jegliche Vorschläge.

BYe André
Wer Rechtschreibfehler findet darf sie ruhig behalten, ich brauche sie nicht mehr, ich habe noch genug davon.






- Elektrolurch
- Beiträge: 168
- Registriert: 11.10.2007 16:48
- Wohnort: 49°26'51.46"N - 8°59'49.06"E
- Kontaktdaten:
Re: ExplorerComboGadget und Netzlaufwerke
Hi Rokur and all
Ich habe nun im Codearchiv doch noch was gefunden.
Folgenden Code
http://www.purearea.net/pb/CodeArchiv/I ... omputer.pb
habe ich für mich wie folgt zusammengestrichen.
Funzt einwandfrei zum wählen des Servers.
Ein extra Danke an Rokur dafür daß er mich bei der Stange hielt.
BYe André
Ich habe nun im Codearchiv doch noch was gefunden.
Folgenden Code
http://www.purearea.net/pb/CodeArchiv/I ... omputer.pb
habe ich für mich wie folgt zusammengestrichen.
Code: Alles auswählen
Procedure.s GetNetworkComputer (parentwindow, title$)
#CSIDL_NETWORK = $12
Structure EMID
cb.b
abID.b[1]
EndStructure
itemid.ITEMIDLIST
If SHGetSpecialFolderLocation_ (0, #CSIDL_NETWORK, @itemid) = #NOERROR
Define.BROWSEINFO bi
For b = 0 To SizeOf (BROWSEINFO) - 1
PokeB (@bi + b, 0)
Next
computer$ = Space (#MAX_PATH)
bi\hwndOwner = parentwindow
bi\pidlRoot = *itemid
bi\pszDisplayName = @computer$
bi\lpszTitle = @title$
bi\ulFlags = #BIF_BROWSEFORCOMPUTER
pidl = SHBrowseForFolder_ (@bi)
EndIf
If computer$ = Space (#MAX_PATH)
computer$ = ""
EndIf
ProcedureReturn computer$
EndProcedure
pc$ = GetNetworkComputer (0, "Bitte den Server wählen.")
If pc$
Debug pc$
EndIf
Ein extra Danke an Rokur dafür daß er mich bei der Stange hielt.

BYe André
Wer Rechtschreibfehler findet darf sie ruhig behalten, ich brauche sie nicht mehr, ich habe noch genug davon.





