Zum Inhalt springen

Wechselrichter

Mitglieder
  • Gesamte Inhalte

    11
  • Benutzer seit

  • Letzter Besuch

  1. Danke für den Code, hat auf Anhieb geklappt. :uli Gruß Wechselrichter
  2. Danke für den Hinweis Klotzkopp, haut aber leider trotzdem nicht hin! Liegt das vielleicht an der union, dass ich an diesen char nicht herankomme? Gruß Der Wechselrichter
  3. Hallo an alle Programmierer, folgendes Problem: Ich möchte den Text, der auf der Konsole ausgegeben wird, in einem char Array speichern. Hört sich einfach an, ist es aber scheinbar überhaupt nicht. Kennt jemand von Euch vielleicht eine Möglichkeit, wie man den Konsolenpuffer auslesen könnte? Bei MSDN gibt es ja die Funktionen: ReadConsoleOutput und WriteConsoleOutput. Auch gibt es ein Beispiel dazu, das 10 Zeilen erst ausgibt auf der Konsole und dann wieder blockweise einliest und dann wieder ab der 11. Zeile ausgibt: - - - - - - - - - - - - - #include <windows.h> #include <iostream> #include <Wincon.h> using namespace std; int main(void) { cout<<"HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH\n"; cout<<"HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH\n"; cout<<"HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH\n"; cout<<"HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH\n"; cout<<"HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH\n"; cout<<"HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH\n"; cout<<"HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH\n"; cout<<"HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH\n"; cout<<"HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH\n"; cout<<"HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH"; Sleep(3000); HANDLE hStdout, hNewScreenBuffer; SMALL_RECT srctReadRect; SMALL_RECT srctWriteRect; CHAR_INFO chiBuffer[800]; // [2][80]; COORD coordBufSize; COORD coordBufCoord; BOOL fSuccess; // Get a handle to the STDOUT screen buffer to copy from and // create a new screen buffer to copy to. hStdout = GetStdHandle(STD_OUTPUT_HANDLE); hNewScreenBuffer = CreateConsoleScreenBuffer( GENERIC_READ | // read/write access GENERIC_WRITE, 0, // not shared NULL, // no security attributes CONSOLE_TEXTMODE_BUFFER, // must be TEXTMODE NULL); // reserved; must be NULL if (hStdout == INVALID_HANDLE_VALUE || hNewScreenBuffer == INVALID_HANDLE_VALUE) { cout<<"CreateConsoleScreenBuffer"; } // Make the new screen buffer the active screen buffer. if (! SetConsoleActiveScreenBuffer(hNewScreenBuffer) ) cout<<"SetConsoleActiveScreenBuffer"; // Set the source rectangle. srctReadRect.Top = 0; // top left: row 0, col 0 srctReadRect.Left = 0; srctReadRect.Bottom = 10; // bot. right: row 1, col 79 srctReadRect.Right = 79; // The temporary buffer size is 2 rows x 80 columns. coordBufSize.Y = 10; coordBufSize.X = 80; // The top left destination cell of the temporary buffer is // row 0, col 0. coordBufCoord.X = 0; coordBufCoord.Y = 0; // Copy the block from the screen buffer to the temp. buffer. fSuccess = ReadConsoleOutput( hStdout, // screen buffer to read from chiBuffer, // buffer to copy into coordBufSize, // col-row size of chiBuffer coordBufCoord, // top left dest. cell in chiBuffer &srctReadRect); // screen buffer source rectangle if (! fSuccess) cout<<"ReadConsoleOutput"; // Set the destination rectangle. srctWriteRect.Top = 11; // top lt: row 10, col 0 srctWriteRect.Left = 0; srctWriteRect.Bottom = 20; // bot. rt: row 11, col 79 srctWriteRect.Right = 79; // Copy from the temporary buffer to the new screen buffer. fSuccess = WriteConsoleOutput( hNewScreenBuffer, // screen buffer to write to chiBuffer, // buffer to copy from coordBufSize, // col-row size of chiBuffer coordBufCoord, // top left src cell in chiBuffer &srctWriteRect); // dest. screen buffer rectangle if (! fSuccess) cout<<"WriteConsoleOutput"; Sleep(3000); // Restore the original active screen buffer. if (! SetConsoleActiveScreenBuffer(hStdout)) cout<<"SetConsoleActiveScreenBuffer"; // Das ist jetzt von mir. Ich wollte den Char ausgeben lassen, ging // aber nicht: //for(int i=0; i<800; i++) //cout << chiBuffer.AsciiChar; Sleep(10000); } - - - - - -- - - - - - - - - - -- - - -- ---- - - Das Programm arbeitet einwandfrei, aber ich möchte auf den in den char eingelesenen Stringblock eigentlich zugreifen, um ihn dann weiter zu verarbeiten. Bei "cout << chiBuffer.AsciiChar;" kommt folgende Fehlermeldung: request for member `AsciiChar' in `chiBuffer', which is of non-class type `CHAR_INFO[800]' Hier noch das struct CHAR_INFO: typedef struct _CHAR_INFO { union { WCHAR UnicodeChar; CHAR AsciiChar; } Char; WORD Attributes; } CHAR_INFO, *PCHAR_INFO; So Leute, jetzt seid Ihr mal wieder gefordert. Wie kann man dem ganzen am besten begegnen? Gruß Der Wechselrichter :old
  4. Wie lange die Anwendung benötigt, weiß ich leider nicht. Ich habe es bis jetzt provisorisch mit dem "Sleep (3000)" Befehl gelöst, aber das ist nun mal nicht das Gelbe vom Ei. Es werden noch mehr Anwendungen hinzukommen, die untereinander koordiniert werden müssen, damit kein Krampf herauskommt, oder damit nicht zwei Anwendungen zur selben Zeit auf ein Textdokument zugreifen. Dann geht nämlich garnichts mehr!! Aber trotzdem Danke für Deine Hilfe. Gruß Der Wechselrichter
  5. Guten Abend zusammen, habe mal wieder ein Problem: Ich führe über VB ein externes Programm mit dem Befehl Shell aus. Das Programm benötigt eine gewisse Zeit und arbeitet im Hintergrund. Wenn es fertig ist und die zugehörigen Textdateien aktualisiert hat, sollen diese geöffnet werden und die Inhalte über vb eingelesen und weiter verarbeitet werden. Jetzt ist VB natürlich ein Panzer, der nicht lange wartet, bis die Anwendung beendet ist. Stattdessen macht er gleich mit den nächsten Befehlszeilen weiter, also zu früh, da die externe Anwendung noch nicht beendet ist. Jetzt an Euch: Es gibt doch sicherlich einen Befehl, mit dem man herausfinden kann, ob eine externe Datei noch läuft!? (IsActive und Ähnliche haben nicht geklappt) Code Gerippe: ... Shell(anwendung.exe, vbHide) ' hier muss VB warten, bis anwendung.exe beendet ist Open "pfad/text.txt" As Input #1 'hier wird die Textdatei geöffnet, auf die 'kurz zuvor noch von anwendung.exe geschrieben wurde .... Für einen funktionierenden Befehl in VB Application (oder auch VB 6) wäre ich sehr sehr dankbar. Gruß Der Wechselrichter
  6. Mahlzeit zusammen, folgendes Problem: Ich möchte über eine Prozedur im normalen VB (also nicht in VB.NET) Strings an die Kommandozeile schicken, um damit Anwendungen, wie ein kleines Programm ausführen. Dem String weise ich den Pfad und die Anwendung zu, beispielsweise: cd my documents/test.txt Dieser String soll mit einem Befehl in die Kommandozeile geschrieben und ausgeführt werden. In C gibt es ja den Befehl system("...."); mit dem man das sehr schön machen kann. Gibt es so etwas auch in VB und wenn ja, wie lautet er? Dann noch etwas: Wenn ich in ein C Programm den system Befehl mit Pfad eingebe, öffnet sich die Konsole und bringt folgende Fehlermeldung: Pfad wurde nicht gefunden. Mit printf bzw. cout << habe ich mir mal den string noch anzeigen lassen, da ist noch alles in Ordnung. Man muss aber zwei backslashes angeben, denn einen verschluckt er. Liegt vielleicht daran der Fehler, oder ist es generell problematisch einen Pfad in einen String einzulesen und in über system("..."); an die Kommandozeile zu schicken? Bei manueller Eingabe in cmd.exe funktioniert es aber! So, jetzt seit Ihr dran! Für hilfreiche Beitrage bedanke ich mich schon mal. mfg Der Wechselrichter
  7. Danke für die Antworten erst mal. Vielleicht sollte ich noch ein bißchen konkreter werden: Es soll eine Diagnoseseite für den firmeninternen Touch erstellt werden, um Anlagen zu überwachen und auf etwaige drohende Netzwerkfehler rechtzeitig reagieren zu können. Jetzt brauche ich hierfür ein Tool, das es laut meines Ausbildungsbeauftragten geben soll, wenn nicht sogar mehrere davon und das dann über die Kommandozeile gestartet werden soll. Das Programm soll dann auf Knopfdruck am Touch einen bestimmen IP Adressbereich abpingen und NUR beim Antreffen doppelter IP Adressen eine Warnmeldung in Form eines PopUp Fensters generieren. Kann nämlich gut sein, das zwei SPS Geräte die gleiche IP Adresse haben und es dann zu Komplikationen kommt. Und noch was: Was leistet DHCP genau? :confused: Bin leider nur Praktikant und daher ein blutiger Anfänger Gruß Der Wechselrichter
  8. Guten Abend, ich bin auf der Suche nach einem Tool, das mir anzeigt, wenn es zwei gleiche IP Adressen in einem Adressbereich gefunden hat, aber es dazu zwei unterschiedliche Netzwerkteilnehmer gibt. IP Adressen dürfen in einem Netzwerk normalerweise nie doppelt vergeben werden, aber in der Realität sieht das halt wieder anders aus. Das Progrämmchen soll über die DOS Kommandozeile navigierbar sein und auch unter Windows laufen. Also hier der Aufruf an Euch: Kennt irgend jemand von Euch so etwas? Angeblich sollte es sowas geben, auch wenn ich schon das halbe Internet durchforstet habe, aber nichts brauchbares finden konnte. Gruß Wechselrichter
  9. Habe mir vom Firmenadministrator den Treiber installieren lassen. Funktioniert jetzt eigentlich alles ganz zufriedenstellend. Aber ich bin immer noch auf der Suche nach einer Liste mit Befehlen. Zum Beispiel gibt es doch den Befehl -oN um das Scan-Ergebnis abzuspeichern. Wie lautet aber hierfür der ganze Befehl mit Zieldatei und so weiter. Für hilfreiche Antworten bedanke ich mich schon mal mfg Der Wechselrichter
  10. Habe winPcap 4.0 installiert, lässt sich aber nicht installieren, da ich keine Admin Rechte habe. Gäbe es da eine Möglichkeit es trotzdem zu installieren? mfg Der Wechselrichter
  11. Guten Abend an alle Programmierer, folgendes Problem bzw. Projekt: Es müssen IP Adressen im Firmennetz ausgelesen werden und die verfügbaren Netzwerkteilnehmer in Form der zugehörigen IP Adresse in einer Liste abgespeichert werden. Das ganze muss im Hintergrund ablaufen, sprich per Kommandozeile navigiert werden. Das zu verwendende Tool wird nMap sein. Jetzt mein Anliegen: Gibt es irgendwo im Netz eine Seite mit Befehlen zum Scannen eines IP Bereichs und auch zum Abspeichern der gefundenen in einer Liste? Wenn ich im DOS Fenster: nmap scanme.nmap.org <IP-Address> eingebe, dann kommt außerdem folgende Fehlermeldung: "Failed to open device eth0". eth0 ist angeblich eine Neztwerkkarte. Aber was hat es damit auf sich. Es soll ja nur das Netzwerk "abgepingt" werden, und das kann ich ja ganz herkömmlich mit "ping <IP-Address> auch. Wäre für ein paar Ratschläge mehr als dankbar. mfg Der Wechselrichter

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...