Laden...
V
ViperNeo myCSharp.de - Member
Professional IT Consultant & Software Architect Darmstadt Dabei seit 22.02.2008 352 Beiträge
Benutzerbeschreibung

Forenbeiträge von ViperNeo Ingesamt 352 Beiträge

06.04.2009 - 11:48 Uhr

Niemand eine IDee dazu? Wäre schon glücklich wenn jemand wüsste wie ich das Browsercontrol grafisch refreshe? ALso das malen auf der Form neu starte.

Wenn ich den Server erst beim Event Navigating starte, ist das Problem nicht mehr so groß. Aber immer noch hängt die Anzeige im Browser leicht hinterher.

Danke für die Hilfen.

Grüße
ViperNEo

31.03.2009 - 14:06 Uhr

im prinzip nimmst du dir die klassen. startest auf deinen clients einen StreamingServer und rufst auf deinem Server mittels StreamingClient einfach den entsprechenden Server auf. Der WebServer frisst keine Performance oder dergleichen, sondern liefert dir einen Screenshot zurück. Mehr macht er nicht. Wenn deine Serveranwendung keine Anfrage nach einem Bild schreit, machen deine Clientseitigen StreamingServer auch nichts.

Ansonsten kannst du nur noch per MemoryStream dein Bild auf die Leitung legen, aber da ist meine vorgeschlagene Lösung um einiges eleganter.

Grüße
ViperNeo

31.03.2009 - 09:58 Uhr

Das Thema habe ich neu aufgerollt.

Hier der Link
Bilderstreaming per Webserver / Webservice

31.03.2009 - 09:57 Uhr

Hier kannst du meine Streaming-Lösung implementieren:
Bilderstreaming per Webserver / Webservice

Einfach noch um ein Intervall erweitern, damit die Anzeige nur alle 5 Sekunden refreshed.

Grüße ViperNeo

31.03.2009 - 09:54 Uhr

Hallo leute,

habe nun mein lang geplagtes Problem mit d em Streamen über das Netzwerk gelöst.

Und zwar habe ich mir auf der Serverseite einen Webserver gestrickt, der mit meiner Anwendung läuft und auf Requests reagiert.

Die Clientanwendung auf einem entfernten Rechner setzt HTTPRequests ab und bekommt als Response einen Screenshot eines Browsercontrols zurück und zeigt diesen in einer PictureBox an. Das macht der Client ununterbrochen um immer ein aktuelles und nahezu synchrones Bild zu bekommen.

Soweit so gut. Einziges problem das ich habe, ist das auf Serverseite der WebBrowser nun zicken macht bei der Anzeige von Internetseiten. Ich habe das Gefühl das der Extra Thread zuviel Performance schluckt und daher die Grafische Anzeige des Webbrowsers hinterherhängt. Auf dem Client wird alles korrekt dargestellt, nur im Webbrowser Objekt auf dem Server nicht. Da fehlen immer Grafiken, erst wenn man mit der Mouse darüber fährt erscheinen diese. Also hängt die grafische Darstellung.

Habt ihr eine Idee?

Der StreamingServer-Code:

public class StreamingServer
    {
        private HttpListener listener;
        private Thread serverThread;

        private bool pStreamingSupport;

        public bool StreamingSupport
        {
            get { return pStreamingSupport; }
        }
	
        public StreamingServer(string ServerPort)
        {
            if (!HttpListener.IsSupported)
            {
                this.pStreamingSupport = false;
            }
            else
            {
                this.pStreamingSupport = true;
                listener = new HttpListener();
                listener.Prefixes.Add("http://*:" + ServerPort + "/");
            }
        }

        public void StartStreamingServer(IntPtr BrowserHandle, Size BrowserSize)
        {
            if (this.pStreamingSupport)
            {
                listener.Start();
                serverThread = new Thread(new WebServer(listener, BrowserHandle, BrowserSize.Width, BrowserSize.Height).startWebserver);
                serverThread.Start();
            }
        }

        public void StopStreamingServer()
        {
            if (this.pStreamingSupport)
            {
                listener.Stop();
                serverThread.Abort();
            }
        }


        class WebServer
        {
            [DllImport("user32.dll")]
            private static extern bool PrintWindow(IntPtr hwnd, IntPtr hdcBlt, uint nFlags);

            private HttpListener listener;
            private IntPtr browserHandle;
            private int width;
            private int height;

            public WebServer(HttpListener ctx, IntPtr hand, int width, int height)
            {
                this.listener = ctx;
                this.browserHandle = hand;
                this.width = width;
                this.height = height;
            }

            public void startWebserver()
            {
                while (true)
                {
                    try
                    {
                        HttpListenerContext ctx = listener.GetContext();
                        Thread request = new Thread(new ParameterizedThreadStart(sendRequest));
                        request.Start(ctx);
                    }
                    catch
                    { }
                }
            }

            private void sendRequest(object context)
            {
                HttpListenerContext con = (HttpListenerContext)context;

                // Get the image width and height 
                int screenWidth = width;
                int screenHeight = height;

                // Set hwnd to the WebBrowser 
                IntPtr myIntptr = this.browserHandle;
                int hwndInt = myIntptr.ToInt32();
                IntPtr hwnd = myIntptr;

                // Set hdc to the bitmap 
                Bitmap bm = new Bitmap(screenWidth, screenHeight, System.Drawing.Imaging.PixelFormat.Format16bppRgb555);
                Graphics g = Graphics.FromImage(bm);
                IntPtr hdc = g.GetHdc();

                // Snapshot the WebBrowser 
                bool result = PrintWindow(hwnd, hdc, 0);
                g.ReleaseHdc(hdc);
                g.Flush();

                // Construct a response.
                MemoryStream stream = new MemoryStream();
                bm.Save(stream, System.Drawing.Imaging.ImageFormat.Jpeg);
                byte[] buffer = stream.ToArray();

                // Obtain a response object.
                HttpListenerResponse response = con.Response;
                response.ContentType = "image/jpeg";
                response.ContentLength64 = buffer.Length;
                try
                {
                    // Get a response stream and write the response to it.
                    System.IO.Stream output = response.OutputStream;
                    output.Write(buffer, 0, buffer.Length);

                    // close the output stream.
                    output.Close();
                }
                catch { }
            }
        }
    }

Der Streaming Client Code:

    class StreamingClient
    {
        private Thread StreamThread;
        private HttpWebRequest httpWebRequest;
        private HttpWebResponse httpWebReponse;
        private Stream stream;
        private Uri uri;

        // events
        public event EventHandler<StreamingEventArgs> UpdateRemoteContentEvent;
        
        private void UpdateRemoteContent(Image payload)
        {
            // raise event
            this.UpdateRemoteContentEvent(this, new StreamingEventArgs(payload));
        }


        public StreamingClient(string ServerAddress, string ServerPort)
        {
            uri = new Uri(ServerAddress + ":" + ServerPort);
        }

        public void StartStreaming()
        {
            StreamThread = new Thread(new ThreadStart(CaptureStream));
            StreamThread.Start();
        }

        public void StopStreaming()
        {
            StreamThread.Abort();
        }

        private void CaptureStream()
        {
            while (StreamThread.IsAlive)
            {
                try
                {
                    httpWebRequest = (HttpWebRequest)HttpWebRequest.Create(uri);
                    httpWebReponse = (HttpWebResponse)httpWebRequest.GetResponse();
                    stream = httpWebReponse.GetResponseStream();
                    this.UpdateRemoteContent(Image.FromStream(stream));
                }
                catch
                { }
            }
        }
    }

Grüße
ViperNeo

25.03.2009 - 12:23 Uhr

tut doch im prinzip gar nicht zur sache, weil ich es ja übers netzwerk streamen will. das heißt da habe ihc ja nie senden und empfangen in der gleichen anwendung.

25.03.2009 - 09:43 Uhr

fire&forget hört sich gut an.

Wie schicke ich die genau? Einfach in ein Byte Array wandeln und auf die Leitung schmeißen? Weil wie erkennt denn mein Empfänger dann am besten was da ankommt?

Habe jetzt erstmal die Sache in einen Thread ausgelagert:

        private void CreateSnapshot(object browser)
        {
            while (snapshot.IsAlive)
            {
                WebBrowser targetBrowser = this.webBrowser1;

                // Get the image width and height 
                int screenWidth = targetBrowser.Width;
                int screenHeight = targetBrowser.Height;

                // Create the output 
                // HWND hwnd, Window to copy 
                // HDC hdcBlt, HDC to print into 
                // UINT nFlags, Optional flags 

                // Set hwnd to the WebBrowser 
                IntPtr myIntptr = (IntPtr)browser;
                int hwndInt = myIntptr.ToInt32();
                IntPtr hwnd = myIntptr;

                // Set hdc to the bitmap 
                Bitmap bm = new Bitmap(screenWidth, screenHeight, System.Drawing.Imaging.PixelFormat.Format16bppRgb555);
                Graphics g = Graphics.FromImage(bm);
                IntPtr hdc = g.GetHdc();

                // Snapshot the WebBrowser 
                bool result = PrintWindow(hwnd, hdc, 0);
                g.ReleaseHdc(hdc);
                g.Flush();

                // Save the bitmap, if successful 
                if (result == true)
                {
                    pictureBox1.Image = bm;
                }

                Thread.Sleep(1);
            }
        }

Leider hängt jetzt mein Control mit dem ich arbeite total. Woran liegt das? Ist das vielleicht viel zu viel Last? Soll ich Thread.Sleep erhöhen oder woran liegt das?

Und bitte meine Frage von oben nicht vergessen 😃

Danke schonmal!

Grüße
ViperNeo

24.03.2009 - 16:01 Uhr

Hallo Leute,

habe folgendes umgesetzt:

            WebBrowser targetBrowser = webBrowser1;

            // Get the image width and height 
            int screenWidth = targetBrowser.Width;
            int screenHeight = targetBrowser.Height;

            // Create the output 
            // HWND hwnd, Window to copy 
            // HDC hdcBlt, HDC to print into 
            // UINT nFlags, Optional flags 

            // Set hwnd to the WebBrowser 
            IntPtr myIntptr = targetBrowser.Handle;
            int hwndInt = myIntptr.ToInt32();
            IntPtr hwnd = myIntptr;

            // Set hdc to the bitmap 
            Bitmap bm = new Bitmap(screenWidth, screenHeight, System.Drawing.Imaging.PixelFormat.Format16bppRgb555);
            Graphics g = Graphics.FromImage(bm);
            IntPtr hdc = g.GetHdc();

            // Snapshot the WebBrowser 
            bool result = PrintWindow(hwnd, hdc, 0);
            g.ReleaseHdc(hdc);
            g.Flush();

            // Save the bitmap, if successful 
            if (result == true)
            {
                pictureBox1.Image = bm;
            }

Das ganze macht mir Screenshots vom Browser Objekt und schickt sie in eine pictureBox. Das ganze in einen Timer rein mit Tick 10 und man ist fast synchron.

Nun möchte ihc das aber nicht in eine PictureBox sondern in einen Netzwerkstream reinsetzen. Das heißt ich öffne einen Stream, streame das BIld und in einer anderen Anwendung wird gehorcht und die Picture Box mit dem Stream befüllt.

Wie mache ich so etwas?

Danke schonmal für die Infos!

Grüße ViperNeo

24.03.2009 - 12:09 Uhr

Hallo,

ich habe ein SoundCotnrol Modul geschrieben das den Sound meiner Anwendung steuert. Also die Lautstärke.

Leider funktioniert diese Methode nur auf Vista. Nun habe ich noch eine weitere Methode entdeckt, die unter XP funktioniert, jedoch unter Vista nicht wirklich.

Problem ist, das ich jetzt am liebsten beides implementieren würde und eben eine Unterschreidung mache welches OS gerade unter meiner Anwendung liegt.

Wie treffe ich eine solche Entscheidung?

Grüße ViperNeo

24.03.2009 - 09:10 Uhr

Fangen wir mal anders an...

Wie würdet ihr auf zwei verschiedenen Rechnern ein Dokument exakt gleich anzeigen. Mit Scrollbar etc.

Das heißt was ich auf dem einen PC mache sieht der andere auf seinem PC.

Und jetzt bitte kein Hinweis auf VNC oder dergleichen. Das soll mit einer Netzwerkanwendung unter .NET realisiert werden.

was sagt ihr dazu?

Grüße
ViperNeo

24.03.2009 - 09:08 Uhr

Für die, die es interessiert, hier die Lösung des Problems:

        private void RequestHostInformation(object IP)
        {
            try
            {
                UpdateListBox listbox = new UpdateListBox(this.updateUIProc);

                IPAddress addr = IPAddress.Parse((string)IP);

                IPHostEntry IpEntry = Dns.GetHostByAddress((string)IP);

                byte[] mac = new byte[6];
                int length = mac.Length;
                SendARP((int)addr.Address, 0, mac, ref length);
                string macAddress = BitConverter.ToString(mac, 0, length);

                if (macAddress != "")
                {
                    object[] param = new object[3] { macAddress, IP, IpEntry.HostName.ToString() };
                    this.Invoke(listbox, param);
                }
            }
            catch
            { }
        }

Diese Methode starte ich in einem eigenen Thread, damit meine Form nicht einfriert, am Ende wenn alles geklappt hat wird per Invoke das ganze in eine Listbox geschrieben.

Der Methode muss eine IP übergeben werden. Das heißt man durchsucht einfach die IP Range des gewünschten Netzwerkes und die Rechner die an sind, melden sich per MAC Adresse zurück.

Grüße
ViperNeo

23.03.2009 - 14:41 Uhr

Hallo!

ich möchte per .NET eineAuflistung aller im Netzwerk befindlichen Computer erstellen. Diese sind alle an und haben statische IPs.

Wie kann ich das Netzwerk sinnvoll durchsuchen mit .NET?

Ich benötige IP, Rechnername und MAC-Adresse.

Ist das möglich mit .NET?

Grüße
ViperNeo

23.03.2009 - 10:40 Uhr

habe gerade per längerer suche im forum eine lösung gefunden!

z-index und Dokumentengliederungsfenster^^

danke trotzdem!

23.03.2009 - 10:31 Uhr

Hallo Leute,

kennt jemand eine Lösung für das Dock Problem vom Studio?

Das heißt wenn ich mehrere Controls per TOP andocke haben diese eine Reihenfolge. Nämlich die in der ich die Controls angedockt habe. Möchte ich diese Reihenfolge nun verändern, funktioniert das nicht mehr. Auch wenn ich alle Controls abdocke und wiederi n neue Reihenfolge andocke, ist die Reihenfolge genauso wie vorher was aber gar nicht sein kann....

Grüße
ViperNeo

22.03.2009 - 11:45 Uhr

Keine eine Idee?

Ich weiß das es mit folgendem Snippet funktioniert:

<script language="javascript">

function captureEvents(){
return false;
}
document.onselectstart = captureEvents;
document.onselect = captureEvents;
document.ondblclick = captureEvents;
document.onmousedown = captureEvents;

</script>

Aber wie bekomme ich das in mein WebBrowser Control?

Grüße ViperNeo

20.03.2009 - 17:27 Uhr

das beantwortet doch nicht warum ich einen bluescreen bekomme...oder doch?

20.03.2009 - 11:35 Uhr

Hallo Leute,

ihr kennt sicherlich alle die Markieren Funktion in euren Browsern. Wenn man mit der Mouse zum Beispiel Texte markiert oder Bilder.

Ich nutze in meiner Anwendung die WebBrowser Komponente und möchte genau dieses Markieren deaktivieren.

Wisst ihr wie man das machen kann?

Grüße
ViperNeo

20.03.2009 - 11:02 Uhr

okay, aber wie wäre sowas grundsätzlich möglich? um was handelt es sich hier genau bei dieser remoting class?

20.03.2009 - 10:27 Uhr

hallo,

irgendwie klingt das alles hier sehr beeindruckend, leider verstehe ich den sinn nicht so ganz und was man damit für vorteile hat und überhaupt allgemein machen kann.

ich habe zum beispiel eine anwendung die auf 5 verschiedenen rechnern läuft. wichtig wäre ein usercontrol auf der form das immer das gleiche anzeigen soll. dazu muss das control mit den anderen entfernten instanzen kommunizieren. wäre sowas hiermit möglich? auch zum beispiel genaue scrollbarpositionen etc zu streamen?

bitte klärt mich mal schnell auf 😃 finde das sehr interessant und das löst vielleicht meine vielen probleme zurzeit. danke schonmal!

20.03.2009 - 09:41 Uhr

Ich versuche das PowerPoint Präsentationsfenster in das Panel zu zwingen.

19.03.2009 - 13:41 Uhr

warum kannst du die alte instanz dann nicht killen vorher?

//edit: du kannst beim wiederaufruf deiner anwendung auch den mutex prüfen, falls anwendung schon läuft, alte instanz killen und neue starten.

19.03.2009 - 13:23 Uhr

Warum kannst du durch Klicken des Buttons nicht die Parameter an die große Software zurückgeben und dort weiterverarbeiten? Oder du sparst dir den weg über Parameter und machst eine Config die du beschreibst.

Du kannst deine Anwendung auch mit anderem Mutex trotzdem erneut starten lassen. Zum Beispiel über eine ID. So verhinderst du Mehrfachstarts und gleichzeitig kannst du aber zwei Instanzen für dich offen behalten.

Ich muss selbst jetzt mal nachlesen ob alles genau stimmt, aber wenn ich mich recht erinnere müsste das funktionieren.

19.03.2009 - 13:17 Uhr

Hallo,

über dieses Thema habe ich schon viel gehört, verstehe es aber aktuell noch nicht 100%ig.

Und zwar habe ich mir ein eigenes UserControl geschrieben. Dieses läuft auf einem eigenen PC. Der Inhalt des Controls soll nun auf einem Beamer angezeigt werden. Der Beamer läuft aber auf einem anderen Rechner. Die gleiche Anwendung über CloneScreen auf dem Beamer anzuzeigen geht nicht, weil noch Steuerungen und Menüs angezeigt werden, die auf dem Beamer ausgeblendet werden sollten.

Das bedeutet im Klartext, dass ich beide Anwendungen steuern muss.

So habe ihc es aktuell auch gelöst. Gleiche Anwendung läuft auf beiden Rechnern nur mit anderen Parametern um Controls am Beamer Rechenr auszuschalten. URLs und Bilder übergebe ich per Netzwerk an den Beamer PC und dieser zeigt diese an.

Jetzt kommt aber das Problem das ich zurzeit habe:

Ist in einer WebSite ein Scrollbalken enthalten, funktioniert dieser auf dem Beamer logischerweise nicht. Auch Flash Animationen, somit Flash WebSites etc. funktionieren nicht. Diese Zustände zu übertragen habe ihc noch nicht herausgefunden wie das gehen soll.

Nun die Frage:
Ist es möglich die Events im Beamer PC auch anzutriggern, oder ist es ratsamer das Control einfach irgendwie per Remote zu streamen. Letzteres wüsste ich gerne wie das dann aber geht?

Habt ihr Lösungsideen?

Danke!

Grüße
ViperNeo

19.03.2009 - 13:10 Uhr

Hallo Leute,

folgendes habe ich vor:

Ich möchte über mein Programm die Systemmasterlautstärke steuern. Allerdings möchte ich nicht den lokalen Sound, sondern den Sound eines anderen Rechners im Netzwerk steuern.

Wie mache ich das am sinnvollsten?

MfG
ViperNeo

13.03.2009 - 14:43 Uhr

also ich habe es geschafft ein fremdes fensterhandle in meine anwendung einzubetten...

allerdings habe ihc nun ein problem. meine anwendung friert ein, danach das ganze os. woran kann das liegen?

13.03.2009 - 14:23 Uhr

Hallo,

wie adaptiere ich ein Handle und sperre es in meine Anwendung zum Beispiel in ein Panel?

Habe das Handle eines Fensters einer anderen Windows Anwendung. Den Prozess dieser Anwendung habe ich selbst gestartet.

Wie kann ich nun anhand des Handles das fremde Fenster in meine Anwendung einbetten?

Grüße ViperNeo

13.03.2009 - 13:57 Uhr

Ich würde den SAP .NET Connector benutzen. Dieser kommt von SAP und ist sehr hilfreich für die Kommunikation.

13.03.2009 - 13:46 Uhr

so habe ich es gelöst.

eigenes usercontrol mit eingebettetem webbrowser. ppt datei im browser laden und das user control auf eine form. da ein direkter screenshot des browserfensters nicht funktioniert mache ich nun den umweg über das usercontrol. funktioniert problemlos und löst mein problem.

13.03.2009 - 12:53 Uhr

Office.Interop kenne ich. Ich weiß das ich hier auch eine PowerPoint Instanz öffnen kann, ich weiß das ich dort Dateien öffnen und Präsentationen starten kann. Wenn ich das Handle aus Office.interop benutze habe ich aber nur das Hauptfenster von PowerPoint, niemals das Präsentationsfenster. Und einbetten in meine Anwendung konnte ich es bisher auch nciht.

Warum ich das machen möchte:
Ich habe in meiner Anwendung einen Rahmen um ein Control. Dieses Control ist für die Anzeige von verschiedenen Dingen konzipiert (Video, Bilder, HTML). Die Software läuft auf einem Rechner und streamt per Netzwerk die Bilder auf einen weiteren PC, wo ebenfalls diese Software läuft, jedoch dei Daten erhält und auf einem Beamer anzeigt. Da das Design der Software wichtig ist und ich keine einfache Vollbildanzeige der Präsentation wünsche, brauche ihc einen Workaround mit dem ihc das ganze in meine Anwendung einbette.

Wenn es so inperformant und hässlich ist, dann schlage mir doch bitte eine andere Lösung vor.

Danke trotzdem!

13.03.2009 - 12:39 Uhr

So hallo Leute,

folgendes möchte ich umsetzen:

  1. PowerPoint über C# versteckt starten
  2. Präsentation beginnen und hinter meine Anwendung schieben
  3. Fensterhandle der Präsentation herausfinden
  4. Screenshot des Präsentationsfensters

Am allerliebsten wäre es mir ich könnte die PPT Datei in meiner Anwendung über ein Control einbetten. Leider gibt es hierfür aber nur den dsoFramer der nicht wirklich funktioniert...

Kann mir jemand sagen wie ich das Fensterhandle bestimmen kann?
Wenn ich das Handle der Präsentation hätte könnte ich ja sicherlich einfach das Bild adaptieren und in ein Picture Control einfügen in meiner Anwendung, wenn PowerPoint in der Zeit vesteckt ist. Dann hätte ihc einen Workaround... Geht das, wenn ja wisst ihr wie und ist das überhaupt sinnvoll?

Grüße ViperNeo

13.03.2009 - 09:23 Uhr

Hallo Leute,

ich habe mal eine Frage zum Thema Screenshots mit .NET

Ich habe aktuell eine Klasse geschrieben, die mir Screenshots vom gesamten Bildschirm oder vom Programmfenster zurückgibt.

Nun möchte ich versuchen den Screenshot nur auf ein Control in meiner Anwendung zu beziehen. Welche Möglichkeiten habe ich dafür?

Habe schon vieles versucht, auch das Bild danach zu beschneiden nach dem Fenster Screenshot, aber das sind keine zufriedenstellenden Lösungen.

Gibt es in der user32 eine Funktion mit der ich Controls finden kann oder so? Haben COntrols überhaupt ein Handle?

Gibt es schicke Klassen für Screenshots die so etwas vllt schon können?

Danke!

Grüße ViperNeo

23.02.2009 - 17:47 Uhr

Mist... Leider scheint das mit dem Präsentationsmodus nicht hinzuhauen mit dem DsoFramer.

Gibt es noch andere Möglichkeiten oder fällt jemandem noch etwas ein?

Brauche schnelle Informationen!! Vielen Dank schon mal!

Grüße ViperNeo

23.02.2009 - 14:58 Uhr

das ist super genial! weißt du zufällig noch wie man dann automatisch die präsentation startet oder ich einfach den F5 KeyEvent an das Control übergebe?

23.02.2009 - 14:11 Uhr

gibt es denn keine activex controls oder irgendwelche com objekte die man in die anwendung einbinden kann?

per microsoft.office.core hab ich es geschafft eine präsentation direkt zu starten, jedoch liegt dann powerpoint direkt hintendran und ich will auch keine vollbildschirmpräsentation sondern lediglich in einem teil meiner anwendung.

grüße viperneo

22.02.2009 - 15:29 Uhr

okay, befassen wir uns nur mit dem abspielen einer ppt datei in c#.

kann mir jemand hierzu etwas sagen?

danke.

19.02.2009 - 19:05 Uhr

Hallo Leute,

kurze Frage.... HOffentlihc kann jemand helfen.

Und zwar folgende Anforderung. Ich möchte schlicht und einfach in meiner C# Anwendung eine PowerPoint Präsentation abspielen lassen.

Erste Frage wie mach ich das am besten?

Ich habe schon etwas hinbekommen, aber leider gibt es eine weitere Anforderung. Und zwar muss die Anzeige auf einen Beamer gestreamt werden. Das Streaming steht, jedoch kann die PowerPoint nicht gestreamt werden, weil diese im Grafikspeicher abgelegt wird.

Wie bekomme ich das am sinnvollsten hin das ich 1. eine PPT in meiner Anwendung anzeigen und durchklicken kann und 2. das ganze noch an einen Server sinnvoll streame.

05.02.2009 - 11:32 Uhr

perfekt! vielen dank!

05.02.2009 - 05:11 Uhr

Das TabControl hat aber nicht das gewünshte Reiterdesign + Andockfunktionen etc. wie im Studio... Oder irre ich mich da?

Danke für den Link werde ich mir ansehen! 😃

//EDIT: Ich arbeite übrigens mit dem aktuellsten Framework (3.5) und dem Studio 2008. Gibt es da keine eingebettete Lösung für? Weiß nich warum aber finde die Lösung aus dem Link nicht so schick.

05.02.2009 - 03:52 Uhr

Hallo Leute,

ich möchte eine Texteditor Anwendung programmieren und habe hierzu besondere Anforderungen an mich gestellt.

Und zwar möchte ich diverse Toolbars dazuprogrammieren und Assistenten die zum Beispiel Textbausteine enthalten. Diese Toolbars möchte ich andocken wie das auch das Studio macht. Sprich sie sollen ausblendbar sein und sich dann in einer reihe von Tabs am Fensterrand anzeigen. So wie die TOolbox im Studio und alle weiteren Toolboxen wie die Dateivewaltung etc.

Wie setzt man so etwas um? Auch würde ich gerne verschiedene Dokumente in einem Reitersystem wie im Studio anzeigen lassen.

Wie mache ich das am besten? Gibt es Controls im Studio dafür?

Grüße
ViperNeo

13.06.2008 - 14:47 Uhr

Hallo Leute,

ich müsste in meiner Anwendung prüfen, ob ein FileServer erreichbar ist.
Wie mache ich das am besten? Über einen Ping? Habt ihr da ein Beispiel?

Grüße
ViperNeo

13.06.2008 - 12:43 Uhr

Ansonsten, kennt jemand Backup Komponenten oder dergleichen für das .NET Framework. Dürfen auch ruhig etwas kosten.

13.06.2008 - 10:59 Uhr

Hallo Leute!

Ist es möglihc eine Konsole fernzusteuern?

Ich möchte über meine WIndows-Anwendung eine CMD Datei starten. Diese dann versteckt im Hintergrund laufen lassen und den Status reporten. Nach Schließen der CMD soll meine Anwendung dann weiterlaufen und einen Status melden.

Geht so etwas überhaupt?

Danke!

Grüße
ViperNeo

13.06.2008 - 09:43 Uhr

Ah okay. Grundsätzlich wollte ich aber eher die Anwendung für Vista umschreiben. Die Steuerung über die Kommandozeile erscheint mir aber sehr sehr eingeschränkt bei dem neuen Windows Backup? Gibt es hierfür eine Übersicht oder dergleichen?

Grüße
ViperNeo

11.06.2008 - 17:49 Uhr

Und wie hilft mir das bezüglihc meiner .NET Programmierung weiter?

11.06.2008 - 17:48 Uhr

Hallo Leute!

Ich mache folgendes. Ich habe eine Hauptform über die ich eine zweite Form aufrufe. Hier übergebe ich einen Übergabeparameter weil ich ein Objekt (Config) in der neuen Form benötige. Dieses Objekt wird nun überarbeitet und soll dann beim schließen der Form wieder an die Hauptform zurückgegeben werden.

Aber wie stelle ich das an?

Ich will keine Form global machen oder sonst irgendwas. Dafür muss es doch einen ganz einfachen weg geben, oder etwa nicht?

Grüße
ViperNeo

11.06.2008 - 14:29 Uhr

Hallo Leute!

Ich will eine Backupanwendung schreiben die mit den Windows Hausmitteln arbeitet.

Für XP habe ich bereits eine solche Lösung programmiert. Hier erstellt meine Anwendung ein BKS File das dann dem NTBACKUP übergeben wird.

Leider gibt es das unter Windows Vista nicht mehr und ich finde einfach nciht raus wie ich das ganze unter Vista realisieren kann.

Falls das einfach nicht mehr geht, habt ihr vielleicht OpenSource Klassen oder Anwendungen die Full und Incremental Backups können?

Grüße
ViperNeo

09.06.2008 - 17:07 Uhr

Hallo Leute!

Ich glaube ich stehe gerade total auf dem Schlauch und programmiere bisschen in die falsche Richtung.

Also ich benötige eien Anwendung, diese soll beim Starten nichts tun, außer einem Symbol in den SystemTray zu legen und einen weiteren Thread starten. Was der zweite Thread machen soll ist egal, der läuft einfach die ganze Zeit.

Der Mainthread soll nun stehen bleiben. Ich möchte dann, wenn man doppelt auf das notify icon klickt das sich eine userform öffnet, der zweite thread gekillt wird und die form modal angezeigt wird. nachdem die form geschlossen ist soll der zweite thread wieder eingerichtet und gestartet werden und die anwendung wieder auf benutzereingaben warten.

mein ansatz bisher (leeres projekt).

program.cs

[STAThread]
        static void Main()
        {
            NotifyIcon NotifyBar;
            
            // include notify icon from .ICO file
            Icon TaskIcon = new Icon(@"C:\Users\swa\Desktop\PHP Development\gfx pack\Colored\ICO\time.ico");
            
            // new notifyicon instance
            NotifyBar = new NotifyIcon();

            // show notifyicon in taskbar
            NotifyBar.Icon = TaskIcon;
            NotifyBar.Visible = true;

            NotifyBar.Click += new EventHandler(notifyBarDoubleClick);
            
            // initialize application settings
            CBUConfiguration CBUconfig = new CBUConfiguration();

            NotifyBar.Visible = false;
        }

        public static void notifyBarDoubleClick(object sender, EventArgs e)
        {
            UserForm UserForm = new UserForm();
            UserForm.ShowDialog();
        }

den zweiten thread habe ich erstmal rausgenommen. den habe ich aber auch hier gestartet. so beendet sich die anwendung sofort wieder. istk lar. baue ich ein thread.sleep ein, funktioniert irgendwie der eventhandler nicht mehr, jedenfalls wird die form nie angezeigt. also grundsätzlich habe ich dann hier ein problem was das warten betrifft. die anwendung soll erst geschlossen werden wenn cih das in der userform anweise.

danke schonmal!

grüße
viperneo

09.06.2008 - 15:30 Uhr
        // TEST
        public void RaiseClick_Filme()
        {
            this.buttonFilme_ClickMediaEvent(null, EventArgs.Empty);
        }
        // - Filme
        private void buttonFilme_ClickMediaEvent(object sender, EventArgs e)
        {
            // start - Filme
            this.setAllControlInactive();
            this.buttonFilme.Active = true;

            this.contentMedia.AutoMIME = false;
            this.contentMedia.AutoUpdate = false;
            this.contentMedia.MIMEType = eMIMEType.Web;
            this.contentMedia.MediaSource = Configuration.MediaModule_Filme_Path;
            this.contentMedia.UpdateContent();
            this.contentMedia.ShowContent();
        }
        private void setAllControlInactive()
        {
            this.buttonFilme.Active = false;
            this.buttonInternet.Active = false;
            this.buttonMuseum.Active = false;
        }
09.06.2008 - 12:58 Uhr

Hier meine Program.cs in der ich die Threads definiere

namespace MediaTerminal
{
    // This is the main program containing the main method
    //
    // This method controls the "Terminal Controller" thread (contains main application
    // including the main form and message loop) and the "Terminal Communication" thread
    // (for server/client network communication). Events between the form and 
    // communication thread are handled in the "Terminal Controller"
    //
    // fuck the threads!
      
    public class Program
    {
        // controller and communicator instances
        public static Controller TerminalController = null;
        public static Communicator TerminalCommunicator = null;
        public static Thread threadCommunicator;

        // The main entry point for the application.
        [STAThread]
        static void Main()
        {
            // read configuration file
            if (Configuration.ReadINI("D:\\Joerg\\Nibelungen\\terminal.ini") == true)
            {
                // start application
                // initialize communication thread, start listener and log on to server
                Program.TerminalCommunicator = new Communicator();
                Thread threadController = new Thread(Program.TerminalCommunicator.StartThread);
                threadController.SetApartmentState(ApartmentState.STA);
                threadController.Start();

                // initialize terminal controller and start terminal thread
                Program.TerminalController = new Controller(Program.TerminalCommunicator);
                TerminalController.Start(null, EventArgs.Empty);

                // go message loop, go
                Program.Start();
            }
            else
            {
                // error
            
            }
        }

        // starts application and message loop
        public static void Start()
        {
            // go
            Application.Run();
        }

        // stops application and message loop
        public static void Stop()
        {
            // stop communication thread
            TerminalCommunicator.Stop(null, EventArgs.Empty);

            // stop message loop (form)
            Application.Exit();
        }
    }
}

Der TerminalCommunicator

using System;
using System.Net;
using System.Net.Sockets;
using System.IO;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;
using MediaTerminalStatic;

namespace MediaTerminal
{
    public class Communicator : IThreadApplication
    {
        // declare test event
        public event EventHandler TestEvent;
        protected virtual void OnTestEvent(EventArgs e)
        {
            EventHandler testEvent = TestEvent;
            if (testEvent != null)
            {
                testEvent(this, e);
            }
        }
        
        
        
        
        private TcpListener listener;

        // start communicator
        public void StartThread()
        {
            this.Start(null, EventArgs.Empty);
        }
        public void Start(object sender, EventArgs e)
        {
            // create new listener
            listener = new TcpListener(IPAddress.Parse(Configuration.HostAdress), Configuration.HostPort);
            listener.Start();

            try
            {
                // wait for request and create socket
                Socket socket = listener.AcceptSocket();

                // read stream from network
                NetworkStream stream = new NetworkStream(socket);

                // initialize binary writer and read
                BinaryWriter w = new BinaryWriter(stream);
                BinaryReader r = new BinaryReader(stream);

                //TODO Form bekommt Änderung nicht mit da falsche message loop!!! -> link aus web!
                
                // raise test event
                this.OnTestEvent(EventArgs.Empty);







                if (r.ReadString() == ClientMessages.RequestConnect)
                {
                    // close connection
                    w.Write(ServerMessages.AcknowledgeOK);

                    //Console.Write("Die IP-Adresse des Clients lautet: ");
                    //Console.WriteLine(((IPEndPoint)socket.RemoteEndPoint).Address.ToString());
                    //Console.Write("Der Client benutzt den lokalen Anschluss: ");
                    //Console.WriteLine(((IPEndPoint)socket.RemoteEndPoint).Port.ToString());

                    // read data from stream
                    while (r.ReadString() != ClientMessages.Disconnect)
                    { }

                    // disconnect
                    w.Write(ServerMessages.Disconnect);
                }
                else
                {
                    // error closing connection
                }

                // close socket
                socket.Close();

                // close listener
                listener.Stop();

            }
            catch (Exception exception)
            {
                // error
            }
        }

        // stop communicator
        public void Stop(object sender, EventArgs e)
        {
            // close listener
            listener.Stop();

            // end thread
            Application.ExitThread();
        }
    }
}

using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;
using System.Drawing;
using MediaTerminalStatic;
using MainTerminalControl;

namespace MediaTerminal
{
    public class Controller
    {
        // Terminal form
        private FormMainTerminal form = null;

        // point to controller thread
        public Communicator communicatorEventBase = null;

        // constructor
        public Controller(Communicator communicator)
        {
            // set event base
            this.communicatorEventBase = communicator;

            // register events
            communicator.TestEvent += new System.EventHandler(this.Test);

        }

        // start controller (create form at this point!!!)
        public void Start(object sender, EventArgs e)
        {
            // initialize XP styles and avoid flicker
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);

            // load terminal screen
            form = new FormMainTerminal();

            // register events
            form.CloseApplicationEvent += new System.EventHandler(this.Stop);       // admin tag: close application
            
            // set to fullscreen
            form.Left = 0;
            form.Top = 0;
            form.Width = Screen.PrimaryScreen.Bounds.Width;
            form.Height = Screen.PrimaryScreen.Bounds.Height;

            // calculate background
            form.calcBackground();

            // show terminal screen
            form.Show();
            form.splashScreen = false;

        }

        // stop controller
        public void Stop(object sender, EventArgs e)
        {
            Program.Stop();
        }




        // simple TEST
        public void Test(object sender, EventArgs e)
        {
            if (this.form != null)
            {
                this.form.RaiseClick_Filme();
            }
        }

    }
}

So denke damit sollte der Prozess rund um die Threads erklärt sein. Die Invoke geschichten sind draußen da nix funktioniert hat. aber so ist mein grundaufbau.

09.06.2008 - 10:33 Uhr

Hallo Leute!

Folgender Grundbaustein ist gelegt:
Ich habe eine Anwendung die eine Fullscreen GUI ausgibt. Diese habe ich über den Grafikpuffer erstmal Flackerfrei gemacht und habe mir die GUI-Elemente mit eigenen Controls zusammengebaut.

Gesteuert wird die Anwendung über INI Files, die ihr auch sagen ob sie als CLIENT oder SERVER fungieren soll. Die Anwendung wird später einmal auf einem Server laufen als Steuereinheit und auf 4 Clients. Der Server soll bestimmte Events auf den Clients auslösen können und natürlich auch registrieren ob ein Client noch da ist oder ob er zum Beispiel heruntergefahren wurde. Außerdem soll der Server bestimmte GUI Inhalte an einen Beamer streamen. Diesen Befehl erhält er ebenfalls von den Clients.

Nun zum Problem:
Die Anwendung startet in einem Static Thread (STAThread). Dieser Thread kümmert sich um das ganze EventHandling der GUI, so wie das standardmäßig in .NET Anwendungen nunmal ist. Nun muss ich aber wie ihr oben lesen könnt, eine größere Netzwerkverwaltung implementieren. Das Problem ist wenn ich eine normale Socket-Kommunikation einbaue brauche ich Listener. Nun steht die Anwendung an einem solchen Listener.

Jetzt mein richtiges Problem:
Ich habe die Netzwerkkommunikation in einen eigenen Thread ausgelagert. Schicke ich nun mit Invoke oder CallBack() Methoden etwas an die Form zurück um Events zu triggern für die GUI passiert nichts. Meiner Vermutung nach werden alle Ereignisse in einen falschen EventHandler geschickt und somit nicht ausgeführt.

Ich hoffe irgendjemand hat hierfür eine Lösung. Ich baue auch gerne meine Anwendung nochmal ein wenig um und nutze eine andere Kommunikation.

Wenn jemand noch eine Idee zum Netzwerkstreamen von Bildinhalten hat, kann sich gerne auch mal ääußern 😉

Vielen DANK!!!

Liebe Grüße
ViperNeo