Hallo,
Ich habe ein Hauptformular und einen als Klasse geschriebenen Controller.
Preisfrage: Wo in der Anwendung instantiiere ich den Controller ?
ism
Könnte unglückliches Design sein.
Trenne Daten (Stringliste) und optische Präsentation (Grid).
Würde auch sinnlose Hintergrundarbeit verhindern
ism
Hallo,
eine Anfängerfrage: Ich befasse mich zur Zeit mit Fingerprintscannern, wobei es mir NICHT um eine wie auch immer geartete Anmeldung / Authentifikation an Windows geht.
Ziel ist ein Zugangskontrollsystem, bei dem registrierte Kunden "mit ihrem Finger" eintreten, bezahlen usw. können.
Mit in einer DB gespeicherten Kundendaten incl. Fingerabdrücken.
Jetzt liest man, daß das WBF quasi dazu konforme Reader ansprechen kann, und daß man damit seine eigene Anwendung stricken kann.
Geht das wirklich oder würde man doch nur bei einem Logon landen ?
Anforderungen wären in etwa:
Und natürlich: Reicht da das API von Microsoft oder braucht man noch ein externes SDK ?
Ich weiß, hier im Forum gibt es mehrere threads zu dem Thema, die habe ich schon durch...
Gruß ism
Also ich kann auf Signaturen händeringend verzichten. Da steht oft nur pseudogeistreicher Unsinn.
Und zur Forensoftware: Never touch a running System.
Man hat sich dran gewöhnt, man ist im Forum, um zu arbeiten, man weiß, wie man wo was schnell findet, coole Features müßten schon sehr cool (sprich: nützlich) sein um die Übergangsschwierigkeiten zu rechtfertigen.
Und dann geht es ja wohl nie ganz ohne Datenverluste ab bei solchen Aktionen.
Also von mir ein klares 🙄
Gruß ism
Hallo,
die Dinge haben sich weiterentwickelt.
an Taipi88: Geht klar, deshalb mein erster Ansazu über Delegates (Nowosti() )
Ich dachte eben, Events seien genau das Mittel, das Invoke zu vermeiden.
an LaTino: Äh ja, ich bin am Verstehen. 😎
Der Artikel von Herbivore ist wirklich gut.
Man bleint dran,
ism
Nachdem ersten Versuch über eine eigene Eventklasse wurde ich von der Runtime vollgenölt, Thread A würde in Thread B (GUI) schreiben.
Fazit: Ich mußte mir eine üble Invoke-Konstruktion trotz Events besorgen.
Wo soll nun der Vorteil der Events liegen ?
Da sind Delegaten doch ein wenig einfacher zu verstehen.
Und: Zieht ein Event, der aus einem Thread etwas an der GUI drehen will, zwangsläufig ein Invoke nach sich ?
Gruß ism
Hallo,
danke, das kam mir auch schon in den Sinn.
ism
Hallo,
erstmal zwei Informationen:
Jede Serialportinstanz verweist dabei auf den gleichen Eventhandler DataReceived() :
Das heißt einfach nichts anderes als daß ich jedem Serialport den gleichen Datareceived-Handler zuweise. Über "sender" komme ich ja an den Absender ran.
Ist ein Datenpaket erkannt (klappt) übergebe ich die Nutzdaten in ein Hilfsobjekt und starte einen Einmal-Thread (klappt), welcher die spezifische Arbeit erledigt (klappt).
Aber jetzt kommt eine Stelle, bei der ich mich unwohl fühle:
Wie bekommt die GUI eine Rückmeldung vom Thread, sprich seinem Hilfsobjekt ?
Das Hilfsobjekt steckt in einer separat deklarierten Quelldatei und soll vom Hauptformular nichts wissen, ich will das Zeugs je vielleicht weiterverwenden.
Dazu habe ich im Hauptformular einen Delegaten und eine konkrete Instanz definiert:
public delegate void Nowosti( string nobui);
public void konkNowosti(string nowui)
{
// stelle die Nachricht irgendwo dar
}
Weiterhin bekommt die Helferklasse den gleichen Delegaten und einen Verweis für ein Besitzer-Objekt:
public delegate void nowo(String nachri);
public nowo Nowohandler = null;
public object Elter = null; // das wird das Hauptformular
Im Hauptthread, wo das Hilfsobjekt erstellt wird, weise ich Besitzer (Elter) und Delegat zu:
// Ka heißt mein Hilfsobjekt
Ka.Nowohandler = konkNowosti;
Ka.Elter = this;
... und zum guten Schluß rufe ich im Arbeitsthread den Delegaten auf:
Nachr = "Es hat geklappt";
((Form) this.Elter).Invoke(new nowo(Nowohandler),Nachr);
So, Code zur Kritik freigegeben. Der Compiler hat Ja gesagt, das Programm läuft...
Gruß ism
Hallo,
danke erstmal an alle.
Genug Stoff zum Rumprobieren.
Bis zum Punkt 4 bin ich jetzt gekommen:
public class Einheit : SerialPort
{
public Paket P=null;
public string Bez="";
public Einheit(string cname, int Baud, Parity party, int Bits, int Plength,
string _bez)
: base (cname,Baud,party,Bits)
{
this.Bez = _bez;
this.P = new Paket(Plength);
}
}
Diese "Einheit" besitzt ein "Paket", und im Ereignishandler kann ich das über Casting ansprechen:
private void OnDataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
Einheit iP= ( (Einheit) sender);
while (iP.BytesToRead > 0)
{
iP.P.Push( iP.ReadByte() );
// Push(int) schiebt das nächste Byte in die
// Warteschlange des Paketes
// hier dann Paketerkennung usw.
}
}
Bis dahin scheint es mir relativ sauberer Stil zu sein.
Die Weiterverarbeitung (bei erkanntem Paket) würde ich gerne nach dem Motto
"fire and forget" abhandeln, dazu werde ich mir aber wohl noch userdefinierte Events ansehen müssen...
ism
Hallo,
ich stecke bei folgendem Problem fest:
Ich möchte N Serialports erzeugen, initialisieren und starten (geht schon);
Jede Serialportinstanz verweist dabei auf den gleichen Eventhandler DataReceived()
Die Daten kommen "unvorhersehbar" rein und sind byte - Werte
Jedem Serialport wird eine Datenstruktur mit Namen "Paket" zugeordnet; dieses "Paket" schiebt sequenziell Bytes rein (Schieberegister) und prüft nach jedem neuen Byte, ob ein Paket erkannt wurde (Anfengssequenz, Checksumme). Auch das geht.
Das Problem: Wie gelangen die Bytes aus dem jeweiligen Eventhandler
KORREKT in ihr zugeordnetes Paket ?
Ich habe so ein Programm schonmal in Delphi geschrieben und möchte nun Designsünden von vornherein vermeiden.
Natürlich könnte ich im Tag des Serialports einen Verweis auf das zugeordnete Paket unterbringen, das kommt mir aber sehr dreckig vor...
Wenn 4. erledigt ist: Wie stößt ein erkanntes Paket korrekt die Weiterverarbeitung seiner selbst an ?
Ich will keinen Code sondern eher Strategien, um den Paradigmenwechsel zu NET hinzubekommen.
ism.
EDIT:
Habe gerade festgestellt, daß Serialport gar keinen tag hat.
Also entfällt auch dieser Schleichpfad...
(4.)
Es gibt keine Inputbox ? Echt nicht ?
Aber man könnte sich eine selbst zimmern, auch für spätere projekte.
Sollte als Roadmap reichen
Ich hab mir sowas gebastelt und: seeehr nützlich
Die Frage ist ein bißchen zu allgemein.
Was ist "die Mitte" ?
Und wenns mal zwei Kreise sind ? Oder gar Buchstaben ?
Was für Grafiken können das sein ?
Oder gehts eigentlich um den Schwerpunkt ?
Ne eigene Schach - KI ?
Ein Go - Programm ?
Einen kleinen, aber ergonomischen PIM (Personal Information Manager) ?
und und und...
Und weiterhin wäre zu sagen, daß die Menüs in der Control-Collection nicht beachtet werden.
Ich habe aus stackoverflow eine Methode gekupfert, wie auch Menüs und Menüitems rekursiv durchmustert.
Die mußt du zusätzlich zur normalen Controlcollection durchlaufen.
Bist Du Dir sicher, daß Dein Programmdesign gut ist ?
Das hier läuft nämlich auf Scripting hinaus und lohnt sich nur, wenn die Bedingungen wirklich ganz wild von Tag zu Tag wechseln.
Wenn etliche, aber von ihrer Struktur immer gleiche Fälle zu unterscheiden sind würde ich in der INI
a) die vorkommenden Variablenwerte und
b) den konkreten Fall in Form einer Nummer hinterlegen.
Jede Nummer bedeutet eine konkrete Testformel,
Bsp: fall=0 => if A = B
fall= 1 0> if A = B and C = D
usw.
Auswertung erfolgt hardcodiert (und dem Nutzer verborgen) im Programm selbst.
Hätte auch den Vorteil, daß Du nicht Deine eigenen Syntaxfehler in der INI parsen mußt (und es werden welche passieren).
Kommt auch drauf an, wieviel Du von Deinem Gehirnschmalz (die Testformeln nämlich) für Dich behalten willt/mußt.
ism
Was mir aufgefallen ist, gleich im Startbeitrag: Wieso schreibst Du "Führung" in Anführungsstrichen ?
Führt sie oder nicht ? Wenn sie führt hat sie auch die Pflicht und Kompetenz (hoffentlich) Euren "Kulturkampf" zu schlichten.
Und wir aus der Ferne können zu dem was Besser ist, gar nichts sagen.
Da muß ich doch mal dazwischenfragen:
Wieso "sind Arrays nie public" ?
Aus Tradition ? Gibts da gewichtige Gründe, eine derart wichtige Datenstruktur (für Naturwissenschaftler z. Bsp) private zu machen ?
Und wie sieht dann die Übergabe zwischen Klassen aus ?
Ich höre...
Es handelt sich um Delphi 7, und es wird dabei bleiben.
ism
Hallo,
danke für die Antworten.
Das ist hübsch, die falsche Reihenfolge hatte ich nämlich aus dem allwissenden Internätt.
Man lernt nie aus.
Also wäre
[DllImport("forindll.dll", CallingConvention = CallingConvention.StdCall) ]
[return: MarshalAs(UnmanagedType.AnsiBStr)] // Zeile X
public static extern int IO_read_E( int device);
eine mögliche korrekte Form...
MfG,
ism.
Hallo,
ich muß eine Delphi - Dll ansprechen, d.h. von C# (Visual Studio 2010) aus nutzen.
Die Dll ist erstellt, es handelt sich um eine kleine Sammlung von Funktionen, die nur denkbar einfachste Typen zurückgeben: PChar und integer.
Die Deklaration der externen Funktionen sieht so aus:
[DllImport("forindll.dll", CallingConvention = CallingConvention.StdCall)]
public static extern string IO_anzahl_string();
[return: MarshalAs(UnmanagedType.AnsiBStr)] // Zeile X
[DllImport("forindll.dll", CallingConvention = CallingConvention.StdCall) ]
public static extern int IO_read_E( int device);
[DllImport("forindll.dll", CallingConvention = CallingConvention.StdCall) ]
public static extern int IO_read_A( int device);
Bzgl. Mashalling bin ich noch ziemlich unbeleckt.
Folgendes Rätsel: Lasse ich die Zeile X drin werde ich beim Aufruf von
IO_Read_E(...) volgenölt, der Rückgabewert könne nicht gemarshallt werden, und ich müßte mittels [MarshalAs(UnmanagedType.U4)] oder ...I4 vermitteln.
Half selbstredend nichts. Komischerweise finktionierte die NÄCHSTE Funktion in der Aufzählung wieder klaglos (IO_read_A() )
Kommentiere ich Zeile X aus, funktionieren alle Funktionen.
Wie weit wirkt diese [return: ...] Klausel ?
Ist das Auskommentieren überhaupt der Grund fürs Funktionieren von IO_read_E() oder nur Zufall ?
Falls jemand eine Idee hat...
ism
Falls es noch aktuell ist:
Dein Verfahren wird mehrstufig sein müssen um die Datenflut einigermaßen in den Griff zu kriegen.
Das ist doch kein Widerspruch: Der Reader klabt an einem Windows PC und wird üver VS 2010 programmiert.
Hallo,
folgendes Problem: Ich möchte über einen NFC-fähigen Reader ein NFC - fähiges Smartphone "ansprechen" und es veranlassen, mir seine IMEI mitzuteilen.
Bedingung: Der Handybesitzer muß nur NFC einschalten, er braucht **:::
Gruß ism
Guten Tag,
ich arbeite zur eit an Programmen, die TFTP benutzen, nur clientseitig.
Das findet allerdings in Delphi statt.
Meinem Wissensdurst folgend habe ich versucht, ein Testprogramm in C# zu schreiben.
Zur Anwendung kommt VS 2010 mit NET 4.0.
Ein Hobbyist stellte auf CodeProject auch eine Klasse zur Verfügung, siehe hier:
Das Einbinden ist sehr leicht, nur bekomme ich immer den Fehler > Fehlermeldung:
"Der angegebene Host ist unbekannt".
Hat jemand Erfahrung mit dieser Klasse ? Mehr als "192.192.172.76" unter Host eintragen , der Port ist 69, kann man ja wohl nicht falsch machen ?
Die Klasse enthält auch keine Methode wie Connect() oder Open().
In der Klassenbibliothek von Microsoft scheint jetzt keine dedizierte TFTP - Klasse zu finden zu sein.
Fals jemand was weiß...
Ic h glaube nicht, daß die (meine) ABlehnung von Smartewatches jegliche Weiterentwicklung verneint.
Ich lehne damit DIESE Entwicklung ab, andere finde ich sehr interessant.
Aber schon beim vernetzten Heim habe ich so ein ungutes Gefühl.
Das endet dann damit, daß die Krankenkasse die Inhaltsdaten des Kühlschranks - abgreifbar über die RFID's der vielen Joghurtbecher und Bierbüchsen - haben möchte, um meinen Tarif "maßzuschneidern" - nee danke.
Das mit der Bequemlichkeit stimmt allerdings. Lustigerweise trage ich ne Armbanduhr, WEIL ich bequem bin...
Auch wenn Ihrs für defätistisch haltet: Dinge, die die Welt nicht braucht.
Ein elektronisches Dingsbums, weil der Griff zum Handy schon zu schwer ist ?
Unter der Dusche das Handy fernsteuern, warum auch immer ? Hat die Uhr wenigstens einen Rauschfilter ? Oh sorry...
Unter der Dusche bin ich NICHT ERREICHBAR.
Was wird denn die nächste Neuerung ? Ein Ohrclip, der einem sagt, daß die Smartwatch was zu melden hat, daß das Smartphone was aufgefangen hat...
Schöne neue Welt 😎
Danke für die Antwort.
Die besagte Stelle hatte ich auch gefunden, aber großzügig ignoriert, da das Internet voll von (angeblich) funktionierenden Beispielen ist (was für ein Misthaufen).
Leider bin ich Neuling auf dem Gebiet.
Da werde ich mal meinen eigenen Provider providern (wenn ich weiß, was das ist).
Gibt es in den Informationen über die geöffneten Dateien so etwas wie "Besitzer" ?
Das könntre dann der öffnende Prozess sein.
Hallo,
folgendes Problem:
Die beiden Tastaturen kann ich identifizieren über eine WMI - Abfrage:
select PnPDeviceId from CIM_LogicalDevice where Caption like \"%Tasten%\"
List<ManagementObject> mcl = new List<ManagementObject>();
// ... usw
public void HoleUSB()
{
mcl.Clear();
ManagementObjectSearcher mos = new ManagementObjectSearcher(Fr);
foreach (ManagementObject mob in mos.Get())
{
mcl.Add(mob);
}
}
So weit, so gut. in mcl[0] und mcl[1] liegen dann tatsächlich die beiden Managementobjekte, die den Tastaturen entsprechen.
Dann aber gehts nicht weiter. Ich bereite den Aufruf von SetPowerState vor mit einem Objektarray:
Object[] args = new Object[2] {6, DateTime.Now} ;
die 6 entspricht dem PowerOff
Aber dann:
try
{
mcl[0].InvokeMethod("SetPowerState",args);
}
catch (Exception ex)
{
// ist nur eine Fehlerausgabe in einem Memo
P.Text+="ERROR"+CR+ex.Message+CR;
}
Die Fehlermeldung, die IMMER kommt, lautet:> Fehlermeldung:
Der Vorgang ist aufgrund des aktuellen Zustands des Objekts ungültig.
Sehr informativ.
Bestimmt nur ein Anfängerfehler, aber ich habe keine Ahnung, in welcher Richtung ich suchen soll.
Ach so: ich arbeite untr Win7 mit VS 2010.
Hallo,
das mit CRViewer.zoom(int32) habe ich erfolglos getestet.
Ich habe jetzt folgende Prothese implementiert:
Update: Wenn der Timer das Reportfenster maximiert siehts sogar noch schöner aus.
Guten Tag,
folgendes Problem:
Ich arbeite an einer "geerbten" Softwarelösung, die auch eine Berichtsvorschau mittels Crystal Reports enthält.
Es gibt einen "alten" Bericht, der in der Vorschau (Komponente: CrystalReportViewer) auch zentriert angezeigt wird. Sein Format A4 hochkant.
Aber bei einem von mir neu entworfenen Bericht passiert Komisches:
Danke erstmal.
Da es ein "geerbtes" Programm ist kann ich die Struktur nicht mehr verändern.
Jetzt habe ich es mit mehreren Bringtofront() gelöst, ist aber ne Prothese.
Gruß ism
Hallo Ihr,
ich arbeite mit VS2010 und habe
folgendes Problem:
Die Panels Titel ... Zweig C sind Top-gedockt, der Fuss Bottom-gedockt.
Zu Anfang sind nur Titel und Fuß sichtbar.
Wenn ich jetzt im Programmverlauf zuerst Zweig A und (zeitlich) danach Zweig B sichtbar mache, kann es passieren, daß sich Zweig B an Zweig A vorbeischiebt.
Die Reihenfolge Zweig B ---> Zweig A sichtbar würde die optische Katastrophe beheben, ist aber von der Programmlogik nicht möglich (Nur wer A sagt...)
Hat die IDE hier eine leichte Meise ?
Oder gibts da im OI Eigenschaften, die ich einstellen könnte.
Rummachen in der Dokumentenstruktur bringt nichts, da liegen sie ja richtig.
Gibt es eine Möglichkeit, die Z-Indexe der Panels auszulesen ?
Da Bringtofront() und Sendtoback() ja eine Permutationsbasis bilden könnte ich so jede gewünschte Reihenfolge herstellen - als Notmaßnahme.
ism
(PS: Bin ab morgen erstmal offline)
Falls das Thema noch aktuell ist:
Such mal unter Graphentheorie / Adjazenz- oder Inzidenzmatrix
ism
Hallo,
ja danke erstmal für die Antworten.
Es handelt sich um WinForms.
Vielleicht doch ganz neu entwerfen...
Gruß ism
Hallo,
ich arbeite mit Visual Studio 2010 an einem "geerbten" Programm, dessen Formulare mächtig inhaltsvoll sind.
Leider kann sie der Formulardesigner nie vollständig anzeigen, und auch das Werkzeug "Dokumentenstruktur" ist nicht sonderlich hilfreich.
Vollansicht (Alt-Shift-Enter) ist auch zwecklos.
In den Fenstern scheinen sich zig Panele zu stapeln, die je nach Programmfluß sichtbar werden, über Visible und Dock=Top
Frage: Wie kann ich den Designer dazu bringen, alle Elemente auf dem Form anzuzeigen ?
Bitte keine Diskussionen über den Programmierstil, wie gesagt, ich habe es "geerbt" und muß das Programm dienstlich weiter verschönern.
ism
Hallo,
falls es noch aktuell sein sollte:
Man kann zentrale Bibliotheken, also selbstgeschriebene, in beliebig viele Projekte einbinden, muß dann aber die Quellfiles über Projekt | Hinzufügen... einbinden und
beim Bestätigen den geteilten OK-Knopf des Filedialogs beachten.
"Als Link einbinden" ist hier die erste Wahl, macht die Bibliothek debugbar und verhindert Versionswirrwarr.
(Visual Studio 2010)
Vielleicht solltest Du also wirklich Deine Argumentation noch mal überdenken und über den Tellerrand schauen.
Wenn ich über den Tellerrand schaue, dann in die Richtung, die mir die Arbeit erleichert.
Und ich spreize meine Finger gern für ein paar Klammern. Dann muß sich nämlich bei der Fehlersuche mein Gehirn nicht so spreizen.
Und Einrückung als gestalterisches Element benutze ich seit seligen Turbo-Pascal Zeiten.
Was für Dich grauenhaft ist, ist für die, die es können ein Segen.
Mag sein, aber ich schreibe über meine Meinung.
Es wäre nicht schlecht, wenn man auf abweichende Meinungen nicht so allergisch reagieren würde.
Anscheinend wird funktionale Programmierung wohlwollend mit "mathelastig" und "hochkomplex" gleichgesetzt.
Ich wäre da vorsichtiger.
Nach dem Wenigen, was ich über F# gelesen habe, ist diese Sprache entweder genial oder ein konzeptioneller Vollpfosten.
Zum Beispiel: Gliederung nicht mit Klammern, begin...end etc. sondern per Einrückung ! Ich fühlte mich peinlich an das Lochkartenzeitalter erinnert.
Und kauf Dir nicht das einzige deutschsprachige Buch "F#". Es liest sich grauenhaft.
ism
Ich habe folgendes Problem:
Ich will die "echte" Festplatten-ID auslesen, NICHT die achtstellige hexadezimale Volume SerNo.
Per WMI geht das unter Win 7
sehr gut:
"Select * from Win32_physicalmedia" mit den üblichen ManagementObjectSearchern .
Aber: Unter Win XP (SP3) ist der Eintrag für Serialnumber an FAST allen Rechnern leer. An einem einzigen Laptop (XP, SP3) funktioniert es komischwerweise.
Auf allen Rechnern ist NET 4.0 installiert, auf dem Laptop allerdings auch das Visual Studio 2010.
Was könnte die Ursache sein ? Und natürlich: wie komme ich auch unter XP an die echte SerNo ran ?
Übrigens bringt auch die Abfrage "Select * from Win32_diskdrive" zwar unter Win 7 etwas , nicht aber unter XP .
Kann man das mal in gutem Anfängerdeutsch ausdrücken?
Nein, die EXE kommt schön standardmäßig ins eigene Programmverzeichnis C:\Programs\MeineAnwendung.
Es geht hier um gemeinsame Datendateien, die das Programm in
C:\ProgramData\MeinAnwendungsdatenpfad ablegen muß.
Und da ich dieses (fremde) Meisterwerk beruflich übernommen hab, habe ich erstmal keinen Bock, da wild rumzuändern.
Im Übrigen wird beim Installer alles Mögliche, nur nicht ProgramData angeboten.
Also mach ichs beim ersten Starten der EXE im Programm selbst: Verzeichnis anlegen, Daten reinkopieren, fertsch. Unelegant, aber schnell.
ism
c:\ProgramData ist übrigens CommonApplicationData, dein Benutzerprofilordner ist wo anders.
Das wäre ja auch mein Ziel. Es geht definitiv um C:\ProgramData
Leider wird dieser symbolische Ordner [CommonApplicationData] vom Installer nicht angeboten.
Die Einrichtung eines "benutzerdefinierten Ordners", dem ich trickreich die DefaultLocation [CommonApplicationData] ( inklusive der gewünschten Unterordner) verpaßt habe, wird auch nicht beachtet.
ism
Der Titel sagt ja schon Einiges: Mein Setupprojekt muß etliche Order anlegen, samt Unterordnern + Dateien.
Ich arbeite unter Win 7, wo der symbolische Order ProgramData heißt.
Übersetze ich das Setupprojekt, geht die Sache gut, wenn auch mit Kommentaren à la "Im Benutzerprofilordner installiert man nicht..."
Da ich die Arbeit an einem fremden Programm aber fortsetze habe ich keine Wahl: Die Ordner samt Inhalt müssen dort installiert werden.
Führe ich die setup.exe als Admin aus, gleiches Ergebnis.
Die Ordner (nebst Inhalt) werden nicht angelegt, Fehlermeldungen gibts keine.
Liegts an Windows ?
IDE: Visual Studio 2010 Prof.
ism
Hallo,
ich arbeite mit Visual Studio 2010 (Vollversion) und muß ein Installationsprogramm erstellen.
Bis zu den benutzerdefinierten Aktionen habe ich mich durchgearbeitet, aber jetzt wirds schwierig: Das Installationsprogramm soll zum krönenden Abschluß drei MSI-Dateien ausführen (Datenbankzeugs), *.msi läßt sich aber im Editor nicht hinzufügen
Kein gültiger Dateityp für eine benutzerdefinierte Aktion.
Wie kriege ich die MSI's doch noch rein ?
ism
(PS: Bin Anfänger, alles soz. zum ersten Mal)