Buchempfehlung
Windows System Programming
Windows System Programming
Das Kompendium liefert viele interessante Informationen zur Windows-Programmierung auf Englisch. [Mehr Infos...]
FreeBASIC-Chat
Es sind Benutzer im FreeBASIC-Chat online.
(Stand:  )
FreeBASIC bei Twitter
Twitter FreeBASIC-Nachrichten jetzt auch über Twitter erhalten. Follow us!

Code-Beispiel

Code-Beispiele » System

Schnittstellen ermitteln

Lizenz:Erster Autor:Letzte Bearbeitung:
GPLRedakteurytwinky 10.12.2007

Die Adressen der Schnittstellen zu ermitteln ist in FreeBASIC nicht so ohne Weiteres möglich.
Sicherlich läßt sich per Windows-Api oder per WMI allerhand rausfinden, doch was ist mit
denen, die sich weder mit dem Einen noch dem Anderen auskennen?
Es wäre zu einfach, in einer anderen Sprache ein Programm zu schreiben, das dann die nötigen
Angaben liefert. Außerdem müßte das Programm ja auch immer mitgegeben werden..
Warum also nicht ein Programm benutzen, das jeder Windows-Benutzer hat?
Die Rede ist hier von Debug.Exe, das im Windows-System-Verzeichnis schlummert xD
Es ist auf jedem Windows-Rechner vorhanden(mag sein, daß es das auf vista nicht mehr gibt)
und kann ohne Probleme auf den Systembereich von Windows zugreifen.
Kenntnisse in Ein- und Ausgabeumleitung sind nicht unbedingt erforderlich, aber äußerst
hilfreich, um zu verstehen, was das Programm macht:

'AnzeigeCheck:|Il1 sind Alt-0124, Großes i, kleines L, Eins „ä”öüáߎę֚Üñ±¸©ø°
Const Author="SchnittstellenAdressen.Bas v0182b ¸2007 by ytwinky, MD"
'linux-Benutzer brauchen dies Programm nicht ;-))
'..und ob es Debug.Exe noch bei vista gibt, intreressiert mich nicht ^^
Dim As String Deb=Environ("Tmp") &"\deb", Adr, s 'in %Tmp% zu speicherrn sollte erlaubt sein
Dim As uByte i, j, DebFile=FreeFile
Dim As Integer ComAdr(1 To 4), LptAdr(1 To 4)

Open Deb &".in" For Binary As #DebFile
    Print #DebFile, !"d40:00 F\r\nq\r\n" 'Ab &h400 16Bytes ausgeben und fertich..
Close #DebFile
Shell "Debug.exe <" &Deb &".in" &" >" &Deb &".out"
Kill Deb &".in" 'Nicht mehr benötigte Datei löschen

Open Deb &".out" For Input As #DebFile
    Do While Not Eof(DebFile)
        Input #DebFile, s
        If InStr(s, "0040:0000") Then Adr=Mid(s, 12, 47)
    Loop
Close #DebFile
Kill Deb &".out" 'Nicht mehr benötigte Datei löschen

s=Author &!"\n(alle Adressen hexadezimal)\nSerielle Schnittstellen:\n"
'?"<" &Adr &">" 'bei Interesse das erste Remzeichen entfernen
For i=3 To 21 Step 6 'Adressen der seriellen Schnittstellen ermitteln
    j=i\6+1
    ComAdr(j)=Val("&h" &Chr(Adr[i], Adr[i+1], Adr[i-3], Adr[i-2]))
    s+="Com" &j &": " & Hex(ComAdr(j),4) &!"\n"
Next
s+=!"\nParallele Schnittstellen:\n"
For i=27 To 45 Step 6 'Adressen der parallelen Schnittstellen ermitteln
    j=i\6-3
    LptAdr(j)=Val("&h" &Chr(Adr[i], Adr[i+1], Adr[i-3], Adr[i-2]))
    s+="Lpt" &(j) &": " & Hex(LptAdr(j), 4) &!"\n"
Next
Print s &!"(Alle Angaben ohne Gewehr..^^)\nEniki..";
Sleep
End

Sicherlich ließe sich auch der Zustand der Shift-Tasten o.ä. so aus lesen, dies
erscheint jedoch sehr umständlich, wenn man bedenkt, daß dieser ganz Aufwand für ein
einziges Byte betrieben wird. Zumal diese Information ja auch noch relativ zügig zur
Verfügung stehen muß.
In der Regel ändern sich die Schnittstellen zur Laufzeit des Programms nicht und damit
läßt sich dieser Aufwand rechtfertigen ;-))
Gruß
ytwinky


Zusätzliche Informationen und Funktionen
  • Das Code-Beispiel wurde am 10.12.2007 von Redakteurytwinky angelegt.
  • Die aktuellste Version wurde am 10.12.2007 von Redakteurytwinky gespeichert.
  Bearbeiten Bearbeiten  

  Versionen Versionen