>Erledigt< ExplorerComboGadget und Netzlaufwerke

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
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

Beitrag von Elektrolurch »

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é
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.
BildBildBild
Rokur
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

Beitrag von Rokur »

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.
WinXP 32 Bit, PureBasic 4.40 (x86)
Benutzeravatar
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

Beitrag von Elektrolurch »

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é
Wer Rechtschreibfehler findet darf sie ruhig behalten, ich brauche sie nicht mehr, ich habe noch genug davon.
BildBildBild
Rokur
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

Beitrag von Rokur »

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.
WinXP 32 Bit, PureBasic 4.40 (x86)
Benutzeravatar
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

Beitrag von Elektrolurch »

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é
Wer Rechtschreibfehler findet darf sie ruhig behalten, ich brauche sie nicht mehr, ich habe noch genug davon.
BildBildBild
Rokur
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

Beitrag von Rokur »

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?
WinXP 32 Bit, PureBasic 4.40 (x86)
Benutzeravatar
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

Beitrag von Elektrolurch »

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. :oops:
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. 8)
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.
BildBildBild
Rokur
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

Beitrag von Rokur »

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.
Kleiner Tipp am Rande, wenn ein Kommandozeilenprogramm keine Fehlermeldungen auf der Konsole ausgibt:

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
$? gibt den Rückgabewert (Returncode/Exitcode) des letzten Kommandos zurück, 0 ist erfolgreich, alles andere eine Fehlernummer.
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.
Ok das erklärt jetzt wofür das sein soll.
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 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?

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)
Benutzeravatar
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

Beitrag von Elektrolurch »

Hi Rokur
Rokur hat geschrieben: Kleiner Tipp am Rande, wenn ein Kommandozeilenprogramm keine Fehlermeldungen auf der Konsole ausgibt:

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
$? gibt den Rückgabewert (Returncode/Exitcode) des letzten Kommandos zurück, 0 ist erfolgreich, alles andere eine Fehlernummer.
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.
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?
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!
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.
Das ist wohl die einzige praktikable Lösung, hat allerdings ein Bequemlichkeitsdefizit.
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.
Im englischen Forum gab es mal ein gleiches anliegen ist aber auf der Ziellinie eingeschlafen.
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. :praise:

BYe André
Wer Rechtschreibfehler findet darf sie ruhig behalten, ich brauche sie nicht mehr, ich habe noch genug davon.
BildBildBild
Benutzeravatar
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

Beitrag von Elektrolurch »

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.

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
Funzt einwandfrei zum wählen des Servers.
Ein extra Danke an Rokur dafür daß er mich bei der Stange hielt. :allright:

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