Zum Inhalt springen

StarLord

Mitglieder
  • Gesamte Inhalte

    51
  • Benutzer seit

  • Letzter Besuch

Beiträge von StarLord

  1. Original geschrieben von Orffi

    Natürlich könnte man array[5] als *(array + 5 - 1 ) definieren, aber dann müßte man immer rechnen un das kostet (wenn auch nicht viel) Zeit.

    Und genau das würde dann der Kompiler machen. So ist es auch bei VB. Euere Definition mit array[5] = *arry+0 - *array+4 ist übrigens auch nicht unbedingt von Bedeutung. Man könnte genauso gut array[5] = *array+1 - *array+5 nehmen und in *array+0 den Typ oder die Länge des Arrays oder sonst irgendetwas anderes definieren. Dann wäre *array+0 z.B 0x00000005L wenn es als BYTE array[5] definiert worden wäre. Das Spielchen "was wäre wenn" kann man unendlich weiterführen... Und ich glaube nicht dass alle Programmiersprachen bei denen Arrays mit 1 beginnen bei der Ausführung oder bei der Compilierung länger brauchen oder einfacher bzw schwerer zu programmierern sind.

    Original geschrieben von Crush

    Da es sich bei C++ um einen Super-Assembler handelt, arbeitet man hier halt mit Index0.

    So ein Blödsinn! Assembler ist keine Hochsprache, und nur weil jemand C++ programmiert kann er noch lange nicht Assembler programmieren. Man merkt mal wieder das ihr zwanghaft versucht C/C++ mit Assembler zu verknüpfen und keine Ahnung von der Systemarchitektur hat. Schon mal auf anderen Systemen programmiert?

  2. @Peeter:

    Das ist ja genau das Problem: Ich bekomme keine Ausgabe, nicht mal in der Konsole. Sie zeigt bei eingeschalteter Protokollierung nur an dass ein Applet geladen wurde... aber meine Fehlermeldungen will sie nicht anzeigen. :(

    Gruß,

    StarLord

  3. Original geschrieben von Jaraz

    Das kann bei einem unsignierten Applet nicht "irgendein Rechner" sein, sondern nur der Rechner von dem das Applet geladen wurde.

    Das gilt doch nur wenn man den Remote Host nicht mit angiebt. Das hatte ich jedoch gemacht... falls es überhaupt nicht gehen würde wären die Java-Sockets doch in vielen Fällen für die Katz... oder nicht?

    BTW: Klingt zwar dumm, aber ich finde dennoch keine Lösung: Wie gebe ich eigentlich bei einem Applet Fehlermeldungen mit system.out.println() bzw system.err.println() aus? Ich kann nirgends die Ausgabe entdecken.

    Java ist für mich leider doch noch nicht so ganz verständlich obwohl es anscheinend wesentlich leichter als VC++ ist. :(

    Gruß,

    StarLord

  4. @Klotzkopp:

    Ja ja... du must immer deinen Senf dazugeben! ;)

    Es ist doch ganz egal ob ein Array nun bei 0 oder bei 1 beginnt. Darum kümmert sich der Compiler! Bei (Visual) Basic fangen Arrays normalerweise mit 1 an (außer man ändert dies ausdrücklich). Bei Ansi C/C++ beginnen sie jedoch (bekanntlich) immer mit 0. Sie hätten es aber damals auch mit 1 oder sogar mit 1000 beginnen lassen können => Es ist einfach so wie es ist. Der Standard wurde so definiert und sicher nicht unbedingt in Anlehnung an die Maschinensprache. Aber ich will mich jetzt wirklich nicht mit dir darum streiten und lasse es nun damit auf sich beruhen.

    BTW: Es gibt irgendeine API-Funktion von Microsoft bei der sie irrtümlicherweise mit 1 statt 0 beginnen und es deshalb zu Fehlern kommen kann. Leider fällt mir die Funktion nicht mehr ein.

    Gruß,

    StarLord

  5. Hallo Leute!

    Ich habe ein kleines Problem und vielleicht kann mir von euch jemand dabei helfen. Hier mal ein Auszug meines Applet-Codes:

    
           InetAddress inetServer;
    
           InetAddress inetClient;
    
           Socket mySock;
    
    
            try {
    
                inetClient = InetAddress.getByName("192.168.0.31");  // Das ist mein Rechner
    
                inetServer = InetAddress.getByName("192.168.0.5"); // Das ist irgendein Rechner im Intranet (gleiches Subnetz wie mein Rechner)
    
            }
    
            catch(Exception e) { /* mach irgendwas */ }
    
    
            try {
    
               mySock  = new Socket(inetServer, 80, inetClient, 1060 /*
    
    Portnummer ist eigentlch egal, sollte aber zwischen 1024 und 5000 liegen */);
    
            }
    
            catch(Exception e) { /* mach irgendwas */ }
    
    

    Leider kann ich damit keine Verbindung aufbauen. Es kommt einfach keine Connection zustande, obwohl der Zielrechner einen Port hat der auf LISTEN steht (z.B durch Apache) und keine Firwall die Verbindung verhindert.

    Dazu meine Fragen:

    1. Was ist an meinem Sourcecode falsch? Ich konnte weder im Usenet noch im Web eine Lösung finden.

    2. Wie kann ich ohne großem Aufwand einen lokalen freien Port ermitteln?

    3. Wie fange ich die Exceptions richtig ab?

    Vielen Dank schon mal!

    Gruß,

    StarLord

  6. @doublezero:

    Was laberst du eigentlich für ein Zeug? Hast du deinen eigenen Artikel eigentlich mal durchgelesen? Verstehst du ihn selbst?

    Wozu gibts eigentlich die Api-Funktionen GetFileVersionInfo() und GetFileVersionInfoLength() der Library Version.dll? Allerdings haben nicht alle Win32-Programme auch wirklich einen Eintrag der Version.

    Auch aus der Registry lassen sich teilweise die Versionsnummern auslesen. Das geht aber nur wenn man genau weis wo dieser Eintrag steht. Wie man aus der Registry Daten auslesen kann poste ich aber wirklich nicht... wozu gibts Suchmaschinen?

    Gruß,

    StarLord

  7. Wenn du im Shell bist geht es mit:

    
    #include <conio.h>
    
    int PosX;
    
    int PosY;
    
    
    void main(void) {
    
      PosX= 10;
    
      PosY= 1;
    
    
      gotoxy(PosX, PosY);
    
    }
    
    

    Sollte eigentlich mit allen Compileren funktionieren... außer mit Visual C++. Warum? Weil man damit keine 16-Bit Anwendungen mehr schreiben kann und aus einer 32-Bit Anwendung würde ein gotoxy() nur einen Fehler erzeugen (da Bios-Routine). Deshalb haben die von MS es gar nicht erst implementiert.

    Gruß,

    StarLord

  8. Ich hatte ein "= True" im Quellcode, deswegen ging es bei mir nicht... sorry. Nachträglich kann man ja nix mehr editieren, echt ein spitzen Forum! :( Wegen den paar Zeichen werde ich garantiert nicht mit den Moderatoren in Verbindung treten. Sowas nennt sich normalerweise "bescheidener Service"!

    So sollte die Funktion eigentlich sein:

    
    Private Sub Form_Unload(Cancel As Integer)
    
      If IdleTrackerActive Then
    
        IdleTrackerTerm
    
        MsgBox "IdleTracker wurde beendet", vbOKOnly
    
      End If
    
    End Sub
    
    

    Ach ja, ins Windows-System-Verzeichnis muss man die DLL auch nicht unbedingt kopieren, es reicht wenn sie sich im gleichen Verzeichnis wie das Programm befindet. Das Programm sollte aber beim Start überprüfen ob die DLL auch vorhanden ist.

    Gruß,

    StarLord

  9. Probiert mal folgendes:

    
    
    ' Die IdleTracker-DLL überwacht sowohl Tastatur- als auch Mauseingaben!
    
    
    ' Auslesen der Systemzeit
    
    Private Declare Function GetTickCount Lib "kernel32" () As Long
    
    
    ' Überwachung der Benutzereingaben beginnen
    
    Private Declare Function IdleTrackerInit Lib "IdleTrac" Alias "#2" () As Boolean
    
    
    ' Überwachung der Benutzereingaben beenden
    
    Private Declare Sub IdleTrackerTerm Lib "IdleTrac" Alias "#3" ()
    
    
    ' Zeit der letzen Benutzereingabe ermitteln
    
    Private Declare Function IdleTrackerGetLastTickCount Lib "IdleTrac" Alias "#1" () As Long
    
    
    Dim IdleTrackerActive As Boolean
    
    
    Private Sub Command1_Click()
    
      Timer1.Enabled = True
    
    End Sub
    
    
    Private Sub Form_Load()
    
        IdleTrackerActive = IdleTrackerInit
    
        If IdleTrackerActive Then
    
          Timer1.Enabled = True
    
          Timer1.Interval = 1
    
        Else
    
          MsgBox "Konnte IdleTracker nicht initialisieren!", vbCritical + vbOKOnly, "Fehler!"
    
        End If
    
    End Sub
    
    
    Private Sub Form_Unload(Cancel As Integer)
    
      If IdleTrackerActive = True Then
    
        IdleTrackerTerm
    
        MsgBox "IdleTracker wurde beendet", vbOKOnly
    
      End If
    
    End Sub
    
    
    Private Sub Timer1_Timer()
    
      Dim IdleTimeStamp As Long
    
      Dim CurrentTimeStamp As Long
    
      CurrentTimeStamp = GetTickCount / 1000
    
      IdleTimeStamp = IdleTrackerGetLastTickCount / 1000
    
    
      If (CurrentTimeStamp - IdleTimeStamp) >= 60 Then
    
        ' Hier sollte eigentlich das Programm gesperrt werden!
    
        MsgBox "60 Sekunden lang ist einfach nix passiert!", vbOKOnly
    
        Timer1.Enabled = False
    
      End If
    
    End Sub
    
    

    Natürlich braucht man dazu noch die IdleTracker-DLL! Einfach in das Windows-System-Verzeichnis kopieren. Dann müsste alles klappen. :)

    Um das sperren der Fenster muss man sich aber noch selbst kümmern... meine Arbeit ist getan! ;)

    Gruß,

    StarLord

  10. Original geschrieben von Executioner

    Was ist TheCustomizer und wo finde ich den zum Ausprobieren?

    "The Customiser" (mit s, statt z, sorry)

    Das ist ein Tool mit dem man bei jedem beliebigen Fenster änderungen vornehmen kann. Allerdings nur während der Laufzeit des Programmes... die Einstellungen werden nicht gespeichert (aber dazu gibts den ResHacker).

    Beides findest du mit einer Suchmaschine... allerdings hatte ich ewig nach dem Customiser gesucht. Also viel Geduld aufbringen.

    Gruß,

    StarLord

  11. Ist doch alles ganz einfach:

    Erstelle eine Funktion z.B. UserInput() und eine Variable (z.B TimeStamp). Beides am besten globalen in einem Modul definieren. In dieser Variable (hier wäre es TimeStamp) wird ein TimeStamp der aktuellen Systemzeit gespeichert (z. B. mit der Timer-Funktion, nicht verwechseln mit dem Timer-Control!) wenn die Funktion UserInput aufgerufen wird. Du musst dann nur noch bei jeder möglichen Benutzereingabe die UserInput()-Funktion hinzufügen:

    1. Bei Formularen in der MouseMove-Methode

    2. Bei Buttons in der Click-Methode und (wenn es notwendig ist) in der MouseMove-Methode

    3. Bei Textfeldern in der Change-Methode

    Natürlich gibt es noch viele andere Controls mit einer Click- und MouseMove-Methode. Die musst du alle abfangen sonst kann es sein dass der Benutzer gerade etwas eingiebt oder verändert und er plötzlich im Regen steht.

    Alles was du nun tun musst, ist folgendes:

    Beim ersten Start weist du der TimeStamp-Variablen die aktuelle Zeit mit der Timer-Funktion zu. Jedesmal wenn die UserInput-Funktion aufgerufen wird, setzt sie den TimeStamp neu. Danach macht der Timer folgendes: Er vergleicht den aktuellen TimeStamp mit dem Ergebnis der Timer-Funktion, überprüft ob eine bestimmte Zeit überschritten wurde und sperrt gegebenenfalls die Fenster, Buttons, etc.

    So... nun habe ich dir alles notwendige erzählt und jetzt liegt es an dir etwas vernünftiges daraus zu machen.

    Es gibt sicher andere Möglichkeiten... aber leichter sind diese sicher auch nicht. Meine Methode funktioniert ganz ohne Windows-API-Funktionen.

    Gruß,

    StarLord

  12. Wo ist denn da das Problem? Du baust einen Timer ein und fängst Benutzereingaben ab. Jedesmal wenn der Benutzer eine Taste oder eine Maustaste drückt oder den Mauszeiger bewegt setzt du den Timer zurück. Wenn der Timer dann einen angegebenen Wert überschreitet sperrst du einfach die Fenster und die Funktionen (damit Tools wie TheCustomizer nicht einfach die Fenster bzw Buttons aktivieren). Programmieren musst du es schon selbst.

    Gruß,

    StarLord

  13. Es reicht voll und ganz dein Problem 1. zu posten, du wirst deswegen auch nicht mehr Antworten bekommen.

    Vielleicht hilft dir das weiter:

    
    Private Sub Form_Load()
    
    
      Dim Entry, i
    
    
      MSFlexGrid1.Cols = 3
    
    
      For i = 0 To 9
    
        Entry = "Zeile " & i & Chr(9) & "Zelle ( 1/ " & i & ")" & Chr(9) & "Zelle ( 2/ " & i & ")"
    
        MSFlexGrid1.AddItem Entry, i + 1 ' Add entry.
    
      Next i
    
    
       ' Wähle Zelle aus (3. Zeile, 2. Spalte)
    
       MSFlexGrid1.Col = 1
    
       MSFlexGrid1.Row = 2
    
    
       ' Text auslesen
    
       Me.Caption = MSFlexGrid1.Text
    
     End Sub
    
    
    Private Sub MSFlexGrid1_Click()
    
    
       ' Text der vom Benutzer markierten Zelle auslesen
    
       Me.Caption = MSFlexGrid1.Text
    
    End Sub
    
    

  14. Original geschrieben von maddin

    ich habe da ein kleines Problem mit den Funktionen FindFirstFile und FindNextFile. Das Problem ist, das diese Funktionen denken, das der Buchstabe 'Z' vor dem 'Ü' kommt.

    Das ist schon in Ordnung so. Auch wenn Windows Umlaute und Sonderzeichen unterstützt sollte man sie als Datei- bzw Verzeichnisnamen nicht verwenden. Beispiel: statt "Übersicht" solltest du "Uebersicht" benutzen

    Original geschrieben von maddin

    Kann man die Reihenfolge irgendwie ändern ?

    Das kann man (so weit ich weiß) nicht.

    Gruß,

    StarLord

  15. Original geschrieben von Klotzkopp

    Schon mal was davon gehört, dass nach dem if-Block nicht unbedingt Schluss sein muss?

    Wenn er da abbrechen will? Warum sagst du MIR das? Er wollte eine Antwort und die hatte er auch bekommen.

    Original geschrieben von Klotzkopp

    Bisschen freundlicher geht auch ;)

    Nö, sicher nicht. Am liebsten würd ich nur noch "man MSDN-Hilfe" posten. Ihr Moderatoren müsst echt viel Geduld haben...

    Original geschrieben von Klotzkopp

    @Bully2000:

    Mit break kommst Du nur aus do-, while- und if-Schleifen sowie aus switch-Blöcken raus.

    Dass es keine If-Schleifen gibt hast du ja gott sei dank schon bemerkt. Aber wie kommst du darauf dass man eine if-Abfrage mit break beenden kann? Ist das ein neues Cmurksmurks.net Feature? ;-)

    Gruß,

    StarLord

  16. Original geschrieben von bully2000

    In dem zusammenhang funktioniert break nicht:

    quellcode

    quellcode

    dumdidum

    cin>>a;

    if(a==1)

    {

    break;

    }

    Danke für die Tipps:D

    Warum sind hier alle zu faul mal die Hilfe des Compilers aufzurufen und nach "break" zu suchen? Da ich deine Faulheit nicht auch noch unterstützen will sag ich nur soviel: Schon mal was von "return" gehört?

    Gruß,

    StarLord

  17. Original geschrieben von Feivel

    Spielt doch keine Rolle, Variant behandelt Stringtypen genauso wie eine Stringvariable. Wenn du Option Explicit aus hast und den Datentyp nicht mit angibst ist eh alles von Typ Variant. Habe Variant genommen da ich auf ein Objekt als Rückgabewert gefasst sein wollte.

    Ich verstehe dein Problem dabei immer noch nicht. Wo hatte ich eine Variable vom Typ Variant verwendet? Wo hatte ich eine Variable vom Typ String verwendet? Es geht auch ohne.

    Hier mal ein Auszug aus der Hilfe:

    Dir Function

    Returns a String representing the name of a file, directory, or folder that matches a specified pattern or file attribute, or the volume label of a drive.

    Man beachte auch das Beispiel aus der Hilfe:

    
    Dim MyFile, MyPath, MyName
    
    ' Returns "WIN.INI"  if it exists.
    
    MyFile = Dir("C:\WINDOWS\WIN.INI")   
    
    
    ' Returns filename with specified extension. If more than one *.ini
    
    ' file exists, the first file found is returned.
    
    MyFile = Dir("C:\WINDOWS\*.INI")
    
    
    ' Call Dir again without arguments to return the next *.INI file in the 
    
    ' same directory.
    
    MyFile = Dir
    
    
    ' Return first *.TXT file with a set hidden attribute.
    
    MyFile = Dir("*.TXT", vbHidden)
    
    
    ' Display the names in C:\ that represent directories.
    
    MyPath = "c:\"   ' Set the path.
    
    MyName = Dir(MyPath, vbDirectory)   ' Retrieve the first entry.
    
    Do While MyName <> ""   ' Start the loop.
    
       ' Ignore the current directory and the encompassing directory.
    
       If MyName <> "." And MyName <> ".." Then
    
          ' Use bitwise comparison to make sure MyName is a directory.
    
          If (GetAttr(MyPath & MyName) And vbDirectory) = vbDirectory Then
    
             Debug.Print MyName   ' Display entry only if it
    
          End If   ' it represents a directory.
    
       End If
    
       MyName = Dir   ' Get next entry.
    
    Loop

    Dort steht eindeutig dass Dir einen String zurückliefert. Was willst du also sändig mit deinem Variant?

    Original geschrieben von Feivel

    Ich habe beides getest, VB. net & 6.0. Es klappt bei beiden nicht.

    Ich denke vielmehr dass du irgendeinen Verweis in dein Projekt eingebunden hast denn ich nicht drin habe.

    Hatte ich nicht. Ich hatte keinerlei Module eingebunden noch sonstige veränderungen vorgenommen. Kann es sein dass es nicht funktioniert weil ich statt "Tips.txt" "Tips.txt2" geschrieben hatte? Möglicherweise funktioniert es auch (wiedermal) nur unter Win9x? In der Hilfe dazu steht leider keine Angabe zu den Betriebssystemen... typisch MicroSchrott.

    Original geschrieben von Feivel

    Ansonsten geschehen halt doch noch Wunder. Kannst ja mal testen und dich melden, eilt aber nicht, hab es mit dem Errorhandler gelöst.

    Das ist auch eine Möglichkeit... einfach CreateFile, testen ob der Handle in Ordnung ist und wenn ja CloseHandle. Aber es gibt immer viele Wege nach Rom.

    Gruß,

    StarLord

  18. Original geschrieben von Feivel

    Also, der Code stimmt nicht, da wird immer nur der Else-Zeig durchlaufen.

    Warum nicht, ich hatte ihn mehrmals mit Erfolg getestet.

    Original geschrieben von Feivel

    Hier mein Code für das Bespiel :

    If Dir("C:\Programme\zubehör\cis.txt", vbNormal) <> "" Then

    MsgBox ("Der Pfad stimmt")

    Else

    MsgBox ("Der Pfad stimmt NICHT")

    End If

    Kannst du mir mal verraten was an deinem Code anders ist, außer dass du die MessageBox-Funktion anders aufrufst? Ich verwende übrigens VB 6.0, verwendest du VB.NET oder wie das neue heißt?

    Original geschrieben von Feivel

    Auch die Zuweisung an eine Varable von Typ Variant bleibt ohne Ergebnis

    (kein Wert in Variable)

    Was willst du mir mit diesem Satz sagen? Die Dir-Funktion liefert bei der von mir verwendeten Methode einen String zurück, keinen Variant. Ich werde es aber nochmals bei Gelegenheit überprüfen.

    Gruß,

    StarLord

  19. Man nehme etwas Wasser, Hühnerbrühe, ein paar Gewürze und einen guten Rotwein. Man bringe es zum Kochen und gibt eine Putenbrust hinzu, danach das ganze bei ca. 90°C (nicht kochen lassen!) 1/2 Stunde ziehen lassen. Man nimmt dann die Putenbrust heraus und reduziert den Rest. Heraus kommt eine wohlschmeckende Brühe mit der man jede Schwiegrmutter um den kleinen Finger wickelt... oh, das hat wohl mit VB nix zu tun, oder?

    Was ich damit eigentlich meinte: Kannst du mir ein Problem etwas genauer erklären? Programme reduziert man nämlich nicht.

    Gruß,

    StarLord

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...