Laden...
Avatar #avatar-2376.jpg
Benutzerbeschreibung
Mag unkonventionelle Lösungen, am liebsten wenn sie garnicht gehen dürften.

Forenbeiträge von Floste Ingesamt 1.130 Beiträge

12.03.2011 - 21:12 Uhr

Ich hab mal ne form auf ne form gelegt (unterfenster quasi) und auf dem unterfenster is ne textbox. Wenn das unterfenster einen anderen FormBorderStyle als none hat, dann lässt sich die textbox mit der maus nicht bearbeiten: Auswählen geht ned, cursor setzten geht ned, contextmenu geht ned. Mit tastatur geht bearbeiten, aber auch kein contextmenu.

Warum is das so? Lässt sich das auf einfache weise umgehen? (naja ansonsten is auch keine kust, nen rahmen selbst zu zeichnen, hab die knöpfe in der ecke eh aus)

09.03.2011 - 14:55 Uhr

haste schon Assembly.GetEntryAssembly() bzw Assembly.GetCallingAssembly() probiert?

08.03.2011 - 20:57 Uhr
  1. stream besorgen
  2. streamreader/textreader erstellen
  3. zeilenweise einlesen oder alles auf einmal einlesen und string.split benutzen (letzteres gibt direkt ein array)
  4. splitten bei ; und maximum 2 angeben
  5. indizieren(dictionary/sortiertes array/wasauchimmer) und/oder suchen
08.03.2011 - 17:12 Uhr

sollte das Ergebnis im ersten Beispiel nicht a sein?

Nope, nicht a, denn a ist auch in a-b-c-d enthalten.

Und im zweiten Beispiel a-b?

a-b und b kommt aufs gleiche raus, da es eine baumstruktur ist, und jedes element seinen übergeordneten knoten kennt.

Und wo ist das Problem?

Das problem, war, dass mir nur dein zweiter ansatz eingefallen war und ich diesen schon implementiert hatte, welcher aber für mein erstes beispiel a anstatt d bzw a-b-c-d liefert! Hatte dann bemerkt, dass das ned so optimal ist und den beitrag oben verfasst.

Dein erster ansatz sollte aber leicht abgewandelt anwendbar sein. Warum is mir das ned gleich eingefallen facepalm EDIT: klappt jetzt

07.03.2011 - 20:17 Uhr

Ich suche grade einen algorithmus, der mir den längsten pfad ausgibt, den alle in einer liste gegebenen gemeinsam haben.
"Gemeinsam haben" heißt in diesem falle, dass ein pfad den anfang des anderen bildet.

Die pfade bestehen aus den knoten eines baumes.

Beispiele:

a
a-b-c-d
a-b
=> d

a-b-c
a-b-d
=> b

a-b-c
a-b
w-t-f
=> <null>

03.03.2011 - 09:58 Uhr

geht nicht mit array.

Leite ne klasse von List<int> ab und überschreib die methoden:

class MyList:List<int>
{
    MyList(myclass besitzer)
    {
        this.besitzer=besitzer;
    }
    
    myclass besitzer;

    override void Add(int item)
    {
        besitzer.benachrichtige
        base.Add(item);
    }
}
28.02.2011 - 20:46 Uhr

😁 schonmal was vom casten gehört? [Hinweis] Wie poste ich richtig? Punkt 1.1

28.02.2011 - 20:44 Uhr

Ich frage mich grade, ob es möglich ist, dass eine klasse mehrere Felder enthält , die den gleichen namen tragen.

Es geht mir dabei nicht unbedingt um gültige C#- Assemblies, sondern generell um mittels Typebuilder, IlAsm oder irgendeiner anderen möglichen .net-Sprache generierte und möglicherweise obfuskierte assemblies.

27.02.2011 - 21:57 Uhr

Hab etwas weiter gearbeitet:

-Klammern werden jetzt korrekt gesetzt
-Felder werden jetzt auch im Code angezeigt
-Suche nach Typen eingebaut (erst oben die Lupe, doppelklick auf gewünschten Eintrag)
-Bestimmte Kombinationen aus Schleifen und Ifs verursachen keine Endlosschleife im decompiler (aufhängen) mehr.
-Updater eingebaut

@TheBrainiac

this ist bei dir kein Keyword.

Ich führe es bisher als gewöhnliche Variable, is doch ned so schlimm, wenn es in schwarz statt blau steht^^

Das springen mithilfe der Links im Code funktioniert nicht

Bei mir schon. Ich wette bei dir kam ne Warnung wegen Javascript und du hast es deaktiviert 😭

27.02.2011 - 20:04 Uhr

Wo genau gebe ich den process an?

hprocess

Das ist ein handle, das mit der openprocess-methode erzeugt wird
Wenn du es in c# benutzen willst: http://www.pinvoke.net/default.aspx/kernel32.openprocess
Doku: OpenProcess Function

Wo den wert, wo die adresse?

BaseAddress is die addresse, NewVal der wert (suche -> bitconverter)

Was ist "this.hprocess" und out this.byteswritten?

Out heißt, dass ein zeiger auf die variable übergeben wird. mithilfe dieses zeigers wird der inhalt der veraiablen verändert. Also eine wertrückgabe.

Was ist intptr?

Meißt eine speicheraddresse, sone art zeiger.

Wenn ich meine addressen suche kommt z.b. 0CB34727 raus doch meist sehe ich die adressen in folgender form: 0xCB692635

0x heißt hexadezimal

was ist da der unterschied und wie bekomme ich die eine in die andere adresse

ohne 0x wird is fälschlicherweise als bezeichner interpretiert

25.02.2011 - 23:33 Uhr

Screenshot

25.02.2011 - 23:27 Uhr

Ich hab mich mal an einem Decompiler versucht. Das bisherige Resultat ist im Anhang.

Funktionsweise:
Grob gesagt wird erstmal "irgendeine" Übersetzung gesucht und diese dann immer mehr aufgehübscht.
Zuerst wird mit Mono.Cecil den IL-code eingelesen. Dann wird dieser in eine Zwischendarstelung überführt und gotos durch Referenzen und Vorgänge auf dem Stack durch Hilfsvariablen (nicht zu knapp) ersetzt. Dann werden Kostrukte wie ifs und trys gesucht. Danach werden soviele Hilfsvariablen wie möglich entfernt und kleinere verbesserungen durchgeführt. Am Schluss wird das ganze dann in einem Rutsch als Code ausgegeben.

Dieses Vorgehen hat den Vorteil, dass es auchnoch Code übersetzen kann, der sich so in c# garnicht schreiben lässt beziehungsweise so obfuskiert ist, dass Reflector einfach aufgibt, allerdings bleiben in solchen Fällen dann entsprechend viele Hilfsvariablen stehen, was die Sache nichtgrade übersichtlich macht.

Code wird oft etwas freier/kreativer übersetzt und ich habe vieles nochnicht implementiert ( ? , ?? ,++, +=,-=, etc). Das soll nicht heißen, dass diese Ausdrücke garnicht oder falsch übersetzt werden, sondern dass sie umständlicher als nötig geschrieben werden. (z.B. der ?-operator als if m it hilfsvariablen und ++ als einfache addition, oft mit hilfsvariable)

[Edit] 27.2.2011 Version aktualisiert

19.02.2011 - 23:46 Uhr

Ursache gefunden:

  1. In den stylesheets sind diverse a:hover -regeln definiert, die underline einschalten
  2. Opera interpretiert die postid als erst hinter dem post zuende:
<a name="post3666158" id="post3666158">
   <table .....>
   </table>
</a>

Firefox dagegen macht folgendes:


<a name="post3666158" id="post3666158"> </a>
<table .....>
</table>

18.02.2011 - 17:21 Uhr

Das einfachste ist, javascript zu verwenden. Ansonsten geht es mit der winapi.

13.02.2011 - 21:05 Uhr

Die komplexität der API hat mich schon ein wenig abgeschreckt 😛

Wenn du dich über die "Komplexität" von cecil beschwerst, dann fang garnicht erst an, c# parsen zu wollen. Letzteres ist noch deutlich komplexer als mit cecil zu arbeiten.

Hast du dich damit schonmal befasst?

Ich befasse mich grade damit und die api fühlt sich etwas nach .net 1.0 an, ist aber an sonsten recht einfach, wenn man sich in .net auskennt.

Ein paar namen ersetzen bekommt damit denke ich auch ein einsteiger hin, es gibt da noch wesentlich ausgefuchstere möglichkeiten, code zu obfuskieren.

13.02.2011 - 11:04 Uhr

aber der Zugriff auf die Name-Property bzw. das dahinterliegenden Feld wird von der privaten Klasse durchgeführt (im Konstruktor

Wie soll das gehen, wenn der constructor so aussieht:

    private MyNested() { }

Also sowohl constructor aufrufen, alsauch das feld name setzen^^

12.02.2011 - 21:13 Uhr

Das hört sich doch gut an.

Danke 👍

12.02.2011 - 21:05 Uhr

Und wie mache ich callbacks von der dargestellten seite zu c#?

12.02.2011 - 20:26 Uhr

Hallo,

Ich suche eine einfache Möglichkeit folgendes in einer art Textfeld hinzubekommen:

-Text markierbar und kopierbar aber nicht direkt editierbar
-Einzelne Wörter haben andere Farbe/Formatierung
-Anklickbare Wörter/Links im Text, die C#-Funktionen aufrufen
-Editierbare Textboxen, die im Text eingebettet sind und dynamisch hinzugefügt und entfernt werden können: Man klickt auf ein Wort und die Textbox soll erscheinen und nach der Bearbeitung gibts ne Rückmeldung.

Welches Control bzw welche Technik wäre am einfachsten?

11.02.2011 - 11:40 Uhr

Im Grunde muss der Spammer auf Bounces reagieren. Die großen Mailprovider wie z.B.: GMX sperren den Absender für einige Stunden, wenn zu viele eMails bouncen.

Botnet mit 10k rechnern und so? Da hat eher gmx ein problem beim sperren als die spammer

10.02.2011 - 16:04 Uhr

Schau dir mal den sourcecode von meinem control an:
TreeListView

dort habe ich eigene column-header

[Edit] ich bin mir aber nicht so sicher, ob es wirklich das ist, was du suchst, denn dort leite ich nicht von listview ab.
Den designer selbst festlegen musst du aber so oder so.

10.02.2011 - 09:55 Uhr
public new void Foo()  
{  
  BaseClass.Foo();  
}  

Irgendwie kommt mir das bekannt vor:

Code aus der klasse System.Exception aus mscorlib.dll:


public Type GetType()
{
    return base.GetType();
}

04.02.2011 - 11:27 Uhr

jump zu einer location die ich schon kenne (also ein Sprung rückwärts)

nope, dass der sprung rückwärts ist, heißt nicht, dass du das ziel schon kennst! Das ziel kann auch vor deinem startpunkt liegen oder bisher mit einem anderen jump übersprungen worden sein. du musst schon wirklich ein dictionary führen. dabei gibt es aber auchnoch zu beachten, dass du den gesamten abgegangenen pfad abspeicherst. wenn ein knoten zwar markiert aber nicht im pfad ist, ist es keine schleife.

hast du ein Beispiel für ein If, welches rückwärts springt?
Ich kann mir gerade den Ablauf gar nicht vorstellen...

Naja es gibt compiler (unter anderem der von ms) bei denen der einstiegspunkt in eine methode in der mitte von dieser liegt, um die sprunglänge zu minimieren. dann springt ein if wirklich rückwärts, und auchnoch vor den einstiegspunkt.

04.02.2011 - 10:20 Uhr

Soweit ich das verstehe möchte er aufbauend auf dem disassembler einen decompiler bauen. Wobei das dann mit kleines tool eher nix wird.

04.02.2011 - 09:52 Uhr

Genauso wäre nen Vergleich mit Goto denkbar.

Das lässt sich in der tat in keiner weise bestimmen. Es ist aber auch egal in der praxis, da beides richtige übersetzungen sind.

Oder Methoden die sich gegenseitig aufrufen.

das erkennt man dann an der call-instruktion anstatt eines jumps

04.02.2011 - 09:45 Uhr

Wenn man von einem knoten (anweisung) über sprünge wieder zu dieser anweisung gelangen kann, dann ist das eine schleife.

Ich würde vorschlagen, mir alle knoten durchzugehen, mir dabei zu merken wo man schon war und wenn man bei einer Instruktion ankommt, wo man schon war und diese im zurückgelegten weg vorhanden ist, dann ist es eine schleife.

01.02.2011 - 17:53 Uhr

Rüberkopiert in den selben ordner hast di die dll aber oder?

29.01.2011 - 21:42 Uhr

wie und wann bekomme ich die Infos von dem Spiel in meine Applikation bzw wie kann ich die dann in eine Bitmap speichern?

Ich gehe mal davon aus, dass du fragst, wie du das bild in den ursprungsprozess zurückbekommst. Ansonsten wäre es die gleiche frage, wie winSharp93 schon erwähnt hat:

Entweder direkt im Hookhandler speichern oder ipc verwenden, aber das wird noch dein geringstes Problem sein...

29.01.2011 - 21:31 Uhr

schau dir die Überladungen von List<>.Sort an. Dort gibt es auch welche, wo du die Sortierreihenfolge bestimmen kannst, z.B. durch einen IComaparer<>.

Dann müsster er das Interface selbst implementieren. Eher Comparision<T>:


list.Sort((a,b)=>Compare(a[spaltenNr],b[spaltenNr]))

Compare musst du dir selbst raussuchen, je nachdem.

29.01.2011 - 20:51 Uhr

Argh, da hast du dir aber was ausgesucht...

Musst du apihooking nehmen. Ich hatte bereits ähnliche Probleme: [gelöst] Screenshot von opengl-spiel machen?

29.01.2011 - 12:58 Uhr

Probier mal folgenden Code. Der ist allerdings etwas tricky.

        private void AsyncStreamCopy(Stream input, Stream output, long length,Action onEnd)
        {
            AsyncCallback readCb = null;
            AsyncCallback writeCb = null;
            Action goOn = null;
            int chuckSize = 0x10000;
            int readStatus=2;
            int writeStatus=1;
            long bytesToRead = length;
            byte[] buffer = null;
            goOn = () =>
                {
                    if (Interlocked.CompareExchange(ref writeStatus, 0, 2) == 2)//um 2 zu erreichen muss writeCb aufgerufen worden sein -> hier kommt nur ein thread zur zeit rein
                    {
                        byte[] data = buffer;
                        if (data.Length == 0)
                        {
                            onEnd();
                            return;
                        }
                        Interlocked.Increment(ref readStatus);//daten genommen -> neue können gelesen werden
                        output.BeginWrite(data, 0, data.Length, writeCb, null);
                    }
                    if (Interlocked.CompareExchange(ref readStatus, 0, 2) == 2)//um 2 zu erreichen muss readCb aufgerufen worden sein -> hier kommt nur ein thread zur zeit rein
                    {
                        byte[] data = new byte[(int)Math.Min(bytesToRead, chuckSize)];
                        bytesToRead -= data.Length;
                        input.BeginRead(data, 0, data.Length, readCb, data);
                    }
                };
            readCb = (ar) =>
                {
                    input.EndRead(ar);
                    buffer = (byte[])ar.AsyncState;
                    Interlocked.Increment(ref writeStatus);//daten vorhanden
                    Interlocked.Increment(ref readStatus);//kein lesen mehr
                    goOn();

                };
            writeCb = (ar) =>
                {
                    output.EndWrite(ar);
                    Interlocked.Increment(ref writeStatus);//kein schreiben mehr
                    goOn();
                };
            goOn();
        }
28.01.2011 - 21:26 Uhr

Nun hab ich aber gelesen, dass wohl unter Windows diese BeginSend/Begin-Irgendwas Aufrufe wohl effizienter sein sollen, da Windows dies wohl iwie boostet.

Jap, nennt sich Completion Ports
Funktioniert wie folgt: Es gibt einige Threads und diese warten. Wenn ein Event kommt, dann schnappt sich der nächstbeste Thread dieses und arbeitet es ab. Hinterher wartet der Thread wieder. Die Anzahl der Threads lässt sich einstellen.

Habe auch gelesen, dass Windows intern aber immer einen Thread fuer jede Operation verwendet. Das hoert sich fuer wiederum vollkommen ineffektiv an.

Hö, wie is das gemeint? Einen neuen für jede Operation oder Einen für alle? Beides habe ich bereits beantwortet: nö

Was waere wenn ich 1000 Sockets habe und lese auf allen Sockets asynchron, sprich ich warte, bis da iwas tolles passiert und bediene dann jeweils die Sockets, die REquests schicken. Aber halt nur mit wenigen Threads.

Dann ist Begin... ganz gut. Allerdings wird für jeden Vorgang extra Speicher allokiert. Ich bin mir nicht sicher ob das Waithandle erst erstellt wird, wenn man es braucht oder sofort. Beides mindert jedoch die Performance im Vergleich zu wenn man in C++ direkt mit Completion Ports arbeitet. 1000 hört sich noch machbar ein. Vergiss aber nicht die Anzahl der Completionports hochzusetzen (Methode der Threadpool-Klasse).

Wenn nun aber Windows intern immer einen Thread benutzt, waere das ja praktisch das Selbe, wie fuer jeden Socket einen Thread zu benutzen.

Falsch.

Falls Windows intern auch nur eine bestimmte Anzahl an Threads benutzt udn alle restlichen asynchrone Anfragen einfach in eine Warteschlange stellt, kann es doch
passieren, dass wenn ich auf 1000 Socket asynchron lese, und bei den Sockets,
die grad in der Warteschlange sind, dann gelesen werden koennte, dies aber nicht
festgestellt werden kann, da quasi die WorkerThreads mit den ersten Sockets beschaeftigt sind, diese allerdings niemals vlt lesbar sind und damit das ganze System
blockiert.

Es wird nicht auf die Sockets nacheinander, sondern auf alle gleichzeitig gewartet. Ähnlich WaitHandle.WaitAny, nur ohne das Maximum 64.

28.01.2011 - 18:10 Uhr

Mit PropertyInfo / MethodInfo wird's nix, da ich den System.Type der Instanz nicht auswerten kann. Der ist nämlich immer null...

Das kann/darf nicht sein -> Bug im Framework? Den Code möchte ich sehen!

26.01.2011 - 22:08 Uhr

http

Fertiges Netzwerkanalyseprogramm (kann auch http mitlesen und speichern): Wireshark
Speziell zum http mitlesen und abspeichern: HTTPSaver (von mir)
Selbst programmieren: sharppcap

26.01.2011 - 21:51 Uhr

unter 330€ wirst du kaum etwas finden.

25.01.2011 - 17:53 Uhr

Komisch, ich bin mir 110% sicher, dass man mit dieser funktion auch auf geerbte Felder zugreifen kann! (zumindest in manchen situationen)

[EDIT] Woran ich gedacht habe waren keine wirklich privaten felder

25.01.2011 - 15:52 Uhr

aso, 8o 😄

25.01.2011 - 15:49 Uhr

Nur keine Sorge, noch ist das für uns keine Bedrohung. 😄

Hä, wie jetzt?

25.01.2011 - 15:29 Uhr

Argh!

Was für ein thread!

25.01.2011 - 15:22 Uhr

@Floste: Wenn es jetzt noch ein Ereigniss gibt, das ausgelöst wird, wenn eine neue Form erzeugt wird, muss ich mal zum Augenarzt. 😃 😃

Gibts nicht, lässt sich aber basteln, mit etwas reflection:

Gehen tut das ganz einfach:


class MyArrayList:ArrayList
{
    public MyArrayList(ICollection values):base(values)
    {
    }

    public override int Add(object obj)
    {

        EventFeuern((Form)obj);

        return base.Add(obj);
    }
}

void EventRegistrieren()
{
    MyArrayList newList=new MyArrayList(Application.OpenForms);
    typeof(FormCollection).InvokeMember("list", NonPublic|Instance|SetField, null, Application.OpenForms, new object[1]{newList});
}

Jetzt fehlt nurnoch EventFeuern zu implementieren! Ist nicht getestet, sollte aber klappen!

24.01.2011 - 23:21 Uhr

Hallo DieterM und willkommen im Forum.

Mir fallen sofort zwei kleine Stilblüten auf (nichts wirklich schlimmes):
1.) i ≤ MC.Count - 1 Warum nicht einfach < anstatt ≤ ?
2.) == false siehe [Tipp] Anfängerfehler == true / == false
warum nicht gleich foreach?
Wie dem auch sei, das sind keine wirklichen fehler.

Dein regex scheint auch zu funktionieren.

da sich das Programm leider immer aufhängt.

Wo genau? Hast du mal mit dem Debugger angehalten?
Wird etwas ausgegeben, bevor sich das Programm aufhängt?

Mir fallen sonst nur 2 performance-optimierungen ein: Hashset statt List und compliliertes Regex

Mist: Blue_Dragon war schneller

24.01.2011 - 22:56 Uhr

Helzlich willkommen im Forum,

Ich hoffe ihr könnt mir helfen.

Das schon, nur zählt das zu den Anfängerfragen und wurde schon hunderte male besprochen.

Siehe: [Hinweis] Wie poste ich richtig? Punkte 1.1 und 1.1.1
Suchfunktion benutzen und in die FAQ schauen: [FAQ] Kommunikation von 2 Forms
Das Thema wurde schon erschöpfend behandelt und da dieses Forum kein reines Anfängerforum sein soll, ist es nicht unbedingt nötig, das thema nocheinmal zu behandeln.

24.01.2011 - 19:08 Uhr

Vielleicht hilf folgende Eigenschaft der Application-Klasse

public static FormCollection OpenForms
{
    [UIPermission(SecurityAction.Demand, Window=UIPermissionWindow.AllWindows)]
    get
    {
        return OpenFormsInternal;
    }
}
 

23.01.2011 - 21:56 Uhr

😁 Das muss man erstmal hinbekommen, daran zu denken, dass es im Smaltalk-forum um die programmiersprache gehen würde. 8o Man könnte es meiner meinung nach auch "Off Topic" oder "Sonstiges" nennen.

22.01.2011 - 14:17 Uhr

den test zweimal hintereinander durchgeführt, ohne den prozess neuzustarten. Der erste durchgang dauert in c# grundsätzlich länger als die folgenden.

22.01.2011 - 13:55 Uhr

Auch pinvokes werden gejittet. Hast du den ersten aufruf mit dem zweiten verglichen?

20.01.2011 - 13:57 Uhr

Kriegt man auch die Anzahl raus?

Wie man sich leicht denken könnte, wenn man die methode einmal angeguckt hätte, geht dies ebenfalls mit GetInvocationList().

20.01.2011 - 13:53 Uhr
  1. Ob überhaupt und wenn wieviele Actions dort angehängt sind?

OnX!=null

  1. Über die Action Einträge auf die Objekte kommen? (Also im obigen Beispiel anhand von dem Eintrag in OnX auf das Objekt _Out1 schließen).

Das thema wurde schonmal besprochen und in den meißten fällen ist es schlichtweg unsinnig dies zu tun. Wenn du unbedingt willst: GetInvocationList() und Target