Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Portal
  • |
  • Mitglieder
Beiträge von -Hades-
Thema: Maus bewegung sehr langsam...
Am im Forum: GUI: Windows-Forms

Hi,

also deine Lösung klingt nicht schlecht floske.
Warum ein Timer jetzt etwas groß anderes als ein sleep sein soll weiß ich allerdings nicht, könntest du mir vielleicht kurz erklären warum das mein Problem löst?

Thema: Maus bewegung sehr langsam...
Am im Forum: GUI: Windows-Forms

Hallo,

schonmal danke für die Antwort aber das ist nicht ganz das was ich mir als eine Lösung auf mein Problem vorgestellt habe. Man merkt dann doch recht deutlich das die Maus sich nicht wirklich Pixel für Pixel bewegt.

Hat vielleicht noch jemand eine Lösung für das problem? Also ich denke ich bräuchte eine Möglichkeit Windows eine Message zu schicken, die besagt, dass die Maus von Punkt A zu Punkt B bewegt werden soll, und zwar über alle Zwischenstationen...

Gruß Hades

Thema: Maus bewegung sehr langsam...
Am im Forum: GUI: Windows-Forms

Hallo,

ich bin dabei eine kleine Anwendung oder eher ein kleines Spielchen zu schreiben. Zwischendurch muss die Anwendung die Maus willkürlich quer über den Screen fahren lassen.
Das ganze habe ich per Cursor.Position = ...; realisiert. Die Maus bewegt sich auch so wie ich es mir vorstelle, jedoch passiert das ganze extrem langsam. Man könnte dabei einschlafen... Ich habe das ganze vor kurzem bei einem Kollegen ausprobiert der 2 CPU's in seinem Rechner hat, da lief es bedeutend schneller. Ich habe, nebenbei bemerkt, ein Thread.sleep(1) zwischen dem Versetzen der Mausposition um einen Pixel eingebaut, noch weniger geht ja schließlich nicht. Nehme ich das sleep(1) raus passiert alles so schnell, dass man es gar nicht mehr sieht.
Der Cursor scheint eine heiß umkämpfte Resource zu sein und ich befürchte ich werde den Kampf gegen Windows mit den Mitteln die ich benutze immer verlieren.
Daher meine Frage ob jemand eine andere Methode kennt die das gewünschte liefert oder ob ich das ganze beschleunigen kann.

Gruß Hades

Thema: Thread bremst System aus.
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo,

ich hätte noch eine Frage, und zwar möchte ich ja das Polling verhindern. Ich habe mir überlegt das ich meine grafischen Threads nur dann starten muss wenn mein Zielfenster aktualisiert wurde. Gibt es eine Möglichkeit auf eine paint-message vom Betriebssystem zu warten und dann erst den Thread zu starten? Also ich habe mal mit dem spy++ geschaut und das Fenster liefert tatsächlich eine paint-meldung. Ich müsste jetzt eine Funktionalität haben, welche schläft und von außen geweckt wird sobald die paint-meldung kommt und somit das System nicht ausbremst.
Vielleicht hat da ja jemand eine Idee.

Gruß Hades

Thema: Zwei Listboxes parallel scrollen
Am im Forum: GUI: Windows-Forms

Hallo,

ich wollte mal kurz fragen ob jemand weiß wie man es erreichen kann, dass wenn man in einer Listbox scrollt, eine andere parallel mitgescrollt wird. Also konkret habe ich zwei Listboxes nebeneinander und ich möchte deren Inhalt gerne auf Gleicheit überprüfen. Um das komfortbler zu gestalten wäre es halt gut wenn beide immer die Elemente an derselben Position in der Listox anzeigen.
Vielleicht hat ja jemand auch mal dieses Problem gehabt und gelöst.

Gruß Hades

Thema: Thread bremst System aus.
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo Herbivore,

schonmal danke für deine Antwort. Dann habe ich das mit den Threads doch wohl noch nicht so ganz verstanden. Es stimmt, dass meine Threads an sich immer durchrattern aber ich dachte das das BS den Threads die zeitscheibe so oft entzieht das alles einigermaßen normal weitergehen kann. Dem ist ja anscheinend nicht so. Wie könnte ich denn meine Threads mal etwas ausbremsen. Einfach an allen Ecken und Enden sleeps einzubauen und damit meine Threads einfach nur latenter machen kann es doch auch nicht sein. Gibt es da sonst noch Möglichkeiten oder muss ich meinen ganzen Code noch einmal durchgehen und genau gucken wann welcher Thread schlafen kann und somit vermeiden das sie immer alle einfach laufen.
Wenn sich das ganze so verhält kann ich ja eigentlich nie auch nur einen Thread permanent arbeiten lassen...?
Mit der Synchronisation muss ich dann nochmal schauen, obwohl ich an sich sichergestellt habe das keine Methode mit falschen oder noch nicht ganz vollständigen Daten aus anderen Threads weiterarbeitet. Es ist wie gesagt etwas verwirrend im Moment.

Ich bin für jeden weiteren Hinweis dankbar.

Gruß Hades

Thema: Thread bremst System aus.
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo,

ich habe eine kleine Anwendung geschrieben und erzeuge innerhalb des Prozesses 3 Threads. Ein Thread updated eigentlich immer nur eine Form und aktualisiert Textboxen. Das aktualisieren wird durch einen Timer alle 1000ms ausgeführt. Der zweite Thread benutzt die GDI methode getpixel und überprüft für mich einen Bereich auf dem Screen um mich zu informieren ob eine bestimmte Aktion abgeschlossen ist. Ein dritter Thread führt hauptsächlich String methoden aus, also es werden Strings zusammengebaut und deren Inahlt wird durchsucht.
Das Problem was ich jetzt habe ist, dass mein gesamtes System total ausgebremst wird von den drei Threads und ich weiß nicht genau warum. Also wenn ich z.B. auf der Form arbeiten möchte oder sie einfach nur verziehen möchte, dann geht das ganze nur mit sehr viel Verzögerung. Außerdem liefern einige Methoden ab und zu völligen Quatsch zurück. Wenn ich sie einzeln aufrufe bei demselben Szenario liefern sie das gewünschte. Ich habe sowieso bemerkt, dass je mehr Threads ich starte und je latenter das System reagiert, desto mehr Fehler bekomme ich.

Vielleicht kann mir ja jemand ein paar Tipps geben woran so etwas liegen könnte, ich habe mir schon einiges zu Threads durchgelesen und z.B. sichergestellt das kritische Pfade durch ein lock abgesichert werden. Dennoch verstehe ich die hohe Systemauslastung und die sehr unverständlichen Fehler nicht.

Gruß Hades

Thema: [gelöst] Text Liniendicke / DrawString für s/w LCD mit geringer Auflösung
Am im Forum: Grafik und Sound

Hi,

also ich habs auch direkt mal ausprobiert und bei mir scheint alles ok zu sein auch ohne Graphics.Clear.

Ich benutze Vista Business 32 bit, allerdings habe ich das ganze Aero-Gedöns deaktiviert, vielleicht hängt es ja damit zusammen.

Gruß Hades

So siehts bei mir aus:

Thema: Cursor.Position ändert sich bei WM_LBUTTONDOWN??
Am im Forum: Grafik und Sound

Hmm ok aber wie hol ich mir die X- und Y-Koordinte aus dem lparam?

Und unterscheiden sich die Werte denn wirklich von Cursor.Position?

Bin für jede Hilfe dankbar.

Gruß Hades

Thema: Cursor.Position ändert sich bei WM_LBUTTONDOWN??
Am im Forum: Grafik und Sound

Hallo,

ich benutze einen MausHook um globale Mausklicks abzufangen und lese die Cursor.Position aus wenn sich die maus bewegt und wenn die linke Maustaste nach unten gedrückt wird. Nur komischerweise ändert sich beim Runterdrücken die Cursorposition um einen Pixel.
Ich möchte eine Art Bildschirmlupe machen.
Weiß jemand warum sich die Position ändert und wie ich das ganze umgehe? Ich muss die Lupe auch anzeigen wenn runtergedrückt wird, falls man die Maus gar nicht bewegt und direkt klickt um ein Bild aufzunehmen an der Position.
Hier ein wenig Code:


            if (nCode ≥ 0 && MouseMessages.WM_MOUSEMOVE == (MouseMessages)wParam)
            {
                activateMagnifyingGlass(Cursor.Position.X, Cursor.Position.Y);
            }

            if (nCode ≥ 0 &&  MouseMessages.WM_LBUTTONDOWN == (MouseMessages)wParam)
            {
               activateMagnifyingGlass(Cursor.Position.X, Cursor.Position.Y);
            }

Beim Runterdrücken wird immer die Position wohl so wie ichs beobachtet habe immer in die Richtung verschoben, in die man die Maus zuletzt bewegt hat...
Manchmal wird die Position aber auch nicht geändert.

Ich weiß mir da nicht wirklich zu helfen im Moment.

Gruß Hades

Thema: Konsole: Output umleiten, Input NICHT umleiten
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

So, also ich habe das ganze Problem gerade mit Benji noch lösen können.

Der Thread kann somit zu den Akten

Gruß Hades

Thema: Konsole: Output umleiten, Input NICHT umleiten
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hi Benji,

in der Tat habe ich das Problem, dass mein Prozess keinen String annimmt der ein Whitespace, also ein Blank enthält. Hmm das problem scheint ja dann doch häufiger aufzutreten...
Über die tastatureingabe oder auch per SendMessage klappt es allerdings tadelos, da wird jeder String einwandfrei angenommen und verarbeitet.

Ich hoffe jemand weiß da Rat...

Gruß Hades

Thema: Konsole: Output umleiten, Input NICHT umleiten
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo,

weiß jemand ob und wie es möglich ist es so einzurichten, dass ein aus meinem Projekt gestarteter Konsolenprozess den Input noch über tastatur annimmt obwohl ich den Output umleite?
Also ich habe es im Code so, dass shellexecute auf flase steht, redirectstandardoutput auf true und redirectstandardinput auf false.
Nur leider verhält es sich so, dass ich trotzdem keine Eingaben mehr über die tastatur tätigen kann. Selbst mit einer SendMessage-Funktion aus der User32 nimmt der prozess nichts an.

Gruß Hades

Thema: Text aus Konsole Capturen
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

So, danke nochmal für eure schnellen Antworten, mittlerweile klappt alles bestens.

Gruß Hades

Thema: Text aus Konsole Capturen
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hi, also ich habe folgendes probiert:


            my_process.Start();
            my_process.StartInfo.RedirectStandardOutput = true;
            System.IO.StreamReader my_reader = my_process.StandardOutput;
            String my_inhalt = my_reader.ReadToEnd();

Der Prozess startet ordnungsgemäß aber ich bekomme eine Exception die besagt: StandardOut wurde nicht umgeleitet, oder der Prozess wurde noch nicht gestartet.

Der Prozess ist allerdings nicht null wenn ich beim Debuggen nachsehe, müsste also doch gestartet sein?

Hast du einen Rat Herbivore?

Gruß Hades

Thema: Text aus Konsole Capturen
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hi,
Ich suche schon seit geraumer Zeit ne Möglichkeit Text aus nem Konsolenfenster zu bekommen, um ihn als String zu speichern und damit dann weiter zu arbeiten.
Also die ganz normale Konsole, die man eben mit cmd aufrufen kann.
Ich hoffe, dass mir jemand von euch weiterhelfen kann.
Gruß, Hades.

Thema: GDI32.SetPixel() unter Vista
Am im Forum: Grafik und Sound

Na ja, was heißt sträuben, ich hab schon angefangen es mit Direct3D umzusetzen aber das mindert nicht mein Interesse die Ursache herauszufinden und wenn möglich das Problem zu lösen. Manchmal will man halt einfach etwas wissen

Thema: GDI32.SetPixel() unter Vista
Am im Forum: Grafik und Sound

Es ist absolut reproduzierbar und die Daten sind 100% korrekt. Ich habe die Daten auf einen Rechner mit Windows XP kopiert und dort wird das komplette Bild 100% korrekt gezeichnet, es ist also ziemlich sicher ein Vista-Problem. Ich habe es auch noch auf einem Laptop mit Vista getestet, da kommt exakt dasselbe Problem.

Hat keiner eine Idee?

Thema: GDI32.SetPixel() unter Vista
Am im Forum: Grafik und Sound

Na ja, das könnte ich vielleicht auch und ich könnte es natürlich auch mit Direct3D machen um es zu beschleunigen oder dergleichen aber ich habe mich nunmal für SetPixel entschieden und das sollte ja theoretisch auch problemlos funktionieren.
Desweiteren liegt es nicht in meiner Absicht bei jedem Problem einfach eine Alternative vorzuziehen, da es doch auch ganz schön wäre ein Problem zu verstehen und es zu lösen.

Zum eigentlichen problem: Ich habe das problem etwas "eingegrenzt". Ich habe ein int[][] mit der Größe meiner Desktopauflösung (1280x1024) serialisiert und habe versucht das mittels SetPixel auf den Desktop zeichnen zu lassen. Das Resultat ist, dass jedesmal 2 große "Löcher" entstehen, und zwar genau zwischen den Pixeln 256 - 512 und 768 - 1024. Die "Löcher" oder besser gesagt die nicht gezeichneten Streifen gehen von oben bis unten, sind also durchgehend.

Ich hoffe dieses seltsame Verhalten kann mir jemand erklären und/oder hat einen Lösungsvorschlag für mich (außer: ersetze SetPixel durch xxx).

Gruß -Hades-

Thema: GDI32.SetPixel() unter Vista
Am im Forum: Grafik und Sound

Hat denn wirklich niemand eine Idee?

Thema: GDI32.SetPixel() unter Vista
Am im Forum: Grafik und Sound

Hallo,

ich versuche mittels folgender Funktion ein zuvor aufgenommenes Bild (mittels gdi32.getpixel) auf den Desktop zu zeichnen. Das zuvr aufgenommene Bild speicher ich als int[][]. Das Problem an der ganzen Sache ist, dass das Bild manchmal komplett und korrekt gezeichnet wird, manchmal stimmt wohl die Höhe aber es ist nur halb so breit (also die Hälfte ist einfach abgeschnitten und wird nicht gezeichnet) und manchmal wird einfach gar nichts gezeichnet. Die Methode wird jedesmal komplett durchlaufen, das habe ich mittels Haltepunkte getestet.

Hier die Funktion:


        public void putFieldToScreen(int put_left, int put_top)
        {
            if (hDC == (System.IntPtr)0)
            {
                hDC = User32.GetWindowDC(User32.GetDesktopWindow());
            }
            for (int j = 0; j < height; j++)
            {
                for (int i = 0; i < width; i++)
                {
                    GDI32.SetPixel(hDC, put_left + i, put_top + j, (uint)pixeldata[j][i]);
                }
            }
            return;
        }

Weiß jemand ob das an Vista liegt oder doch am Code? Weiß mir langsam nicht mehr zu helfen.

Edit: Das zuvor aufgenommene Bild habe ich serialisiert und ich deserialisiere es beim Start wieder, an den Daten des Bildes kann sich also nichts ändern.

Gruß -Hades-

Thema: Beim Starten Fenster verstecken, aber später anzeigen?
Am im Forum: GUI: Windows-Forms

Ich denke ich werde jetzt mit einem Kompromiss leben müssen.
Habe jetzt folgendes gemacht, mit Hilf der showwindow Funktion der user32 :


while (FindWindow("ConsoleWindowClass", null) == IntPtr.Zero)
{
       Thread.Sleep(10);
}
ShowWindow(meinprocess.MainWindowHandle, (uint)WindowShowStyle.Hide);

Das Fenster blitzt ganz kurz auf und ist dann unsichtbar bis ich es wiederhole.
Ich habe mit den Millisekunden etwas getestet. Bei 1 Millisekunde ist es schon öfters vorgekommen das das Fenster sichtbar blieb, bei 5 war es sehr selten und bei 10 ist es keinmal (aus 50 Testläufen) sichtbar geblieben.

Sollte dennoch jemand eine saubere Lösung für mich haben immer her damit

Gruß -Hades-

Thema: Beim Starten Fenster verstecken, aber später anzeigen?
Am im Forum: GUI: Windows-Forms

Hi Th69,

erstmal danke für die Antwort. Habs gerade getestet. Leider ist WaitForInputIdle nur für Programme zulässig die eine grafische Oberfläche haben. Das Programm was ich da starte hat leider nur eine Console...
Da bekomme ich dann eine Exception.

Thema: Beim Starten Fenster verstecken, aber später anzeigen?
Am im Forum: GUI: Windows-Forms

Also ich nehme an es hat wirklich niemand eine Lösung für das Problem...?

Thema: Beim Starten Fenster verstecken, aber später anzeigen?
Am im Forum: GUI: Windows-Forms

Ja über das MainWindowHandle Property vom Prozess...

Thema: Beim Starten Fenster verstecken, aber später anzeigen?
Am im Forum: GUI: Windows-Forms

Ach Quatsch, moment mal, jetzt bin ich zu früh in Euphorie verfallen
Genau das abe ich ja schon getan. Mithilfe von pinvoke habe ich ja immer das MainwindowHandle versteckt und wieder angezeigt. Das löst leider nicht das Problem das ich nicht genau abfangen kann wann der Prozess soweit ist.

Thema: Beim Starten Fenster verstecken, aber später anzeigen?
Am im Forum: GUI: Windows-Forms

Aha, dicken Dank im voraus, werd ich direkt mal testen!

Ich meld mich was dabei rauskommt.

Thema: Beim Starten Fenster verstecken, aber später anzeigen?
Am im Forum: GUI: Windows-Forms

Also zunächst habe ich es wie gesagt mit den System.Diagnostics.Process-Mitteln versucht, also prozess.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;

Das klappt nur kann ichs nicht wieder erscheinen lassen (auch nicht mit der Windows API).

Und als zweites halt mit der ShowWindow aus der User32.dll

Ich glaube ich weiß nicht genau worauf du hinaus willst.


@GMLOD: Der Artikel hat mir leider nicht weitergeholfen, da es sich um ein externes Programm handelt welches ich verstecken möchte.

Thema: Beim Starten Fenster verstecken, aber später anzeigen?
Am im Forum: GUI: Windows-Forms

[DllImport("user32.dll")]
static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);

Die habe ich benutzt.

Thema: Beim Starten Fenster verstecken, aber später anzeigen?
Am im Forum: GUI: Windows-Forms

Hmm ja habe direkt bei pinvoke geguckt. Wie gesagt ist da die Lösung es mit der showwindow Funktion der User32.dll zu machen. Das funktioniert ja auch, ich kann das Fenster auf Befehl verstecken und wieder sichtbar machen usw., nur muss ich dann wenn der Prozess zum ersten mal gestartet wird per Thred.sleep lange genug warten bis der Prozess soweit ist, ansonsten läuft der Befehl ins leere und der Befehl zum z.B. verstecken des Prozesses schlägt fehl. Und da es sich so verhält, dass manchmal 10 Millisekunden ausreichen und der PC manchmal noch soviel im Hintergrund macht das 200 Millisekunden nicht ausreichen, ist es schon eine eher naive Lösung.

Ich könnte naürlich einfach 5 Sekunden jedesmal warten aber dann habe ich ja das, was ich erreichen wollte verloren. Ich möchte ja das das Fenster von Anfang an unsichtbar ist. So wäre es dann immer für eine unbestimmte Zeitspanne sichtbar und wird dann unsichtbar.