Laden...
Avatar #avatar-2705.jpg
Trekki1990 myCSharp.de - Member
Fachinformatiker Sachsen-Anhalt, Dessau Dabei seit 05.02.2008 503 Beiträge
Benutzerbeschreibung

Forenbeiträge von Trekki1990 Ingesamt 503 Beiträge

28.05.2020 - 08:19 Uhr

Zum Thema Hyundai: https://stackoverflow.com/questions/57306799/how-to-decode-obd-2-data-from-hyundai-ioniq-ev

Die Ausgabe aus meinem Tool passt wohl so. Nur kommt da als Rückgabe nicht "41" sondern die IDs der Steuergeräte "7EC" und dann die Nutzdaten.

Ich habe das Gefühl die Jungs bei Hyundai wollen nicht dass man "rumschnüffelt" und selbst irgendwas "baut" für den OBD Port.

Gruß
trekki

27.05.2020 - 16:44 Uhr

@trib...

Ich bin jetzt schlauer. Ich habe das eben an dem gewünschten anderen Auto ausprobiert. Da funktioniert alles wie es soll!

Ich gebe ein: 01 5C (Öltemperatur °C)
und erhalte: 41 5C XX

Ich gebe ein: 01 2f (Tankinhalt %)
und erhalte: 41 2f XX

Ich gebe ein: 01 46 (Außentemperatur °C)
und erhalte: 41 46 XX

Die bei Hyundai müssen irgendwas anders machen... Keine Ahnung.

Da ich die Werte nicht im Millisekundenbereich abfragen will, reicht mir hier alle 10 Sekunden. Ich verbinde das einfach mit einem Timer. Für meine kleine "Quick and Dirty" Lösung reicht mir das.

Danke an alle, für den letzten Denkanstoß. 😉
Bzgl. Puffer werde ich mir dann noch mal ansehen.

VG
trekki

27.05.2020 - 16:02 Uhr

Hallo Trib,

danke für deine ausführliche Nachricht!
In der Zwischenzeit (vor deinem Post) habe ich ein wenig rumprobiert.

Als ich das Thread.Sleep eingebaut hab, wurden die Daten nicht mehr zerstückelt und ich kann die einzelnen Einträge als items in einer Liste speichern wo man dann das Analysieren anfangen könnte:


Thread.Sleep(500); 
            var serialPort = (SerialPort)sender;

            int buffSize = 4096;
            byte[] bff = new byte[buffSize];
            string data = string.Empty;
            data += System.Text.Encoding.Default.GetString(bff, 0, serialPort.Read(bff, 0, buffSize));

            data_list = data.Split(new char[] { '\r' }, StringSplitOptions.RemoveEmptyEntries);

            foreach (string d in data_list)
            {
                if (txt_filter.Text != "")
                {
                    if (d.Contains(txt_filter.Text)) txt_receive.AppendText(d + "\n");
                }
                else
                {
                    txt_receive.AppendText(d + "\n");
                }
            }
            txt_receive.SelectionStart = txt_receive.Text.Length;
            txt_receive.ScrollToCaret();
        }

Habe jetzt nach deinem Post die einzelnen AT Kommandos mal ausprobiert.
Ich habe jetzt alles ausgeschaltet, also AT x0 und erhalte diese Nachrichten wie im hier zu sehen. Woher kommen denn immer noch diese 0:, 1:, 2: usw.?


15:59:53 - Befehl: 2101
7F2112
016
0:6101FFE00000
01E
0:6101000003FF
03D
0:6101FFFFFFFF
033
0:6101FFFFFBC0
1:09215A06061103
1:0C38004299D538
2:00000000E37534
1:BB172426480300
1:00023202320204
2:0000000A002502
3:04200000000000
2:040F530E0E0E0E
2:00007D003501BC
3:3D041939D0FFD0
3:05C04100000000
3:0E0E0E000FCC44
4:FF610000000000
4:00000000600000
4:CC010000900002
5:000001F4000001
5:3BEC00023AA900
6:A5000000000000
6:00D4300000CCD4
7:05BD0000000000
7:008371D60D0188
8:0000000003E800
>


Die PID 2101 - 2105 werden dazu genutzt um die einzelnen Batteriezellenspannungen auszulesen (sollte halt mir nur als Beispiel dienen um die Thematik grundsätzlich zu verstehen). Als Testobjekt nutze ich meinen Hyundai IONIQ electric. Der kann nämlich die ganze Zeit ohne Probleme eingeschaltet in der Garage stehen. 😄

Das ATH1 hatte ich mit Absicht gesetzt, da ohne die Header nicht ersichtlich ist von welchem Steuergerät die Daten kommen, so viel mir das Filtern leichter.

Gruß
trekki

27.05.2020 - 12:28 Uhr

Hallo Martin, ach Gott ist das peinlich X(
Ich haue ja bei Putty schön auf ENTER... Danke. dafür!

Jetzt kommen die Ergebnisse. Ich habe anscheinend jetzt noch ein Formatierungsproblem. Wie bekomme ich denn jetzt die CAN Messages als Byte Array in eine Liste um die zu analysieren? Er spuckt mir die ja teilweise zerhackt oder an einem Stück aus...

Liegt es eventuell an der Methode wie ich die Daten hole?

serialPort.ReadExisting();

Muss ich hier wie bei der Eingabe prüfen ob ein CRLF dazwischen liegt?

VG
trekki

27.05.2020 - 10:15 Uhr

Hallo und guten Morgen!

Ich habe mir mal wieder ein kleines Hobbyprojekt auferlegt.
Ziel ist es, mir eine eigene Multimediaoberfläche im Star Trek Stil (LCARS) zu bauen. Eingebaut wird das ganze im Doppel-DIN Schacht meines Kfz (Subaru BRZ, BJ. 2016).
Ich möchte auch weiterhin einige Live Werte meines Kfz über die OBD Schnittstelle auslesen. Dabei ist mir inzwischen bewusst wie das mit dem CAN BUS funktioniert. Ich schicke einen Request und das entsprechende Steuergerät antwortet.

Folgende Werte möchte ich dann auf meiner eigenen Oberfläche darstellen (Balkendiagramme usw.):- Außentemperatur (°C)

  • verbleibende Treibstoffmenge (%)
  • Motoröltemperatur (°C)

Am OBD Port meines Kfz steckt ein OBDII Bluetooth Modul, dass bereits mit einer Android App aus dem Playstore wunderbar zusammenarbeitet und ich bekomme auch die oben genannten Werte ausgelesen. Also grundsätzlich funktionell.

Ich habe dann den OBD Adapter mit meinem PC verbunden. Registriert hat sich der Dongle auf COM4. Habe mir eine kleine Test GUI geschrieben, die mir serielle Kommunikation ermöglicht. An der Stelle habe ich jetzt mein Problem. Wenn ich das Ganze mit Putty steuere, bekomme ich entsprechend korrekte Antworten zurück. Gebe ich beispielsweise den Befehl "ATZ" ein bekomme ich die ELM Version zurückgeliefert. Mache ich das mit meinem Tool, dann bekomme ich nur "?>". Wenn ich jedoch mit einem COM Port Emulator zwei Ports paare und schicke in Putty etwas los, kommt es in meinem Tool ohne Probleme an.

Anbei meine Methoden zum Senden und Empfangen:


private void btn_send_Click(object sender, EventArgs e)
{
    if (port.IsOpen == true) port.Write(txt_send.Text);
    else txt_receive.AppendText(DateTime.Now.ToLongTimeString() + " - Port ist nicht geöffnet!\r\n");
}


private void port_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
    var serialPort = (SerialPort)sender;
    var data = serialPort.ReadExisting();

    txt_receive.AppendText(DateTime.Now.ToLongTimeString() + " - " + data + "\r\n");
}

Anbei habe ich noch einen Screenshot um zu verdeutlichen was ich meine. Wäre über einen Denkanstoß sehr dankbar.

VG
trekki

17.11.2017 - 13:15 Uhr

Danke für eure guten Tipps!
Konnte es jetzt zu meiner Zufriedenheit lösen.
Das Pattern sieht folgendermaßen aus:

(STRING) - |((U_|U_TEW-)STRING)$

VG
trekki

16.11.2017 - 23:09 Uhr

Hallo liebe Gemeinde,

es ist gar nicht so leicht einen Titel für einen RegEx Thread zu finden 😉
Habe folgende Konstellation an Daten (AD-Gruppen):

DBG_Q-A - Abteilung ABCDEFGH DBG_Q-A-F - Abteilung ABCDEFGH DBG_Q-A-F1 - Abteilung ABCDEFGH DBG_Q-A-M - Abteilung ABCDEFGH U_Q-A U_Q-A-F U_Q-A-F1

Suchstring ist: Q-A-F
Pattern ist: (Q-A-F)\W|(Q-A-F)$
Herauskommen die Gruppen:

DBG_Q-A-F - Abteilung ABCDEFGH U_Q-A-F

Soweit so gut. Suche ich jetzt aber nach "Q-A" um diese Gruppen zu bekommen:

DBG_Q-A - Abteilung ABCDEFGH U_Q-A

Zeigt er mir ALLE die "Q-A" im Namen haben und nicht nur die zwei die ich eigentlich will.
Habe mit dem RegEx Tester von https://regex101.com/ schon ewig rumprobiert, aber komme zu keiner Lösung. Ist meine Anforderung überhaupt umzusetzen? Geht's vielleicht auch ohne RegEx?

Wäre für Denkanstöße dankbar.

PS: Ich prüfe immer nur einen Gruppennamen mit dem Pattern. Ich habe eine Liste aus Strings mit den ganzen AD-Gruppennamen. Iteriere die mit foreach durch und prüfe mit dem String ob die meinen Kriterien entspricht. Ist also nicht Multiline.

VG
trekki

26.07.2017 - 15:30 Uhr

@pinki: Exit Befehl hört sich schon mal gut an... Ich rufe mit dem Process.Start ja cmd.exe und die Argumente auf. Da steht kein exit dann irgendwo. Der Befehl, wie z.B. mkdir wird ja abgesendet und gleich umgesetzt. Ich kenn das aus Skriptdateien mit dem Exit damit die Konsolenfenster sich schließt. Muss ich mal näher untersuchen.

@Abt: Was spricht dagegen wenn es nur eine Intranetanwendung ist? Außerdem kann ich doch dem IIS App Pool jeden Nutzer zuweisen den ich will? Wird dann in diesem Nutzerkontext ausgeführt.

Gruß
trekki

26.07.2017 - 14:26 Uhr

Ich habe es noch mal etwas umgeschrieben, aber das Ergebnis ist genau das Gleiche, außer dass er nun bei

p.WaitForExit();

hängt.

Hier die andere Version:


protected void btn_execute_Click(object sender, EventArgs e)
        {
            try
            {
                var command = (from TOOLBOX
                               in ADWM_DB_SETTINGS.TOOLBOX
                               where TOOLBOX.AKTION == ddl_command.SelectedValue.ToString()
                               select TOOLBOX).First();

                string ex_command = command.ARGUMENTE;

                if (txt_host.Text != "") ex_command = ex_command.Replace("%HOST%", txt_host.Text);
                if (txt_arguments.Text != "") ex_command = ex_command.Replace("%PARAMETER%", txt_arguments.Text);
                ex_command = ex_command.Replace("%USERNAME%", adw.GET_SETTING("EWS_USER"));
                ex_command = ex_command.Replace("%PASSWORD%", adw.GET_SETTING("EWS_PASSWORD"));

                Process p = new Process();
                p.StartInfo.UseShellExecute = false;

                if (File.Exists(Path.Combine(HttpContext.Current.Request.PhysicalApplicationPath, @"Scripts\PStools\", command.PROGRAMM)))
                {
                    p.StartInfo.FileName = Path.Combine(HttpContext.Current.Request.PhysicalApplicationPath, @"Scripts\PStools\", command.PROGRAMM);
                }
                else
                {
                    p.StartInfo.FileName = command.PROGRAMM;
                }

                p.StartInfo.Arguments = ex_command;
                p.StartInfo.RedirectStandardOutput = true;
                p.StartInfo.RedirectStandardError = true;
                p.StartInfo.CreateNoWindow = true;
                p.OutputDataReceived += new DataReceivedEventHandler(proc_OutputDataReceived);
                p.ErrorDataReceived += new DataReceivedEventHandler(proc_OutputDataReceived);
                p.Start();
                p.BeginOutputReadLine();
                p.WaitForExit();

                /*StreamReader sr = p.StandardOutput;
                StreamReader sr_err = p.StandardError;
                string output = sr.ReadToEnd();
                string output_err = sr_err.ReadToEnd();
                p.WaitForExit();*/

                /*if (output != "") txt_console_ouput.Text = output;
                else txt_console_ouput.Text = output_err;*/
            }
            catch (Exception ex)
            {
                outputData.Append(ex.Message);
            }
            finally { txt_console_ouput.Text = outputData.ToString(); }
        }

        protected void proc_OutputDataReceived(object sender, DataReceivedEventArgs e)
        {
            if (e.Data != null)
            {
                outputData.AppendLine(e.Data.ToString());
            }
        }

Gruß
trekki

26.07.2017 - 13:58 Uhr

[ASP.NET]
[C#]

Hallo liebes Forum,

ich habe eine interne Webanwendung die verschiedene Prozesse starten kann.
Ich nutze hier die PStools für z.B. Abfragen welche Benutzer gerade an einem Host angemeldet sind etc.

Nun soll das Ganze flexibel sein, sodass man eigene Skripts zur Datenbank hinzufügen kann und eine Art Script Sammlung bekommt. Soll uns Admins die Arbeit ein wenig abnehmen.

Solange ich das mit den PStools mache funktioniert alles wie gewünscht. Ich erhalte nach dem abgesetzten Befehl auch den Output. Gebe ich nun das Programm "cmd.exe" an und übergebe Parameter bekomme ich von meiner Website keinen Response mehr und die Ladeanimation dreht sich zu Tode. Er hängt genau bei

string output = sr.ReadToEnd();

fest.

Ich hoffe ihr habt eine Idee.
Ich steige nicht ganz dahinter warum die CMD sich so anders verhält... Probiere schon seit Stunden 😦

Hier mein Code wie ich die Prozesse starte:

 protected void btn_execute_Click(object sender, EventArgs e)
        {
            try
            {
                var command = (from TOOLBOX
                               in ADWM_DB_SETTINGS.TOOLBOX
                               where TOOLBOX.AKTION == ddl_command.SelectedValue.ToString()
                               select TOOLBOX).First();

                string ex_command = command.ARGUMENTE;

                if (txt_host.Text != "") ex_command = ex_command.Replace("%HOST%", txt_host.Text);
                if (txt_arguments.Text != "") ex_command = ex_command.Replace("%PARAMETER%", txt_arguments.Text);
                ex_command = ex_command.Replace("%USERNAME%", adw.GET_SETTING("EWS_USER"));
                ex_command = ex_command.Replace("%PASSWORD%", adw.GET_SETTING("EWS_PASSWORD"));

                Process p = new Process();
                p.StartInfo.UseShellExecute = false;

                if (File.Exists(Path.Combine(HttpContext.Current.Request.PhysicalApplicationPath, @"Scripts\PStools\", command.PROGRAMM)))
                {
                    p.StartInfo.FileName = Path.Combine(HttpContext.Current.Request.PhysicalApplicationPath, @"Scripts\PStools\", command.PROGRAMM);
                }
                else
                {
                    p.StartInfo.FileName = command.PROGRAMM;
                }

                p.StartInfo.Arguments = ex_command;
                p.StartInfo.RedirectStandardOutput = true;
                p.StartInfo.RedirectStandardError = true;
                p.StartInfo.CreateNoWindow = true;
                p.Start();

                StreamReader sr = p.StandardOutput;
                StreamReader sr_err = p.StandardError;
                string output = sr.ReadToEnd();
                string output_err = sr_err.ReadToEnd();
                p.WaitForExit();

                if (output != "") txt_console_ouput.Text = output;
                else txt_console_ouput.Text = output_err;
            }
            catch (Exception ex)
            {
                txt_console_ouput.Text = ex.Message;
            }
        }

Grüße
trekki

25.04.2017 - 14:19 Uhr

Ich habs! Ich hatte beim Footer ...

flex: 1 1 auto;

... statt ...

flex: 0 0 auto;

... stehen.

Hier mein korrigiertes CSS:

<style type="text/css">
        html, body, form {
            height:100%;
            margin: 1px;
            min-height:100%;
            overflow:hidden;
            font-family:'Open Sans';
        }

        form {
            display: flex;
            flex-direction: column;
        }

        .StickyHeader {
            flex: 0 0 auto;
        }

        .StickyContent {
            flex: 1 1 auto;
            overflow-y: scroll;
        }

        .StickyFooter {
            flex: 0 0 auto;
        }
</style>

HTML:

<html>
<body>
   <form runat="server">
      <div class="StickyHeader">HEADER FROM MASTERPAGE</div>
      <div class="StickyHeader">HEADER FROM CONTENT</div>
      <div class="StickyContent">CONTENT</div>
      <div class="StickyFooter">FOOTER</div>
   </form>
</body>
</html>

Danke für die Anregungen!

Gruß
trekki

25.04.2017 - 14:12 Uhr

Ich habe jetzt im CSS BODY durch FORM ersetzt. Jetzt ist er fixiert. Aber auch nicht richtig. Wenn das DataGrid View so viel Daten enthält das es über das Browserfenster hinaus geht und gescrollt werden muss, ruscht der footer korrekt nach unten und bleibt da auch. Wird das DataGridView wieder kleiner, wandert der aber mit nach oben und es bleibt ein weißer Rand um unteren Ende. Muss ich hier noch was an den Flex Eigenschaften des Footers drehen?

Gruß
trekki

25.04.2017 - 13:46 Uhr

Vielen Dank für eure Vorschläge. Der Tipp von david ist Bombe! Kannte ich vorher gar nicht. Hat auch schon geholfen. Nur habe ich jetzt ein seltsames Phänomen.

Das ist mein CSS:

<style type="text/css">
        html, body, form {
            height:100%;
            margin: 1px;
            min-height:100%;
            overflow:hidden;
        }

        body {
            display: flex;
            flex-direction: column;
        }

        .StickyHeader {
            flex: 0 0 auto;
        }

        .StickyContent {
            flex: 1 1 auto;
            overflow-y: scroll;
        }

        .StickyFooter {
            flex: 1 1 auto;
        }
    </style>

Das Layout passt. Ich habe das in einer simplen HTML-Datei vorher mir noch mal angeschaut. Wenn ich jetzt das Layout in meine ASPX Seite übertrage, haut es nicht hin. Der Footer ist nicht unten fixiert, sondern schließt direkt an den variablen Content unten an.

Ich habe herausgefunden dass es an dem FORM-Tag liegt. Wenn ich das entferne gehts. Das kann ich aber nicht entfernen, da ja sonst meine Servercontrols nicht mehr arbeiten.

Jetzt habe ich endlich eine Lösung und dann funkt einem wieder was anders dazwischen. Habt Ihr noch einen Tipp?

Gruß
trekki

25.04.2017 - 00:30 Uhr

Ich bekomme es einfach nicht hin... Hier mal ein Bild wie ich es eigentlich benötige. Dabei ist der Footer das Problem. Mein Layout funktioniert mit einer fixen Größe des Headers gut. Aber das ist unpraktikabel bei dem Inhalt der dort angezeigt werden kann.

Bin relativ neu im Thema Webprogrammierung und tue mich mit CSS / Javascript und den Ganzen Zusammenhängen noch ein wenig schwer. Die normalen Windows Forms sind nichts dagegen.

Gruß
trekki

24.04.2017 - 20:36 Uhr

... okay okay ... Ich hatte wirklich ein Brett vorm Kopf. Ans rendern habe ich überhaupt nicht gedacht. Werde ich wohl dann mit Javascript machen. Ich werde meine Lösung dann hier posten.

Gruß
trekki

24.04.2017 - 20:14 Uhr

Hallo Abt, okay. Warum funktioniert dass dann wenn ich eine feste Pixelzahl festlege und die Abfrage? Es funktioniert nur nicht wenn die Container / Panel auf Auto Höhe stehen.

MrSparkle hast du einen Link oder ein Codeschnipsel der mir die Augen öffnet? In CSS? Wenn dann aber nur in Kombination mit CSS / Javascript wie Abt schreibt oder?

Gruß
trekki

24.04.2017 - 16:39 Uhr

Hallo liebe Community,

ich versuche verzweifelt die Höhe eines DIV-Containers abzufragen, bei dem die Höhe auf "Auto" festgelegt ist. Ich erhalte immer "0". Habe den DIV-Container in ein ASP-Panel umgewandelt und habe genau das Selbe Verhalten. Ich versteh es nicht.

Ziel ist folgendes:
Ich habe ein Main DIV (oder Panel, ist ja egal) und der Abstand zum Rand soll dynamisch angepasst werden. Dabei soll der Abstand genau so hoch sein, wie die Höhe des anderes Footer DIVs / Panels.

Im Prinzip hatte ich mir das so gedacht:

main.Style["bottom"] = pnl_footer.Height.Value.ToString() + "px";

Ich erhalte aber sowohl bei der Höhe als auch der Breite immer "0".
Klärt mich mal einer auf? Wäre euch sehr verbunden... 🤔

Gruß
trekki

16.03.2017 - 10:00 Uhr

Danke für die Hinweise Abt.

  1. Weiß ich, mir gings nur darum die Seite auch auf anderen produktiven Clients zu testen, um ein möglichst breites Spektrum an Test PCs zu haben.

  2. ok.

  3. Ist auch drin

Ich nutze WebForms. Ist doch für eine Intranetanwendung egal oder etwa nicht?

Gruß
trekki

15.03.2017 - 13:29 Uhr

Hallo liebe Community,

ich habe eine ASP.NET Anwendung im Visual Studio (2015) erstellt und nutze den integrierten IIS Express zum testen.

Auf meiner lokalen Entwicklermaschine klappt alles wunderbar. Ich habe dann die Seite auch zugänglich für andere im Netzwerk befindliche Maschinen gemacht. Auf diesen Maschinen werden aber Bilder nicht angezeigt. Wie kann das sein? Ich bin total ratlos... Habe die MIME Typen kontrolliert (bzgl. statischer Inhalt), aber da passt alles. Auch die Pfade im Quelltext passen. Was mir auffällt ist, dass wenn ich mir den Quelltext über den Browser der anderen Maschinen anschaue, die relativen Pfade der Bilder (PNG) nicht mit "~" beginnen, sondern gleich zu dem Bild zeigen. Also so:

Quelltext im VS:

... ImageURL="~/Images/user_add.png"

Quelltext an anderer Maschine im Browser:

... ImageURL="Images/user_add.png"

Habe ich was übersehen oder muss ich an meinem Projekt noch etwas einstellen?

Für Hinweise wäre ich dankbar.

Viele Grüße
trekki

[EDIT: 15.03.2017 - 13:31]
Mein Projekt liegt unter "C:\Projekte" ... kann das Probleme machen?
PS: meine Entwicklermaschine ist Windows 10 in einer Microsoft Domäne.

24.03.2016 - 12:26 Uhr

Vielen Dank für euren Denkanstoß! 😃
Habe mich in LINQ eingelesen. Funktioniert super.

Viele Grüße
trekki

24.03.2016 - 10:01 Uhr

Hallo liebe Community,

ich habe eine Anwendung die Daten in eine SQL Datenbank (MS) schreibt. Das habe ich bisher über Parameter gemacht. Das soll auch so bleiben. Nur ist mir das Tippen des SQL-Befehls zu aufwendig und fehleranfällig (Thema Kommas usw...). Ich habe mir eine Funktion gebaut die mir den SQL String zusammenbaut. Gibt's hier eine elegantere Lösung als die meine? Ich habe das Ganze auch dynamisch gehalten (mal 2 - 3 Paramater, aber auch viele mehr sind möglich), weil ich die Funktion in einer Klasse verwende.

Was auch nicht mit dieser Methode geht sind unterschiedliche Datentypen. So kann ich alles nur als String übergeben. Aber vielleicht habe ich hier generell einen Denkfehler oder den falschen Ansatz. Über Google habe ich schon viel gesucht, aber nicht wirklich etwas finden können, was mir weiterhilft.

So sieht meine Funktion aus:


// SQL Funktion INSERT
        public void SQL_INSERT_INTO(string table, string[] columns, string[] values, bool where, string where_command)
        {
            string col = "INSERT INTO " + table + " (";
            int col_anzahl_columns1 = columns.Length;
            foreach (string c in columns)
            {
                col = col + c;
                if (col_anzahl_columns1 > 1) col = col + ",";
                col_anzahl_columns1--;
            }

            col = col + ") VALUES (";

            int col_anzahl_columns2 = columns.Length;
            foreach (string c in columns)
            {
                col = col + "@" + c;
                if (col_anzahl_columns2 > 1) col = col + ",";
                col_anzahl_columns2--;
            }

            col = col + ")";

            if (where == true) col = col + " WHERE " + where_command;

            SqlConnection connection = new SqlConnection(sqlconnection);
            SqlCommand cmd = new SqlCommand();
            cmd.CommandText = col;
            cmd.Connection = connection;
            int i = 0;
            foreach (string v in values)
            {
                cmd.Parameters.AddWithValue("@" + columns[i], v.ToString());
                i++;
            }
            cmd.Connection.Open();
            cmd.ExecuteNonQuery();
            cmd.Connection.Close();
            cmd.Connection.Dispose();
        }

Viele Grüße
trekki

24.03.2016 - 08:15 Uhr

Bzgl. Auslaufmodell: Soll nur für eine interne Intranetanwendung dienen. Ist also denke ich mal nicht so kritisch 😉

PS: Das Problem mit dem Designer hat sich leider nicht in Luft aufgelöst. Ich kann aber mit leben. Ich schreibe sowieso meistens direkt in der Source.

Kann also zu.

Gruß
trekki

02.03.2016 - 15:52 Uhr

Hallo liebe Community,

ich habe mich die letzten Tage ein wenig in ASP.NET eingearbeitet.
Finde das echt super. Mir war das Potential dieser Technologie vorher gar nicht so bewusst.

Ich habe nun folgendes Problem:
Ich arbeite mit Visual Studio 2015. Habe mir eine Masterpage angelegt. In dieser Masterpage gibt es eine ASP-Tabelle. In dieser Tabelle gibt es diverse Zeilen und Spalten. Dazu habe ich noch eine WebForm die auf dieser Masterpage aufbaut. Der Inhalt der Webform soll dann in der einen freien Zelle der Masterpage angezeigt werden. Das funktioniert auch.

Nur ich kann dann im Designer nichts mehr an meiner Webform verändern. Es wird ein kleiner durchgestrichener Kreis angezeigt.

Quellcode von Masterseite:

<asp:TableCell runat="server" Width="100%" RowSpan="3" VerticalAlign="Top" BorderStyle="Solid" BorderColor="#999999" BorderWidth="1px">
                <div>
                    <asp:ContentPlaceHolder ID="ContentPlaceHolder1" runat="server">
        
                    </asp:ContentPlaceHolder>
                </div>
            </asp:TableCell>

Sollte ich anstatt der ASP-Table lieber eine normale HTML-Table verwenden? Mache ich hier grundlegend etwas falsch? Habe versucht Google zu benutzen, aber habe keinen passenden Suchstring finden können.

Viele Grüße
trekki

20.03.2015 - 15:19 Uhr

Hallo vielen Dank für deine Antwort Abt.
Ich habe es inzwischen anders lösen können. Ganz ohne ein Programm zu schreiben.

Anforderung: Veralteter Druckertreiber auf Windows 7 PC. Entfernen und neu hinzufügen des Netzwerkdruckers führt leider nicht zur Aktualisierung des Treibers. Alte Version wird weiterhin genutzt. Mit dem Script kopiere ich den neuen Treiber auf den PC, installiere einen lokalen Testdrucker mit dem neuen Treiber und lösche diesen wieder (dadurch wird die Aktualisierung des Treibers erzwungen). Netzwerkdrucker wieder installieren, alles schick 😃

Wen es interessiert hier das Script (muss natürlich auf die eigene Umgebung angepasst werden).
Benötigt wird im selben Verzeichnis noch die PSEXEC.exe

BAT-File 1 für den Aufruf der ganzen Aktion (start_repair.cmd):


@echo off
cls

echo Bitte Computernamen oder IP Adresse eingeben:
set /p Computer=

copy repair.cmd \\%Computer%\C$
psexec.exe -u DOMAIN\USER -p PASSWORD \\%Computer% C:\repair.cmd

BAT-File 2 für die eigentliche "Reparatur" (repair.cmd):


@echo off
echo DRUCKERREPARATUR IM GANGE. BITTE NICHT UNTERBRECHEN!!!
echo Drucker DRUCKERNAME entfernen...
rundll32 printui.dll,PrintUIEntry /q /dn /n \\SERVER\DRUCKERFREIGABENAME
net stop spooler
pnputil -i -a "PFAD_ZUR_INF-DATEI"
net start spooler
rundll32 printui.dll,PrintUIEntry /if /b "Test_Printer" /f "PFAD_ZUR_INF-DATEI" /r "LPT1:" /m "DRUCKERMODELL_AUS_DER_INF_DATEI"
rundll32 printui.dll,PrintUIEntry /q /dl /n Test_Printer
echo Drucker DRUCKERNAME werden installiert...
rundll32 printui.dll,PrintUIEntry /q /in /n \\SERVER\DRUCKERFREIGABENAME
rundll32 printui.dll,PrintUIEntry /q /y /n \\SERVER\DRUCKERFREIGABENAME

Eventuell hilft dies dem einen oder anderen weiter.

Gruß trekki

20.03.2015 - 12:19 Uhr

Hallo,

ich versuche schon seit geraumer Zeit herauszufinden was nicht funktioniert.
Ich versuche mit folgendem Code einen Befehl über PSEXEC.exe an pnputil zu schicken.
Das funktioniert wohl auch, meine Anwendung schmeißt mir keine Exception. Das Konsolenfenster geht auf, aber dann passiert nix weiter.

Wenn ich den Befehl in der CMD manuell eingebe, funktioniert es so wie es soll.
Übersehe ich was?

Wäre für jeden Tipp dankbar. 😃

Hier mein Code:


if (txt_pcnummer.Text != "")
            {
                try
                {
                    Process proc = new Process();

                    proc.StartInfo.UseShellExecute = false;
                    proc.StartInfo.RedirectStandardError = true;
                    proc.StartInfo.FileName = Path.GetTempPath() + @"\PsExec.exe";
                    proc.StartInfo.CreateNoWindow = false;
                    proc.StartInfo.Arguments = @" /accepteula \\" + txt_pcnummer.Text + @" -u DOMAIN\USER -p PASSWORD c:\windows\system32\pnputil.exe -e > c:\printDriver.txt";

                    proc.Start();

                    err = proc.StandardError.ReadToEnd();

                    proc.WaitForExit();
                    proc.Close();
                }
                catch (Exception ex) { MessageBox.Show(ex.Message + "\n\n" + err, "Error", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1); }
                finally { if (err != "") MessageBox.Show("Fehler: \n\n" + err); }
            }

Gruß trekki

03.03.2015 - 09:08 Uhr

Habe ich jetzt ... Asche auf mein Haupt.
Wenn ich den DN so schreibe:

"LDAP://CN="Müller, Hans",OU=Benutzer,OU=Knoten,OU=Firma,DC=ABC,DC=COM"

dann klappt es wunderbar.
Danke euch.

Gruß
trekki

03.03.2015 - 08:29 Uhr

Habe eben mit DSquery den Pfad geprüft. Alles okay.
Ich habe das dumme Gefühl dass das was mit der Authentifizierung zu tun hat 😕

Gruß
trekki

03.03.2015 - 08:20 Uhr

Hallo Abt,

ich habe die Namen anonymisiert. Ich hätte da auch was ganz anderes hinschreiben können. Es ist definitiv eine OU.

Nur das Beispiel müsste ja so funktionieren. Kommt ja von MS selbst.
Außerdem teste ich momentan nur. Wollte überhaupt mal sehen wie ich einen Nutzer verschieben kann. Nutzer lasse ich ja auch ganz einfach über UserPrincipal anlegen. Nur mit dem Verschieben bin ich noch nicht dahinter gekommen.

Gruß
trekki

03.03.2015 - 07:20 Uhr

Oh Entschuldigung, das hatte ich ganz vergessen zu erwähnen.
Sobald ich die "MoveTo" Methode aufrufe.

Gruß
trekki

02.03.2015 - 16:11 Uhr

Hallo,

ich verzweifle hier schon seit ca. 1 Stunde.
Ich habe mit Hilfe von Microsoft

MSDN

die Funktion zum Verschieben eines Objektes im AD erstellt.
Leider wirft er mir immer wieder den Fehler:

Fehlermeldung:
System.DirectoryServices.DirectoryServicesCOMException (0x80072032): Es wurde eine ungültige dn-Syntax angegeben.

Ich habe sämtliche Authentication Types probiert. Nichts. Jedes Mal das Selbe.
Mal mit Benutzername und Passwort, mal ohne. So sieht mein Code momentan aus:

DirectoryEntry newUser = new DirectoryEntry("LDAP://CN=Müller, Hans,OU=Benutzer,OU=Knoten,OU=Firma,DC=ABC,DC=COM", "user", "xxxxxx", AuthenticationTypes.Secure);
newUser.MoveTo(new DirectoryEntry("LDAP://OU=Abgelaufene-Benutzer,OU=Knoten,OU=Firma,DC=ABC,DC=COM"));

Habt ihr noch eine Idee?

Gruß
trekki

22.02.2015 - 11:59 Uhr

Hi Leute,

warum auch immer, habe es jetzt ebend noch mal probiert.
Nun hat der Sync auf Anhieb geklappt, obwohl ich das gestern
genau so wie heute gemacht habe.

Frags Pferd 😉

Gruß trekki

21.02.2015 - 16:52 Uhr

Hi,

ich breche mir schon seit Stunden einen ab.
Habe alles so wie aus der Anleitung gemacht. Inklusive Sync Agent und Group.
Wollte jetzt von meiner lokalen DB auf die AZURE DB synchronisieren.

Hier steht jetzt aber immer "Diese Datenbank ist leer, oder ihr Schema wurde nicht aktualisiert.".

Wenn ich auf Schema aktualisieren klicke, arbeitet er eine Weile
und dann kommt die Meldung, dass die Aktualisierung abgeschlossen wurde.
Die Meldung bleibt aber gleich (siehe oben).

Habe auch die Verbindung und den Agent alles noch mal neu angelegt,
ohne Erfolg. Irgendwas mache ich doch falsch??

Hat jemand eine Idee oder schon Erfahrungen damit?

Gruß
trekki

12.02.2015 - 15:02 Uhr

Um Datenschutz muss man sich auch Gedanken machen, aber mal ehrlich, man sollte es nicht übertreiben. Die Leute arbeiten mit Windows seit eh und je, ich arbeite mit Windows, ich programmiere in C# (auch von MS), warum also nicht auf bewährte Dinge zurückgreifen. Werde mir mal einen Testaccount einrichten und ein wenig "spielen".

Damit ich das jetzt noch mal richtig verstehe (grob umrissen):

  1. Ich erstelle in Azure eine SQL Datenbank
  2. lokal auf den PCs läuft der Sync Client, der die Daten erst mal lokal abspeichert und dann sobald Konnektivität besteht, auf die Azure DB überspielt
  3. In meinem Tool muss ich dann nur noch eine ganz normale SQL Connection zu einer lokalen Datenbank aufbauen? Also so als wenn ich lokal einen SQL Server laufen hätte?

Danke erst mal für eure Tipps!!

Gruß

Edit: Ist wie gesagt das 1. Mal dass ich mich mit Cloudlösungen beschäftige. Privat ne NAS ja, aber so "richtig" Cloud, noch nie 😉

12.02.2015 - 14:32 Uhr

Wollte das Ganze mal testen. Das ist ja echt nervig! Alle wollen irgendwelche Kreditkartendaten haben. Microsoft, Google, Amazon. Werd ich wohl in den sauren Apfel beißen müssen. 😕

Aber bei dieser Cloudgestützten Lösung würde ich gern bleiben. Ist meiner Meinung nach am sinnvollsten.

Gruß

12.02.2015 - 13:07 Uhr

Hallo Abt, das hört sich echt nicht schlecht an! Wenn dann würde ich sowieso MSSQL nutzen. Damit sollte es ja gehen, wär ja seltsam wenn nicht. Und die Kosten im Monat sollten für die Personen vertretbar sein.

Gruß

12.02.2015 - 10:09 Uhr

Hallo Bernd,

Dateibasiert gefällt mir ja genau so wenig. Genau das ist der Anwendungsfall. Die Personen haben alle einen eigenen Laptop und nehmen den auch zu Kunden mit und müssen dort dann was ändern. Zentral ablegen würde ich ja gern, bloß es gibt kein Büro oder ähnliche Örtlichkeiten an dem ich einen Server hinstellen könnte. Deshalb die Idee mit Gdrive.

Replikationen... Schau ich mir mal an.

PS: Dein Vorschlag mit der Kundenverwaltung nehme ich gern an 😉

Gruß

12.02.2015 - 07:20 Uhr

Guten Morgen Palin,

aber wird nicht bei jeder Änderung an der DB-Datei die komplette DB-Datei neu geschrieben?
Das wäre nämlich nicht gut, wenn dann mehrere drauf zu greifen. Ich weiß nicht ob der GDrive Client so intelligent ist und nur die einzelnen Bytes der Datei umändert 😕

Also um die Datenmenge muss ich mir schon Gedanken machen, denn die scannen auch sämtliche Dokumente zum Kunden ein. Also sowas wie Verträge, Aufträge usw. Da ist von 100KB bis 2MB pro File alles dabei. Die hätte ich aber direkt ins Filesystem geschrieben mit dem Pfad in die Datenbank. Sollte ja einfach sein dann mit der Synchronisierung.

Gruß

11.02.2015 - 21:47 Uhr

verwendetes Datenbanksystem: <noch keines>

Hallo liebe Gemeinde,

ich benötige mal euren Rat. Bekannte von mir arbeiten mit Kunden und haben sich wohl schon einen relativ großen Kundenstamm aufgebaut. Alles über irgendwelche Word, Excel und PDF Dokumente.

Die Daten liegen auch so auf mehreren PCs verteilt und mal was auf Google Drive und mal dort was. Also pures Chaos. Nun sind die Leute an mich heran getreten und haben mich gefragt ob es dafür nicht eine Lösung gäbe. Natürlich gibts dafür ne Lösung habe ich gesagt, die heißt Datenbank. Ohne die bekommen die Ihre Daten niemals geordnet.

Im Grunde benötigen die sowas wie ein sehr rudimentäres CRM. Kundendaten, Dokumente einbinden, Terminerinnerung usw usf.

Nun weiß ich nicht genau wo ich die Daten ablegen soll 😕
Die haben bisher viel in Gdrive gemacht, damit die Daten nicht weg sind falls mal der PC die Hufe hoch reißt.

Habe mir diverse Online CRM Lösungen angeschaut, das dumme ist nur, dass man da nicht offline arbeiten kann. Die wollen eigentlich Google Drive gerne weiter nutzen.

Ich habe dann hin und her überlegt. SQL Compact macht irgendwann keinen Sinn mehr, denn wenn die so anwächst in ein zwei Jahren, dann dauert der Sync der einzelnen DB Datei ewig. Fällt also flach. SQL Server Express bei jedem aufsetzen macht auch keinen Sinn. Wie halte ich denn dann die Daten synchron? Außer es hätte jeder seine eigenen Daten. Würde zur allerletzten Not auch gehen. Hat sowieso jeder seinen eigenen Kundenstamm.

Also momentan sind es wohl an die 500 Kunden, für 3 Personen. Könnte aber auch alles weiter wachsen... Ich will auch an die Zukunft denken. Man weiß ja nie.

Könntet ihr mir irgendwas empfehlen oder einen Tipp geben wie ich es in C# umsetzen könnte?

Gruß trekki

27.08.2014 - 12:05 Uhr

Ach so ein Mist... da sieht man den Wald vor lauter Bäumen nicht. Ich danke euch beiden! Hat funktioniert.

Gruß trekki

27.08.2014 - 11:13 Uhr

Hallo ich grüße euch,

ich habe das Gefühl, dass ich auf dem Schlauch stehe.
Kurzer Überblick: Ich habe eine Funktion die eine Mail mit Anhang über SMTP verschickt. Diese Datei ist temporär, das heißt ich erzeuge diese Datei und die Funktion holt sich diese Datei, hängt sie an die Mail, schickt die Mail weg und soll anschließend die Datei(en) wieder löschen. Genau hier wird eine Fehlermeldung geworfen, dass die Datei von einem anderen Prozess verwendet wird.

Hier mal mein Code:

private void sendmail_smtp(string recipient)
        {
            DirectoryInfo di = new DirectoryInfo(Application.StartupPath + @"\settings\temp\");
            int files = di.GetFiles().Length - 1;
            FileInfo[] filenames = di.GetFiles();

            MailMessage mail = new MailMessage();
            SmtpClient SmtpServer = new SmtpClient(File.ReadAllText(Application.StartupPath + @"\settings\mail\server.txt"));
            mail.IsBodyHtml = true;
            mail.From = new MailAddress(File.ReadAllText(Application.StartupPath + @"\settings\mail\sender.txt"));
            mail.To.Add(recipient);
            mail.Subject = File.ReadAllText(Application.StartupPath + @"\settings\mail\subject.txt");
            mail.Body = File.ReadAllText(Application.StartupPath + @"\settings\mail\body.txt");

            System.Net.Mail.Attachment attachment;

            foreach (FileInfo f in filenames)
            {
                attachment = new System.Net.Mail.Attachment(Application.StartupPath + @"\settings\temp\" + f.Name);
                mail.Attachments.Add(attachment);
            }

            SmtpServer.Port = 25;
            //SmtpServer.Credentials = new System.Net.NetworkCredential("mail", "password");
            //SmtpServer.EnableSsl = true;

            try { SmtpServer.Send(mail); }
            catch (Exception ex) { fehlermeldung("Fehler beim Senden der Mail.\nMögliche Ursachen: Firewall, Virenclient, Server nicht erreichbar.\n\nDetails: ", "Mail", ex.Message); }
            finally { SmtpServer.Dispose(); }
        }

Ich bin dann mal die Befehle Schritt für Schritt durchgegangen.
Die Datei befindet sich im Zugriff sobald folgender Befehl der Funktion ausgeführt wird:

foreach (FileInfo f in filenames)
            {
                attachment = new System.Net.Mail.Attachment(Application.StartupPath + @"\settings\temp\" + f.Name);
                mail.Attachments.Add(attachment);
            }

Ich hatte dann später noch

SmtpServer.Dispose();

ausgeführt, aber der Handle bleibt geöffnet. Übersehe ich da etwas?? Normal lese ich doch eigentlich nur und habe die Datei nicht zum Schreiben geöffnet.

Ich hoffe ich konnte mein Problem weitestgehend genau beschreiben.
Über die Suchfunktion habe ich zumindest nichts gefunden, was mich weiter bringen könnte.

Danke schon mal.

Gruß trekki

20.06.2014 - 08:51 Uhr

Hallo weismat,

vielen Dank für die Antwort! Das war es. Jetzt läufts einwandfrei.

Gruß
trekki

18.06.2014 - 16:20 Uhr

Hallo weismat,

ja habe ich ja. Habe CMD gestartet. Befehl

telnet IPADRESSE 25

eingegeben und der Server antwortet mir. Kann dann auch den Befehl EHLO absetzen. Das funktioniert alles.

Gruß
trekki

18.06.2014 - 15:00 Uhr

Hallo Leute,

ich versuche mich schon eine Ganze Weile daran und stecke fest.
Bei

string line = clientStreamReader.ReadLine();

friert das Programm ein und ich habe absolut keine Ahnung wieso. Die IP Adresse stimmt, der Server ist erreichbar, denn telnet über die normale CMD von Windows funktioniert es.

Hier mein Code:


private long GetSizeAttachament()
        {
            long Size = 0;
            TcpClient smtpTest = new TcpClient();

            try
            {
                smtpTest.Connect(textBox1.Text, 25);
                if (smtpTest.Connected)
                {
                    NetworkStream ns = smtpTest.GetStream();
                    StreamReader clientStreamReader = new StreamReader(ns);
                    StreamWriter clientStreamWriter = new StreamWriter(ns);
                    clientStreamReader.ReadLine();

                    clientStreamWriter.WriteLine("EHLO somehost");
                    while (true)
                    {
                        string line = clientStreamReader.ReadLine();
                        if (line.StartsWith("250"))
                        {
                            if (Regex.Match(line, "250-SIZE (.*?)$").Groups.Count > 1)
                            {
                                Size = long.Parse(Regex.Match(line, "250-SIZE (.*?)$").Groups[1].Value);
                                break;
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("Fehler: " + ex.Message);
            }

            smtpTest.Close();
            return Size;
        }

Habt ihr eine Idee? Danke schon mal für eure Vorschläge.

Gruß
trekki

20.03.2014 - 15:41 Uhr

Hier noch ein Bild des Tools...

20.03.2014 - 15:40 Uhr

Hallo,

bei uns in der Firma standen wir vor dem Problem die Benutzerprofile auf ein anderes Share zu kopieren. Da dies eine beträchtliche Anzahl (1400) ist und wir auch keine Downtime gebrauchen können (Schichtsystem, Nachtarbeit, usw), kam mir die Idee das zu automatisieren.

Mein Programm macht folgendes:

  1. Prüfen ob Nutzer gerade angemeldet (wird wie bei "net session" abgecheckt, Voraussetzung ist, dass man den Servernamen weiß, zu dem die User eine Session öffnen, wenn diese sich anmelden. Fileserver o.ä.)
  2. Liest den Profilpfad aus dem AD
  3. Vergleicht diesen mit dem neuen (den man in der GUI angeben kann).
  4. Wenn schon umgezogen, ignoriert das Programm den Benutzer.
  5. Wenn nicht, wird der Nutzer deaktiviert und ein robocopy Befehl abgesetzt.
  6. Während des Kopiervorgangs kann der Nutzer sich nicht versehentlich anmelden und bekommt eine Fehlermeldung.
  7. Ist der Vorgang abgeschlossen, wird der neue Pfad ins AD geschrieben und der Nutzer wieder aktiviert.
  8. Die nicht kopierten (angemeldeten) Benutzer schiebt er wieder in die Liste oberhalb, damit man das Ganze wiederholen kann ohne neu zu importieren.

Dies erspart uns im Moment eine Menge Arbeit.
Ich denke dies kann der ein oder andere Admin recht gut gebrauchen.

Die Dateien die man importieren kann sollten Zeilenweise
formatiert sein. D.h. am besten eine TXT-Datei und 1 User pro Zeile.
Username = SAM Account Name oder Vor-W2k-Name.

Ich erwähne es trotzdem noch mal, obwohl es jedem klar sein müsste:
Backup ist das A und O. Ich übernehme keine Haftung für Datenverluste!
Man muss auch wissen was man tut. Am besten vorher mit einem Testbenutzer prüfen ob alles so klappt wie gewünscht.

19.09.2012 - 00:46 Uhr

Hallo,

ich probiere schon die ganze Zeit herum, bekomme es aber nicht so wirklich hin. Jedem sollte die SendKeys.Send Methode bekannt sein. Wie man das begehrte Fenster in den Fokus holt bekomme ich auch hin. Zum Test nahm ich Firefox. Mit einem Klick auf einen Button meiner Anwendung konnte ich das Firefox Fenster in den Vordergrund holen und die Taste "F11" senden. Klappt alles wunderbar.

Nun brauche ich dies aber nicht auf Desktopebene, sondern möchte ich Tasten an ein Spiel senden.
Vielleich nicht jedem bekannt aber echt Klasse. X3 Terran Conflict oder X3 Albion Prelude.

Mache ich das ganze nun mit dem Fensterhandle des Spiels, passiert rein gar nicht. Habe das ganze dann alternativ mit keybd_event

 static extern void keybd_event(byte bVk, byte bScan, uint dwFlags, int dwExtraInfo);

versucht. Aber ebenfalls nicht funktionsfähig.

Kann es sein, dass das Spiel die Tasten direkt vom Tastaturtreiber abfängt und simulierte Tasten nicht akzeptiert?
Damit versuche ich das, vielleicht habe ich auch einen Fehler 😕


int ID = 0;
Process[] processes = Process.GetProcessesByName("X3AP");

foreach (Process p in processes)
{
    ID = p.Id;                
}

IntPtr MainHandle = Process.GetProcessById(ID).MainWindowHandle;
SetForegroundWindow(MainHandle);

//SendKeys.Send("Q");
keybd_event(VK_Q, 0x45, 0, 0);
keybd_event(VK_Q, 0x45, KEYEVENTF_KEYUP, 0);

Wäre super, wenn jemand einen Tipp für mich hätte.

13.09.2011 - 12:33 Uhr

Autonome Fahrzeuge schön und gut, aber ich würde nur im Äußersten Notfall mich in so ein Ding setzen (Unfall, Krankheit, etc). Ich finde der Mensch sollte immer die Macht über die Maschine besitzen, sonst gibts irgendwann ein böses Erwachen.

Damit meine ich kriminelle Gedanken mancher Menschen, die dann auch so ein autonomes Gefährt schnell mal zu anderen Taten veranlassen können, denn nichts ist vollkommen sicher und wird irgendwann geknackt.

Gruß Trekki

12.07.2011 - 11:02 Uhr

Transistor war auch eine Idee. Aber an den Pins des Power Schalter sollte keine Spannung anliegen! Der muss einfach nur gebrückt werden. Ist ja nur ein Taster wenn du es so willst. Der schließt für einen kleinen Moment kurz und löst somit das einschalten des Rechners aus. Das Relais oder der Transistor oder besser Schaltglied das ich brauche wäre sinnbildlich mein Finger der den Power Button drückt.

12.07.2011 - 09:43 Uhr

@el_panter danke für diesen Tipp!

Hab mal gegoogelt. Gibt anscheinend keine Relais die das machen. Würde das mit einem Optokoppler funktionieren oder gibt es da andere Bauteile die das können? Bin in Elektrotechnik nicht ganz so bewandert.

Danke und Gruß

11.07.2011 - 23:51 Uhr

Hi Leute,

danke für eure Antworten. Auf den Schluss mit dem Vibrationsalarm bin ich inzwischen auch gekommen ^^ Habe das Handy auseinandergenommen und dort Kabel an + und - des Motors gesetzt. Nun kommen bei Anruf ca. 300 - 900 mV Spannung raus. Gibt es Relais die mit dieser winzigen Spannung umgehen können? Will keine extra Stromversorgung für das Relais. Das Relais brückt dann einfach den Power Schalter.