Laden...

Forenbeiträge von trigger3 Ingesamt 59 Beiträge

27.09.2010 - 20:31 Uhr

Guten Tag,
folgende Problematik:
ich nutze für die mp3-Wiedergabe in meinem Programm die AudioVideoPlay Bibliothek aus Direct X. Meine IDE ist Visual C# 2008 Express und bei mir läuft Windows 7 Home Premium mit 64 bit und dazu natürlich DirectX 11.

Soweit nichts schlimmes, jedoch springt das Programm einfach aus dem Debugzustand und beendet das ausführen der folgenden Befehle, es wird nur die Form angezeigt, nichts abgespielt und nichts angezeigt.

Wenn ich die Übergabe an die Klasse mit dem "using Microsoft.DirectX;" in einen catch block setze bekomme ich in der Messagebox:
ist keine zulässige Win32-Anwendung. (Ausnahme von HRESULT: 0x800700C1)

Ohne catch mit Message springt Visual Studio wie gesagt einfach aus der Quelleditor Ansicht raus ohne die Befehle auszuführen.
Meine google suchen ergaben das man die Anwendung als 32bit Version debuggen müsste, das könnte man unter der Vollversion von Visual Studio einstellen. Ist das wirklich der Grund?

Hier noch die Problemklasse:

using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Media;
using System.Windows.Forms;
using Microsoft.DirectX.AudioVideoPlayback;

namespace Quick_Fx_Player
{
    class ButtonSound
    {
        public FileInfo SoundFI;

        public SoundPlayer SoundFileWMA;
        public Audio SoundFileMP3;
        public Button Button;
        string FileLocation;

        public ButtonSound(Button FormButton, string FileLink, bool RunOnLoad)
        {
            SoundFI = new FileInfo(FileLink);
            if (SoundFI.Extension == "wma")
            {
                SoundFileWMA = new SoundPlayer(FileLink);
                if(RunOnLoad) SoundFileWMA.Play();
            }
            else
            {
                SoundFileMP3 = new Audio(FileLink, RunOnLoad);
            }

            this.Button = FormButton;
            this.FileLocation = FileLink;

        }
    }
}

Hier der Aufruf:

    public void AddButton(string File2Add)
        {
            try
            {
                FileInfo CurrFileInf = new FileInfo(File2Add);
                Button CurrButton = new Button();
                CurrButton.Name = "ButtonNr" + LoadedFiles.Count;
                CurrButton.Text = CurrFileInf.Name;
// ---schnipp---
               ButtonSound CurrButtonSound = new ButtonSound(CurrButton, File2Add, true);
                LoadedButtons.Add(CurrButtonSound);
                UpdateButtons();
                this.Controls.Add(CurrButton);
// ---schnapp---
            }
            catch (Exception ex)
            { MessageBox.Show(ex.Message); }
        }

Der gekennzeichnete Teil wird nicht ausgeführt.

Danke für jegliche Hilfe!

MFG trigger3

14.04.2010 - 22:03 Uhr

Der Server ist mein Heimcomputer, der ne ganz normale DSL Verbindung über meinen Router hat.
Muss man den Port etwa auch am Router per Hand frei geben, oder sollte das nicht automatisch funktionieren?

/EDIT
Ok es lag daran das ich erst einen Port an meinem Router freigeben musste. Aber das muss doch auch irgendwie ohne gehen? Immerhin schaffen andere Peer-To-Peer Programme das doch auch, oder etwa nicht?

14.04.2010 - 21:42 Uhr

Hallo,

es tut mir wirklich Leid solch eine Frage zu stellen, aber ich bin echt am verzweifeln und hab keine Ahnung was ich machen soll.
Folgendes: Ich habe ein kleines Tool programmiert das ein Server und ein Client gleichzeitig ist (Peer-to-Peer). Das ganze tut auch ordentlich solange ich dem Client auf meinen Server (127.0.0.1) connecten lasse.
Sobald ich das ganze aber mit meinem Kollegen teste oder auf meine Internet-Ip verweise (79.235.95.XXX) so bekomme ich beim Connecten auf den laufenden Server einfach ein Timeout.

Ich habe schon ein paar Tutorials durchgelesen und anscheinend kann man den Code ja meistens fast so übernehmen.

Hier meine Client Klasse:

using System;
using System.Text;
using System.Net.Sockets;
using System.Threading;
using System.Net;
using System.Windows.Forms;
using System.IO;

namespace TCP_Tool
{
    class Client
    {
        public TcpClient client;
        public DateTime StartConnection;
        public static string IP = "79.235.95.132";

        public Client()
        {
            client = new TcpClient();
            new Thread(new ThreadStart(StartClient)).Start();
        }

        public void StartClient()
        {
            int Port = 3003;
            WriteConsole("Connecting Server " + IP + ":" + Port);
            IPEndPoint serverEndPoint = new IPEndPoint(IPAddress.Parse(IP), Port);
            SetState("Connect Client...");
            client.Connect(serverEndPoint);
            NetworkStream clientStream = client.GetStream();
            SetState("Ready");
        }


        public void SendText(string StringToSend)
        {
            ASCIIEncoding encoder = new ASCIIEncoding();
            byte[] buffer = encoder.GetBytes(StringToSend);

            NetworkStream clientStream = client.GetStream();
            clientStream.Write(buffer, 0, buffer.Length);
            clientStream.Flush();

            WriteConsole("[SEND] " + StringToSend);
        }
}

(das WriteConsole und das SetState sind einfach kurze Funktionen die Texte an einer RTB und einem Label verändern)

Hier die Server Klasse

using System;
using System.Text;
using System.Net.Sockets;
using System.Threading;
using System.Net;
using System.Windows.Forms;


namespace TCP_Tool
{
    class Server
    {
        private TcpListener tcpListener;
        private Thread listenThread;

        public Server()
        {
            SetState("Server starting...");
            this.tcpListener = new TcpListener(IPAddress.Any, 3003);
            this.listenThread = new Thread(new ThreadStart(ListenForClients));
            this.listenThread.Start();

        }

        private void ListenForClients()
        {
            this.tcpListener.Start();

            while (true)
            {
                SetState("Wait for Clients");
                TcpClient client = this.tcpListener.AcceptTcpClient();

                Thread clientThread = new Thread(new ParameterizedThreadStart(HandleClientComm));
                clientThread.Start(client);
            }
        }

        private void HandleClientComm(object client)
        {
            SetState("Client found");
            TcpClient tcpClient = (TcpClient)client;
            NetworkStream clientStream = tcpClient.GetStream();
            WriteConsole("Found Client " + tcpClient.Client.LocalEndPoint.ToString());
            byte[] message = new byte[4096];
            int bytesRead;

            while (true)
            {
                Running = true;
                bytesRead = 0;
                SetState("Wait for Message");
                if (LastMessage != null) SetState("Message recieved " + LastMessage.ToLongTimeString());
                try
                {
                    bytesRead = clientStream.Read(message, 0, 4096);                                        
                }
                catch
                {
                    break;
                }

                if (bytesRead == 0)
                {
                    break;
                }

                //message has successfully been received
                ASCIIEncoding encoder = new ASCIIEncoding();
                SetState("Message recieved");
                LastMessage = DateTime.Now;
                WriteConsole("[RECIEVED] " + encoder.GetString(message, 0, bytesRead));
            }

            tcpClient.Close();
        }


    }
}

Hier das Programm falls der Fehler nicht in den Ausschnitten liegt:
http://triggerdesign.de/trash/TCP_Tool.rar

aber vielleicht sieht ein Profi den Fehler ja auf den ersten Blick. Wie gesagt, es ist ja nicht üblich eine Frage zum ganzen Projekt zu haben das man bearbeitet. Aber ich hab das ganze schon vor einem Jahr mal probiert und hatte den selben Fehler, damals noch unter einem anderen OS.

Die Firewall und die Virenprogramme wurden ein und ausgeschalten, daran dürfte es also auch nicht liegen 🙁

Vielen dank für eure Bemühungen im voraus,

euer trigger3

04.10.2009 - 16:42 Uhr

Guten Tag,
ich bin gerade dabei ein Programm zu entwickeln bei dem der Benutzer selbst über die Shortcuts bestimmen kann. Für die Shortcuts nutze ich eine Klasse der man die Taste als "Keys" Enumeration übergeben muss.
Das abfangen per "Form Key Down" Event funktioniert bereits perfekt. Die Tasten werden abgefangen und als Buchstaben in eine Textbox übertragen. Das Problem ist nur das die gesetzten Hotkeys auch abgespeichert werden sollen.

Ich kann die Tasten nun entweder als Keydata (string) oder Keyvalue (integer) abspeichern. Die Frage ist nur wie ich das ganze wieder zurück in das Keys Format bekomme, ohne eine fast endlos lange Case-Anweisung aufzuschreiben.

Hier mein bisheriger Code:

    
   
private void Options_KeyDown(object sender, KeyEventArgs e)
        {
                    boxShortScreen.Text = e.KeyData.ToString();
                    SelectedScreenShortcut = e.KeyValue;
        }

        public void SaveOptions()
        {
            Registry.SetValue(keyName, "ScreenShotShortCutString", SelectedScreenShortcut);
       }

        public static void LoadOptions()
        {

            ScreenShotShortCut = (string)Registry.GetValue(keyName, "ScreenShotShortCut", "F10");
        }

        public void SetHotKeys()
       {
          Keys SelectedHideHotKey = ?????
          HideKey.AddHotKey(SelectedHideHotKey , HotKey.MODKEY.MOD_NONE, "Hide");
        }


Mir fehlt jetzt nur die Möglichkeit bei "LoadOptions" nicht nur den String für meine Textbox auszulesen, sondern auch dem Programm klar zu machen welche Hotkeys es registrieren soll.

MFG trigger3

30.09.2009 - 13:06 Uhr

Hallo,
ich habe vor ein Programm zu basteln mit dem es unter anderem möglich sein soll Bilder auf verschiedene Imagehoster hochzuladen.
Nun gehört das Web nicht zu meinen Spezialgebieten und ich bräuchte ein paar "kreative" Denkanstöße (am besten natürlich ne Komplettlösung, aber ich weiß das auch ihr das mir nicht hinterher werft 😛).

Man soll Praktisch voll automatisch im Programm auf "Upload" klicken und am Ende kommt dann der Link zum Bild raus. Das auslesen der HTML Seite ist dann zwar kein Problem. Ich habe nur Probleme mit dem Upload Vorgang, auf z.B. www.imagebanana.com

Hier ein ähnliches Programm:
http://shup.com

Vielen Dank im voraus,
MFG trigger3

17.05.2009 - 16:05 Uhr

Danke^^

Habe schon einige Programme damit geschrieben, aber habe total vergessen das es eigentlich so einfach ist 😉

17.05.2009 - 15:38 Uhr

Hallo,
heute suche ich nach einer einfachen Methode Bilder aneinanderzughängen so das ein neues langes Bild entsteht.
Es ist für ein Programm mit dem man auch GIFs in Einzelbilder zerlegen kann. Das ist bisher kein Problem. Nur das aneinanderreihen der Bilder ist in meiner Methode etwas komplex und aufwändig.

                    Bitmap CurrentImage = quantized;
                    for (int x = 1; x != CurrentImage.Width; x++)//Jede Reihe
                    {
                        for (int y = 1; y != CurrentImage.Height; y++)//Jeder Pixel
                        {

                            SheetImage.SetPixel(x + i * CurrentImage.Width, y, CurrentImage.GetPixel(x, y));//Sheetimage ist das große Endbild
                        }
                    }

Es wäre nun möglich jeden Pixel von jedem Bild durchzugehen und dann Pixel für Pixel einzufärben, aber ich Frage mich ob es da vielleicht nicht eine Funktion gibt die mit das ganze erleichtert.

Mit fragenden Grüßen,
trigger3

27.04.2009 - 12:46 Uhr

Ich sage nur:

Bass.net (
>
)

Diese Libary unterstützt alle wichtigen Audioformate (inkl. Midi).

Vielen dank,
die Libary sieht wirklich überzeugend aus. Genau nach sowas habe ich gesucht.

MFG trigger3

26.04.2009 - 13:27 Uhr

Ich habe natürlich wie immer die Forensuche benutzt^^. Leider fand ich nur Möglichkeiten Wave Formate und MP3s abzuspielen. Die guten alten .mid wurden da wohl auf der Strecke gelassen. Ich lese mir trotzdem mal deine geposteten Threads durch. Dieses nBass ist meines Wissens ja auch nur für wave und mp Files zu gebrauchen.

Wenn ich .mid zu mp3 oder wave konvertiere werden die einfach zu groß für meine Minigames die so um 1mb groß sind.

PS: Der Artikel von maxE scheint auch nicht gerade auf dem aktuellsten Stand zu sein. Es wird doch wohl mit dem mächtigen .Net möglich sein alle Dateiformate abzuspielen oder? Ich meine DirectX kann das ja auch^^

25.04.2009 - 17:02 Uhr

Hallo,

eigentlich war ich mir meiner Methode Sounds abzuspielen ziemlich glücklich:

Audio.FromFile("file.mid").Play();

wenn ich den Sound mehrmals abgespielt habe dann habe ich ihn natürlich nicht ständig wieder neu laden lassen sondern ihn wie folgt abgespielt:


                Audio Sound = new Audio("file.mid");
                for (int x = 0; x != 10; x++)
                {
                    Sound.Play();
                    Thread.Sleep(500);
                }

Ich bin aber inzwischen mit dem ganzen DirectX.AudioVideoPlayback sehr unzufrieden. Mal wird der Ton nicht abgespielt. Mal wird er abgespielt dann wieder nicht und erst nachdem ich die Tondatei gelöscht habe und wieder hergestellt habe lief es wieder. Mal werden sie z.B. bei einem Spiel 1000 mal abgespielt und bei schuss 1001 spielt garnichts mehr ab ohne das ich irgendwelche Exeptions bekomme.

Meine Frage ist nun ob ich einfach falsch an die Sache herangehe, oder ob ich einfach eine veraltete Methode benutze. Wie damals als ich .mid Dateien nur per mci abspielen konnte.

MFG trigger3

30.03.2009 - 12:38 Uhr

Also mir ist noch kein Spiel unter die Nase gekommen bei dem das nicht funktioniert hat^^

29.03.2009 - 17:36 Uhr

Hi,
ich möchte euch hiermit meine erste Klasse vorstellen an der ich und ein Partner (dmix) schon eine Weile dran sitzen

Was genau macht diese Klasse?
Sie liest die "Daten" aus Spielen aus, wie z.B. HP, Namen, Level. Dies kann zum erstellen von Bots oder Trainshows wichtig sein. Später folgen noch Funktionen zum umschreiben von Werten, welches in Offline Spielen für Trainer genutzt wird.

Was bringt mir diese Klasse?
Das einzige was ihr ab sofort noch machen müsst ist das herausfinden der Offsets. Der GameNizor nimmt euch die restliche Arbeit komplett ab.

Welche Arbeit nimmt er mir den ab?
Er erleichtert das eintragen der Speicheradressen, verwaltet diese, wirft sinnvolle Exeptions, nimmt die Denkarbeit fast komplett ab und kümmert sich darum das die Offsets stets aktuell bleiben.

Was muss ich dazu können?
Eine gewisse Erfahrung in c# wird zwar vorausgesetzt, aber meine beiden Tutorials: http://gamenizor.cp-g.net/Tutorials.html erklären eigentlich alles von der Pike auf.

Alles restliche findet ihr auf der Website. In den nächsten Tagen werde ich noch ein paar Erklärungsbereiche schreiben.

Kleine Beispiele:

Auslese Methode #1 von 3 (anlegen von Offsets und auslesen - einfach aber viel Codearbeit)

  
using System;  
using System.Collections.Generic;  
using System.ComponentModel;  
using System.Data;  
using System.Drawing;  
using System.Linq;  
using System.Text;  
using System.Windows.Forms;  
using System.GameNizor;  
  
namespace GameNizor_AusleseverfahrenNr1  
{  
public partial class Form1 : Form  
{  
Game MyGame;  
Offset HP, MP, Gold;  
public Form1()  
{  
InitializeComponent();  
}  
  
private void Form1_Load(object sender, EventArgs e)  
{  
label1.Text = "Öffne Spiel...";//dient zur Info des benutzers  
LoadOffsets();  
}  
  
public void LoadOffsets()  
{  
//Legt das Spiel fest welches den Prozessnamen game.exe trägt  
MyGame = new Game(Game.GetProcessByName("game.exe"));  
//Öffnet den Prozess um ihn später auslesen zu können  
MyGame.OpenProcess(Game.SchreibRechte.ReadOnly);  
  
//Legt die Offsets an  
HP = new Offset("HP", (IntPtr)0x0082B6B4, 4, MyGame, 0x12c);  
MP = new Offset("MP", (IntPtr)0x0082B6B4, 4, MyGame, 0x134);  
Gold = new Offset("Gold", (IntPtr)0x0082E208, 4, MyGame);  
  
//Startet den Timer  
timerOffsetUpdater.Start();  
}  
  
private void timerOffsetUpdater_Tick(object sender, EventArgs e)  
{  
label1.Text = MyGame.ProcessToOpen.MainWindowTitle + " wird ausgelesen..."; //dient zur Info  
//Der Timer dient dazu die Offsets immer frisch zu halten  
label2.Text = "HP: " + Offset.ConvertToString(HP.Read());  
//Die HP wird als Byte Array ausgelesen und zu einem String konvertiert,  
//damit man sie in einem Label anzeigen kann  
label3.Text = "MP: " + Offset.ConvertToString(MP.Read());  
label4.Text = "Gold: " + Offset.ConvertToString(Gold.Read());  
}  
}  
}  
  

Auslese Methode #2 von 3 (Get By SuchTag )

using System;  
using System.Collections.Generic;  
using System.ComponentModel;  
using System.Data;  
using System.Drawing;  
using System.Linq;  
using System.Text;  
using System.Windows.Forms;  
using System.GameNizor;  
  
namespace GameNizor_AusleseverfahrenNr1  
{  
public partial class Form1 : Form  
{  
Game MyGame;  
public Form1()  
{  
InitializeComponent();  
}  
  
private void Form1_Load(object sender, EventArgs e)  
{  
label1.Text = "Öffne Spiel...";//dient zur Info des benutzers  
LoadOffsets();  
}  
  
public void LoadOffsets()  
{  
//Legt das Spiel fest welches den Prozessnamen game.exe trägt  
MyGame = new Game(Game.GetProcessByName("game.exe"));  
//Öffnet den Prozess um ihn später auslesen zu können  
MyGame.OpenProcess(Game.SchreibRechte.ReadOnly);  
  
//Legt die Offsets an  
MyGame.AddOffset("HP", (IntPtr)0x0082B6B4, 4, 0x12c);  
MyGame.AddOffset("MP", (IntPtr)0x0082B6B4, 4, 0x134);  
MyGame.AddOffset("Gold", (IntPtr)0x0082E208, 4);  
  
//Startet den Timer  
timerOffsetUpdater.Start();  
}  
  
private void timerOffsetUpdater_Tick(object sender, EventArgs e)  
{  
//Der Timer dient dazu die Offsets immer frisch zu halten  
label1.Text = MyGame.ProcessToOpen.MainWindowTitle + " wird ausgelesen..."; //dient zur Info  
  
//Sucht das Offset heraus welches den angebenen Suchtag enthält  
//Liest eine Byte array aus  
//Konvertiert diese zu einem String  
label2.Text = "HP: " + Offset.ConvertToString(Offset.GetByTag("HP").Read());  
label3.Text = "MP: " + Offset.ConvertToString(Offset.GetByTag("MP").Read());  
label4.Text = "Gold: " + Offset.ConvertToString(Offset.GetByTag("Gold").Read());  
}  
}  
}  
  

Auslese Methode #3 von 3 (OffsetFiles)

using System;  
using System.Collections.Generic;  
using System.ComponentModel;  
using System.Data;  
using System.Drawing;  
using System.Linq;  
using System.Text;  
using System.Windows.Forms;  
using System.GameNizor;  
  
namespace GameNizor_AusleseverfahrenNr1  
{  
public partial class Form1 : Form  
{  
Game MyGame;  
public Form1()  
{  
InitializeComponent();  
}  
  
private void Form1_Load(object sender, EventArgs e)  
{  
label1.Text = "Öffne Spiel...";//dient zur Info des benutzers  
LoadOffsets();  
}  
  
public void LoadOffsets()  
{  
//Legt das Spiel fest welches den Prozessnamen game.exe trägt  
MyGame = new Game(Game.GetProcessByName("game.exe"));  
//Öffnet den Prozess um ihn später auslesen zu können  
MyGame.OpenProcess(Game.SchreibRechte.ReadOnly);  
  
//Ladet die aktuelle OffsetFile Datei herunter und speichert sie unter Shaija.OffsetFile ab  
OffsetFile.DownloadFile("http://trigger3.tr.funpic.de/Shaya.OffsetFile", "Shaija.OffsetFile");  
  
//erstellt eine neue Offsetdatei und ladet die dort gespeichert Offsets in die Liste  
OffsetFile MyOffsetFile = new OffsetFile("Shaija.OffsetFile", MyGame);  
  
//Zeigt den Kommentar aus der zweiten Zeile der OffsetFile an  
this.Text = MyOffsetFile.CoderComment;  
//Startet den Timer  
timerOffsetUpdater.Start();  
}  
  
private void timerOffsetUpdater_Tick(object sender, EventArgs e)  
{  
//Der Timer dient dazu die Offsets immer frisch zu halten  
label1.Text = MyGame.ProcessToOpen.MainWindowTitle + " wird ausgelesen..."; //dient zur Info  
  
//Sucht das Offset heraus welches den angebenen Suchtag enthält (welche in der Offset File angegeben waren)  
//Liest eine Byte array aus  
//Konvertiert diese zu einem String  
label2.Text = "HP: " + Offset.ConvertToString(Offset.GetByTag("HP").Read());  
label3.Text = "MP: " + Offset.ConvertToString(Offset.GetByTag("MP").Read());  
label4.Text = "Gold: " + Offset.ConvertToString(Offset.GetByTag("Gold").Read());  
}  
}  
}  
  

MFG trigger3

23.03.2009 - 12:54 Uhr

Verzeiht mir das ich manchmal schwer von Begriff bin^^:

CurrBase = new IntPtr(Convert.ToInt32(SplittedString[1], 16));

hat funktioniert, und zwar wunderbar =)

THX @ all,
immerhin hab ich jetzt was über das hexadezimale System gelernt^^

14.03.2009 - 17:19 Uhr
[DllImport("kernel32.dll")] 
public static extern Int32 ReadProcessMemory(IntPtr hProcess, IntPtr lpBaseAddress,
[In, Out] byte[] lpBuffer, UInt32 nSize, out IntPtr lpNumberOfBytesRead);

Die Variable IpBaseAdress hab ich als String vorliegen und müsste das einfach in so in eine IntPtr umwandeln das ihr Wert der gleiche ist.

String BasePointerString = "0x0082B6B4";
//--Konvertiere 
IntPtr BasePointer entspricht 0x0082B6B4

Ich kann nicht genau sagen für welche Zwecke der Benutzer Adressen auslesen will. Vielleicht bringt es was wenn ich den Aufbau meiner klasse etwas erkläre:

Also in meiner Klasse kann man einen Prozess öffnen und ein objekt anlegen welchem man den Base Pointer und das Offset übergibt.
Da sich die Offsets in manchen Spielen aber manchmal verändern habe ich mir volgendes gedacht:
Der Programmierer legt eine Textdatei an welche die aktuellen Offsets enthält und lädt diese auf seinen FTP hoch. Das Programm liest dann diese Textdatei übers Internet vor dem Programmstart aus. Die Klasse funktioniert einwandfrei, solange der Benutzer die Daten manuell eingibt.
Bsp:

TestGame = new Game(Game.GetProcessByName("game"));

//0x0082B6B4 = Base; 4 = Buffergröße; 0x12c = Offset
Offset HP = new Offset((IntPtr)0x0082B6B4, 4, TestGame, 0x12c);    

int CurrentHealth = Offset.ConvertToInt32(HP.Read());
//Die .Read() Methode liefert eine Bytearray aus

Da ich dem Benutzer aber das Updaten der Offsets etwas erleichtern möchte habe ich mir folgendes Überlegt:


                //Pfad.txt wäre die Heruntergeladene aktuelle Textdatei
                OffsetFile MyTestFile = new OffsetFile("Pfad.txt");
                MyTestFile.ConnectedGame = TestGame;
                //Liest die Textdatei aus und registriert die Adressen 
                MyTestFile.Read();

                //Sucht das Offset über den Suchbegriff "HP" und liest eine Bytearray aus welche in einen Integer konvertiert wird
                int CurrHealth = Offset.ConvertToInt32(Offset.GetByTag("HP").Read()) ;

So sähe die Textdatei für mein Testspiel Shaija aus:

HP;0x0082B6B4;4;0x12c
MP;0x0082B6B4;4;0x134
AP;0x0082B6B4;4;0x13c
EXP;0x81E14C;4
Gold;0x0082E208;4
Level;0x0082E210;4

Schema:
Suchbegriff;BasePointer;Buffersize;(Optional)Offset

Für alle Nichtspieler: Die HP sind die Lebenspunkte die man noch hat^^

14.03.2009 - 16:42 Uhr

Ich hänge immer c# vor meine suchen^^.


SplittedString[1] = "0x0082B6B4"	                               |string
Marshal.StringToHGlobalAnsi(SplittedString[1]) =  59499624	|System.IntPtr

Jetzt bekomme ich ja 59499324 anstatt 0x0082B6B4 zurück. Mein Problem ist ja, dass ich den eigentlichen Pointer nie in einer Variable habe sondern NUR aus einer Textdatei lesen kann.

Das heißt das ich den Pointer nicht in einen String konvertiere, sondern aus einem Text welcher mal in ein Textfeld eingetragen wurde.

Vielen dank schon mal für die Hilfe.

14.03.2009 - 15:37 Uhr

verwende einen stringbuilder und erzeuge einen intptr auf ihm.

Tut mir leid ich hab meine Stringbuilder bisher zu anderen Zwecken genutzt und die MSDN hilft mir leider nicht weiter.
Könnte jemand vielleicht einen kurzen Codeschnipsel posten? 🤔

13.03.2009 - 16:51 Uhr

Hallo,
ich sitze gerade an einer klasse, welche das auslesen von Offsets erleichtert. Habe nur eine kurze Frage die mir google nicht wirklich beantworten konnte (Convert String to IntPtr & Convert String to Pointer).

Folgendes:
Ich habe einen Base Pointer Namens: 0x0082B6B4
Der Umweg über einen Integer klappt bei mir nicht, und ich lese den String aus einer Textdatei aus.

Wie kann ich diesen String in einen IntPtr packen ohne das eine Exeption geworfen wird und wenn möglich ohne unsicheren Code (das ist für den Klassenanwender immer etwas ungeschickt).

MFG,
trigger3

06.02.2009 - 20:08 Uhr

Ich habe es jetzt wie folgt gelöst, dabei konnte ich bei meinen Grundfunktionen bleiben und hab die Form als Zeichenplattform mit einer Imagebox vertauscht.


void GameTimer_Tick(object sender, EventArgs e)
        {
                Hero.Move(CheckMoveDirec());
                PicBox.Image = CurrScreen;
                PicBox.Invalidate();
        }

        void PicBox_Paint(object sender, PaintEventArgs e)
        {
            
            Grafik.Clear(Color.Black);
        }



das ist komplett Flicker frei

06.02.2009 - 19:07 Uhr

Form.Invalidate();

führt doch aber 100%tig zu einem flackern oder?

Ich werd dann wohl meine paar 100 Zeilen wohl doch umkrempeln müssen, danke an euch zwei.

06.02.2009 - 18:13 Uhr

hi,

ich programmiere mir gerade ein kleines Jump and Run. Zwar wusste ich das GDI gern die Form zum flackern bringt doch man kann es ja anscheinen umgehen in dem man die Bilder in eine Bitmap zeichnet und dann die Bitmap auf die Form zeichnet.

Hier mein bisheriger Code:

   
public Bitmap CurrScreen;
public Graphics Grafik;
   
//onload
{
this.CurrScreen = new Bitmap(BackGround.IMG, FormToDrawOn.ClientRectangle.Width, FormToDrawOn.ClientRectangle.Height);

this.Grafik = Graphics.FromImage(CurrScreen);
}

//die 2 fach überladene aDraw Funktion wird aufgerufen wenn sich ein Bild ändert, der komplette Code ist allerdings zu lange und falls doch Fragen da sind kann ich sie entweder beantworten oder den Source einstellen

        public void aDraw(Image bild, int x, int y, float Width, float Height)
        {
            Grafik.DrawImage(bild, x, y, Width, Height);
        }


        public void aDraw(Color Color, Rectangle Rectangle)
        {

            Grafik.FillRectangle(new SolidBrush(Color), Rectangle);
        }

 void GameTimer_Tick(object sender, EventArgs e)
        {
            Graphics g = this.Form.CreateGraphics();
            g.DrawImage(CurrScreen, 0, 0);
            g.Dispose();
        }

        void Form_Paint(object sender, PaintEventArgs e)
        {
            e.Graphics.DrawImage(CurrScreen, 0, 0);
        }

Mein eher gemütliches Jump and Run bewegt sich bei 20 Bildern pro Sekunde.

Fehlerbeschreibung:
Man sieht jede Bewegung die man bisher mit der Figut getätigt hat. Der Hintergrund bleibt solide wobei die Figur flackert (Bild da-Bild weg - Bild da- Bild weg)

Da ganze ist bei mir in einer externen Klasse untergebracht. Das //onload ist also nicht das laden einer Form sondern das instanziieren eines neuen Spieles welches bei mir nach dem abschluss des ersten Ladens erstellt wird.

Mit freundlichen Grüßen,
trigger3

02.02.2009 - 19:47 Uhr

Also ich hab mal einen Bot geschrieben der eine eigene Scriptsprache hatte mit der man im Programm Aktionen ausführen kann.
Es gibt zwar auch irgendeine schnellere Version, doch für deinen Zweck ist meine Variante sicherlich die einfachste.

Vergiss nicht nach dem Selektieren die Auswahl wieder aufzuheben, da du beim nächsten einfügen entweder den Text überschreibst oder ihn immer wieder am Anfang einfügst.

MFG trigger

02.02.2009 - 13:08 Uhr

Meinst du wirklich eine Textbox oder eine Richtextbox?
Eine Textbox wäre zum anzeigen von Fehlern ja eher suboptimal.
Bei einer RTB (Richtextbox)

RichTextBox.SelectionLength = Text.Lenght;
RichTextBox.SelectionStart = index; //Startindex deines Textes (in Deinem Fall wohl RichTextBox.Text.Lenght - Text.Lenght
RichTextBox.SelectionColor = Color.Red;
02.02.2009 - 12:30 Uhr

Hi,
ich programmiere gerade ein kleines Jump and Run. Da mein Animator etwas spinnt wenn ich das Bild wechsle obwohl es den gleichen Inhalt hat
würde ich gerne wissen wie ich herausfinde ob der Inhalt von Bild1 == dem Inhalt von Bild2 ist.
Die Image-Eigenschaften hab ich in der MSDN schon abgeklappert und in der Forensuche hab ich wohl die falschen Suchwörter eingegeben, aber ich muss wohl etwas übersehen haben, da ich ja bestimmt nicht der erste bin der solch eine Funktion benötigt.
Den Pfad zu dem Bild hab ich übrigens nicht, da an meine Funktion nur das image übergeben wird.

MFG trigger3

28.01.2009 - 19:45 Uhr

ja, wenn du den handle vom anwendungsfenster nimmst.

da habe ich nur das Problem das die Fremde Anwendung (in diesem Fall Wacraft 3) sich immer neuzeichnet und der Text somit extrem flackert.

Hier mein bisheriger Testcode:


        private void timer1_Tick(object sender, EventArgs e)
        {
            if (Process.GetProcessesByName(textBox1.Text).Length > 0)
            {
                Process ProcessFireFox = Process.GetProcessesByName(textBox1.Text)[0];
                label1.Text = "Mainwindow Title: " + ProcessFireFox.MainWindowTitle;
                IntPtr MainWinHandleFireFox = ProcessFireFox.MainWindowHandle;
                label2.Text = "Mainwindow Handle: " + MainWinHandleFireFox.ToString();
                g = Graphics.FromHwnd(MainWinHandleFireFox);
                int x = Control.MousePosition.X;
                int y = Control.MousePosition.Y;
                g.DrawString(textBox2.Text, new Font("Arial", 15), new SolidBrush(Color.DarkGray), new PointF(x+ 1,y +1));
                g.DrawString(textBox2.Text, new Font("Arial", 14), new SolidBrush(Color.Red), new PointF(x, y));
                ProcessFireFox.Dispose();
            }
        }
23.01.2009 - 14:33 Uhr

Vielen dank,
folgender Code funktioniert bei mir:


using Microsoft.DirectX.AudioVideoPlayback;
Audio soundExplosion;
Audio musicBG;
Audio soundShoot;

//Form1 ladet
            musicBG = new Audio(Directories.Sounds.BackGroundMusic);
            soundExplosion = new Audio(Directories.Sounds.Explosion);
            soundShoot = new Audio(Directories.Sounds.Shoot);
            bgwMusic.RunWorkerAsync();
//Form 1 geladen
void Shoot()
{
                    if (!bgwSounds.IsBusy)
                    { bgwSounds.RunWorkerAsync(); }
}

void Explode()
{
                    if (!bgwExplosion.IsBusy)
                    { bgwExplosion.RunWorkerAsync(); }
}

        private void bgwSounds_DoWork(object sender, DoWorkEventArgs e)
        {
                if (File.Exists(Directories.Sounds.Shoot))
                {
                    soundShoot = new Audio(Directories.Sounds.Shoot, true);
                    soundShoot.Volume = -750;
                }
        }

        private void bgwExplosion_DoWork(object sender, DoWorkEventArgs e)
        {
                if (File.Exists(Directories.Sounds.Explosion))
                { soundExplosion = new Audio(Directories.Sounds.Explosion, true);
                soundExplosion.Volume = -1000;
                }          
        }

        private void bgwMusic_DoWork(object sender, DoWorkEventArgs e)
        {
            if (File.Exists(Directories.Sounds.BackGroundMusic))
            {
                musicBG = new Audio(Directories.Sounds.BackGroundMusic, true);
                musicBG.Volume = -500;
            }
        }


21.01.2009 - 20:56 Uhr

Hi,
ich sitze gerade an einem kleinen Spielchen das auch ein paar Sounds erzeugt. Da es ziemlich Aktionsreich ist gibt es ne Hintergrundmusik, Schussgeräusche und Explosionen.

Hintergrundmusik (midi Datei)...

        [DllImport("winmm.dll", EntryPoint = "mciSendStringA")]
        private static extern int mciSendString(string lpstrCommand, string lpstrReturnString, int uReturnLength, int hwndCallback);
        private void bgwMusic_DoWork(object sender, DoWorkEventArgs e)
        {
            string midiFile = Setup.BGMusik;
            if (File.Exists(midiFile))
            {
                mciSendString("stop midi", "", 0, 0);
                mciSendString("close midi", "", 0, 0);
                mciSendString("open sequencer!" + midiFile + " alias midi", "", 0, 0);
                int rtn = mciSendString("play midi", "", 0, 0);
            }
        }

....und Waffengeräusche....


        System.Media.SoundPlayer player =   new System.Media.SoundPlayer();
//.........
        private void Form1_Load(object sender, EventArgs e)
        {
                player.SoundLocation = "sound\\Shoot_Striker.wav";
                player.LoadAsync();
}
//..........


        private void bgwSounds_DoWork(object sender, DoWorkEventArgs e)
        {
            if (File.Exists("sound\\Shoot_Striker.wav"))
            {
                player.Play();
            }
        }//ich arbeite sehr gerne mit Backgroudnworkern, aber eigentlich dürfte das ja keinen unterschied zu einem neuen Thread machen oder?

...sind keine Probleme.

Jetzt soll aber eine zweite .wav Datei in Spiel kommen welche die Explosionen enthält (kann sein das das bis zu 2-3 mal in der Sekunde vorkommt).

Wenn ich dafür auch einen anderen Backgroudnworker nehme und nen neuen Player benutze der genau wie der andere aufgebaut ist dann bricht es das Schussgeräusch ab.

Ich möchte das diese Explosion immer komplett abgespielt wird und nicht abgebrochen wird, aber gleichzeitig ,dass die Schießgeräusche dabei nicht beeinflusst wird.
Die Hintergrundmusik soll wie gewohnt im Hintergrund weiterdudeln, was bisher auch passiert.

MFG trigger3

29.10.2008 - 18:02 Uhr

Hi mysharpler,
ich hab mal wieder eine kleine Frage. Mein Such und Ersetzalgo funktioniert zurzeit eigentlich perfekt doch ich hab trotzdem noch eine Frage. In meinem Programm werden größere Textdateien bearbeitet (30 Mb +).
Was ich nun gern hätte wäre das es alle veränderten Zeichen rot einfärbt.
An sich ist das ja kein Problem:


// Textstelle wird gesucht und mit den eingegebenen Zeichen ersetzt 
HauptRTB.SelectionColor = Color.Red;

Ich hab schon versucht es wie folgt zu machen ,damit nicht jede Textstelle nacheinander markiert wird:

        
HauptRTB.ShowSelectionMargin = false;
HauptRTB.SelectionColor = Color.Red;
HauptRTB.ShowSelectionMargin = true;

Jedoch wird dann der Text nicht farbig.
Wie könnte ich es schaffen das ich alles durchlaufe und dann den komplett bearbeiteten Text in die RichTextBox einfüge. Das funktioniert um einiges schneller. Wenn ich die Textstellen nicht farbig machen wollte würde ich es einfach wie folgt machen:

HauptRTB.Text = HauptRTB.Text.Replace("altes Wort", "neues Wort");

Vielen dank

16.10.2008 - 18:35 Uhr

winsharp93 hatte Recht. Ich hab nur HideSelection mit ShowSelectionMargin verwechselt.

15.10.2008 - 17:15 Uhr

Lösung gefunden:
RichTextBox.Focus();
Hab von BringToFront bis Select alles ausprobiert. Wenn man den Focus auf die RTB (RichTextBox) legt funktioniert aber alles wunderbar. Zusätzlich sollte die Suchform auf Topmost = true stehen.

Trotzdem vielen Dank für eure Hilfe

14.10.2008 - 21:10 Uhr
            RichTextBox HauptRichTextBox = Form1.rtbMain;
            RTBtext = HauptRichTextBox.Text;
            SearchWord = Suchwort;
            bgwFindAllSearches.RunWorkerAsync();
            if (!checkGroßuKlein.Checked)
            {
                Suchwort = Suchwort.ToLower();
                RTBtext = RTBtext.ToLower();
            }
            index = RTBtext.IndexOf(Suchwort, HauptRichTextBox.SelectionStart + 1);
            if (index == -1)
            {
                index = RTBtext.IndexOf(Suchwort, 0);
            }
            else
            {
                HauptRichTextBox.SelectionLength = Suchwort.Length;
                HauptRichTextBox.SelectionStart = index;
                HauptRichTextBox.ScrollToCaret();
            }

Genau so wie es in dem Beispiel der Fall ist soll es funktionieren. Das die RTB (RichTextBox) die gefundenen Wörter markiert und auch anzeigt, obwohl die "Suchform" weiterhin aktiv ist.

14.10.2008 - 18:48 Uhr

Hi @ all,
folgendes: Ich schreibe gerade eine Suchfunktion, soweit kein Problem. Das Suchwort wird in der Rtb ausgewählt und scrollt zum Wort. Was mich nun stört ist , dass ich die Suchfunktion in ner anderen Form laufen lasse und ich nur sehe was markiert ist wenn ich die Hauptform mit der RTB in den Voergrund rücke.
Ich hätte das aber lieber ähnlich wie beim MS-Wordpad, indem die Suchfunktion die aktive Form bleibt und ich trotzdem im Hauptfenster angezeigt bekomme was gerade markiert ist.

MFG trigger3

10.10.2008 - 22:05 Uhr

Überlagert man so die anderen Anwendungen. Meine Anwendung soll nämlich Text über einem Computerspiel anzeigen.

10.10.2008 - 17:23 Uhr

Hi myC# Community,
ich komm hier so langsam zum verzweifeln. Inzwischen hab ich google schon so ausgepresst, dass es mir fast keine antworten mehr liefert.
Was ich suche ist ein Tutorial oder eine genauere Anleitung wie man einen Text direkt auf den Bildschirm zeichnet (Nicht auf ne Form, sondern wirklich direkt auf den Bildschirm).
Die zwei Begriffe: GDI und Hardware Overlay wurden mir bereits an den Kopf geworfen und ich hab wie beschrieben danach gesucht, jedoch fand ich nur dinge die sich mit dem Zeichnen auf Formen beschäftigten oder (für mich) äußerst kompliziert waren.
Was ich suche ist ein Tutorial das es von Grundkenntnissen beschreibt (jetzt nicht wirklich von der Pike auf, ich code seit ca 2 Monaten in c#).
Wenn ihr ebenfalls keine Quelle kennt wäre es nett wenn ich ein paar Codeschnipsel dazu bekommen könnte, ein Source als Beispiel wäre natürlich dann das Sahnehäubchen.

Ich weiß, dass man hier eher versucht mit Stichwörtern weiterzuhelfen und finde das auch gut, aber ein Code oder ein Tutorial wäre für mich eine weitaus bessere Hilfe , zu mindest in diesem Fall.

MFG trigger3

27.09.2008 - 00:22 Uhr

Hmmm evtl. kannst du den Button durchgehend selektiert (Focus) halten und dort alle key events fressen und in die Textbox eintragen bzw. als Message weiterleiten (außer Enter oder F3).
Quasi dein Ansatz nur anders herum.

Ich habs jetzt so gelöst:

        private void boxSearch_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyData == Keys.Enter)
            {
                if (boxSearch.Text.Length != 0)
                {
                    _suchen(boxSearch.Text, checkGroßuKlein.Checked);
                }
            }
        }
26.09.2008 - 20:39 Uhr

Hi,
ich versuche gerade eine Suchfunktion zu erstellen die ähnlich wie ein Wordpad funktionieren soll. Man gibt also Text in eine Textbox ein, allerdings bleibt der Suchbutton dabei immer ausgewählt (schaut euch am besten mal die Wordpad suchfunktion an wenn ihr nicht genau versteht was ich meine).
Zuerst wollte Keydown Ereignis des Buttons alle einkommenden Tasten in die Textbox schreiben, was mir aber eigentlich klar sein sollte war, dass somit auch alle anderen Tasten wie Shift etc auch in Zeichenform geschrieben wird.
Meine Zweite Idee war wie folgt:

        private void btnSearch_KeyDown(object sender, KeyEventArgs e)
        {
            boxSearch.Select();
        }
        private void boxSearch_TextChanged(object sender, EventArgs e)
        {
            btnSearch.Select();
        }

Allerdings ist das hin und her springen Sichtbar und vieles wird von der Textbox (boxSearch) nicht aufgenommen.

Hat vielleicht jemand eine Idee oder kennt ein Thema (das ich nicht gefunden habe), welches dieses Thema behandelt?
Vielen dank mfg trigger3

25.09.2008 - 20:33 Uhr

Schon mal ohne die Ausgabe probiert, sollte schneller sein.

Ohne Ausgabe also jede Zeile auslesen ohne irgendwelches abspeichern dauert bei mir 14 sekunden. Ich hab dann natürlich auch versucht das ganze in ne Variable abzuspeichern, aber das dauerte auch wieder ziemlich lange bis das durchgelaufen ist. Ich such mal die MSDN nach euren Tipps durch und dann schau ich mal weiter^^

25.09.2008 - 20:21 Uhr

Das in der Console ist erstmal in Test, die PK2 Datei wird später in anderer Form benutzen.
Vielen dank für die Antwort,
MFG trigger3

25.09.2008 - 19:15 Uhr

Wenn ich normal eine Datei auslese, dann ist :


 StreamReader sr = new StreamReader(datei);
fileContent = sr.ReadLine();
sr.Close();

kein Problem, allerdings verträgt mein 1GB Ram Speicherlein nicht die 320 MB große Data.pk2 Datei die ich auslesen möchte. (System.OutOfMemoryException)
Wenn ich nun allerdings die nächst einfachere Lösung nehme und jede Zeile per sr.ReadLine() auslese und diese dann gleich in die Console eintrage dauert das Ewigkeiten.
Hat jemand vielleicht eine Lösung wie man diese ganze Sache etwas beschleunigen könnte?

MFG trigger3

15.09.2008 - 13:10 Uhr

Hab mir schon gedacht, dass es etwas mit der Registry zu tun hat.
Vielen Dank 👍

15.09.2008 - 13:05 Uhr

Hi lmyCsharp Community,
nach kürzere Programmierpause melde ich mich hiermit direkt mit einer Frage wieder zurück.
Folgendes:
Ich habe einen Texteditor geschrieben, mit dem es einem leichter fällt PK2 Daten zu verändern.
Nun wäre es für den Benutzer komfortabel, wenn er die Textdateien die man aus den PK2 Dateien extrahiert per Rechtsklick auf die Datei öffnen könnte.
Entweder sollte es in der „Öffnen mit“ Leiste erscheinen, oder so ähnlich wie in Winrar (Unter „Öffnen mit“ würde es in einem eigenen Kasten stehen).

Was ich nun bräuchte wären ein paar Grobe Stichworte wie man das machen könnte. Falls ich Rückfragen habe hab ich ja schon meine Anlaufstelle^^

Mit freundlichen Grüßen trigger3

PS: Sollte jemand meinen Text oder die Fragestellung nicht verstehen wäre es nett wenn er dies in einem Post äußert.

14.08.2008 - 18:10 Uhr

Hi,
ich habe ein Programm geschrieben, welches sich aus einer Textdatei Daten für eine Datenbank liest.
Der Text wird ganz normal per Streamreader aus der Textdatei herausgelesen, allerdings werden alle Umlaute (ä,ö,ü) mit einem ý (bzw. Rechteck) vertauscht.
Es liegt schon an dem auslesen, da ich bereits versucht habe alle äs mit aes zu ersetzten und es schon beim debuggen durchgegangen bin.


 StreamReader sr = new StreamReader(@"Database\Items.txt");
[...]
while (Description.Contains("NEXT") == false)
{
Description += "\n" + sr.ReadLine();
[...]
}

MFG trigger3

27.07.2008 - 17:11 Uhr

Guten Tag,
ich habe eine kleine simple Frage bei der ich allerdings nicht auf eine Antwort komme.
Wie im Titel beschrieben möchte ich alle Gradzeichen (") aus einer Zeichenkette entfernen, normalerweise würde ich dazu folgendes benutzten:

String = String.Replace("Nicht gewolltes Zeichen", "");

Gibt es dazu vielleicht eine Methode änlich wie bei den Schrägstrichen ( "\" oder @""?

MFG trigger3

22.07.2008 - 17:54 Uhr

Danke für den Tipp NeuroCoder
Ich habe das Problem mit folgendem Tool, welches meine Arbeit wohl extrem erleichtert hat gelöst:

http://www.codeproject.com/KB/directx/Overlay_Tools.aspx

MFG trigger3
[erledigt]

22.07.2008 - 14:37 Uhr

Danke für den Hinweiß winSharp93,
Tut mir Leid, aber ich habe jetzt wirklich sehr lange nach DirectX Tutorials gesucht und auch in der MSDN finde ich nur die Antwort "Male deinen Text auf eine Form", das bekomme ich ja auch gut hin, aber wie mache ich jetzt was direkt auf den Bildschirm?

`device = new Device(0, DeviceType.Hardware, this, CreateFlags.SoftwareVertexProcessing, presentParams);

Was kann ich hier als Control Hanlde Window angeben, damit ich nicht this verwenden muss?

MFG trigger3

21.07.2008 - 15:14 Uhr

Guten Tag,
ich bin gerade an einer Anzeige, welches so manch wichtige Daten für einen Wc3 Spieler anzeigt^^, mein Problem ist nun das ich zwar weiß wie man eine normale Form Anwendung im normalen Windowsbetrieb im Vordergrund hält:

this.TopMost = true;

Im Moment benutzte ich einen timer der alle 100 Millisekunden tickt und dann dieses Ereignis auslöst.

Mein Problem ist aber das WC3 die Form immer verdrängt und es somit im Vordergrund steht und sich im Vollbildmodus öffnet. Ich weiß aber das es möglich ist, da ich andere C# Programme kenne, welch in der Lage sind über dem Spiel zu stehen, obwohl das Spiel selbst noch benutzbar ist.

MFG trigger3

18.07.2008 - 14:43 Uhr

Echt gutes Buch^^. Ich finde das viel besser erklärt als in der MSDN. Da lohnt es sich echt mal auch den ganzen Text durchzulesen , anstatt nur die Codeschnipsel zu suchen.

18.07.2008 - 13:34 Uhr

Der User braucht diese Checkboxen nicht zu benutzten noch haben sie einen Namen^^. Hört sich jetzt vielleicht etwas komisch an, ist aber für meinen Nutzten gut geeignet.
Es handelt sich um einen Editor, welcher Beats aus einem Musikstück herausliest und es in ein Schema bringt das ich für ein anderes Programm benutzten kann (Ein Spiel welches mit XNA programmiert wird). Der User wird dieses Programm also nie sehen.

17.07.2008 - 21:27 Uhr

Ich hole mir alle Checkboxen mit folgender Funktion:

for (int i = 1; i <= 320; i++)
{
collection=this.Controls.Find("checkBox" + Convert.ToString(i),true);
collectionb[i - 1] = collection;
}

Jetzt möchte ich von den gespeicherten Checkboxen einfach den CheckState auslesen bzw setzen
collectionb[zähler].Checked funktioniert nicht, das es vom Typ "Control" ist und nicht als Checkbox erkannt wird.

MFG trigger3

17.07.2008 - 21:11 Uhr

Guten Tag,
ich würde gerne wissen wie auch aus einer Control Aray heraus den Checked Status einer Checkbox setzten kann. Sprich:

  • mein Programm liest den Status der Boxen ab und speichert sie mit 0en und 1en in eine Textdatei ab
  • Bei dem nächsten Start kann man eine Textdatei auswählen und dann sollte es den Checked Status wieder so setzten.

Nun handelt es sich um über 320 Checkboxen und deshalb habe ich sie auch in eine aray gelesen. Wenn ich allerdings in der Schleife die aray auslesen will kann ich den checked status leider nicht abrufen.
Ich hoffe ihr konntet meine Formulierung verstehen, bei Fragen bitte posten.

MFG trigger3

06.07.2008 - 16:57 Uhr

Ich habe es jetzt wie folgt geregelt, diese Lösung erschien mir gut genug, da alles einwandfrei funktioniert:

                StreamWriter sw = new StreamWriter(SavingFile);
                foreach (string linie in richTextBox1.Lines)
                {
                    sw.WriteLine(linie);
                }
                sw.Close();