Code-Beispiel
Enumerate Ports
Lizenz: | Erster Autor: | Letzte Bearbeitung: |
k. A. | ytwinky | 16.04.2012 |
Zippy hat im englischen Forum einen sehr interessanten Code zur Ermittlung von Geräten geschrieben(s. Linkadresse im Quelltext).
Den habe ich mir mal vorgenommen und 'eingedeutscht', aber diesmal nicht mit meiner bekannten Umlaut-Zeile im Header..
Damit entfällt die Verwendung 'kryptischer' Zeichen im Quellcode.
So könnten z.B. COM-Ports mit der Anweisung:
EnumPorts -n | Find "COM"
angezeigt werden.
Ich habe für die Ausgabe eine Funktion eingefügt, mit der jeder String vor der Ausgabe umgewandelt werden kann.
Da nun aber ein Konsolenfenster bei mir 132 Spalten x 50 Zeilen groß ist, habe ich die Ausgabe etwas geändert..
'Originalauthor:Zippy
'http://www.freebasic.net/forum/viewtopic.php?f=6&t=10615
'2nd code
'"Translation" and modification for german-output: ytwinky, MD
#define KB 1024
'enumerate devices?, Windows only, WINNT forward
#include once "windows.bi"
#include once "win\setupapi.bi"
'
Function Char2Oem(What As String) As String 'needed only on non-english systems
'a function to preserve the functionality of Print..
Dim Char As zString Ptr 'declare two zstring-ptrs which can be used by OemToChar()
Dim Oem As zString Ptr
Var el=Len(What)+1 'the default-type of el is evaluated by var:(obviously) Integer in this case
Char=Allocate(el) 'allocate space, if you want to crash your system remove +1 *rofl*
Oem=cAllocate(el) 'allocate space, if you want to crash your system remove +1 *rofl*
*Char=What 'Set Char=What
CharToOem(Char, Oem) 'now change it..
What=*Oem 'now assign the contents of Oem to What
DeAllocate Oem 'to avoid memory leaks deallocate the variables
Oem=0 'set Oem to 0, to avoid access to the deallocated memory
DeAllocate Char 'reverse order only because it was important in Turbo-Pascal ;-))
Char=0 'set Char to 0, to avoid access to the deallocated memory
Return What 'now return the changed string..
End Function 'well, done ;-))
dim as HDEVINFO hDevInfo
dim as SP_DEVINFO_DATA DeviceInfoData
dim as integer buffersize, LineCounter=0, DataT, i, NoW8=False
dim as string buffer, k=space(KB), s
Select Case lcase(Command(1))
Case "/h", "-h", "/?", "-?", "--hilfe", "--help"
s = !"Enumerate Devices von Zippy\nFür deutsche Ausgabe angepaßt und ergänzt von ytwinky\nAufruf:\n"
s &=!"EnumPorts [[/|-]?|[/|-]n]\nWobei:\n /? nur EINE Möglichkeit ist, diese Hilfe angezeigt zu bekommen..\n"
s &=!" /n nicht bei jeder vollen Seite auf drücken von Enter wartet\n"
Print Char2Oem(s &" (sinnvoll für das Filtern der Ausgabe..)")
End
Case "/n", "-n"
NoW8=True
End Select
'
hDevInfo=SetupDiGetClassDevs(NULL, 0, 0, DIGCF_PRESENT Or DIGCF_ALLCLASSES)
'
if hDevInfo=INVALID_HANDLE_VALUE then
print "SetupDiGet schiefgegangen, Ende bei Tastendruck.."
sleep
End 27
end if
'
DeviceInfoData.cbSize=sizeof(SP_DEVINFO_DATA)
SetupDiEnumDeviceInfo(hDevInfo, i, @DeviceInfoData)
for i=1 to 25000
'
SetLastError(0)
SetupDiEnumDeviceInfo(hDevInfo,i,@DeviceInfoData)
if GetLastError()=ERROR_NO_MORE_ITEMS then exit for
'
buffersize=KB
buffer=k
'
SetupDiGetDeviceRegistryProperty(_
hDevInfo,_
@DeviceInfoData,_
SPDRP_DEVICEDESC,_'SPDRP_FRIENDLYNAME,_
@DataT,_
strptr(buffer),_
buffersize,_
@buffersize)
'
buffer=trim(buffer)
if buffer>"" then
'
s=buffer &" "
LineCounter+=1
'
buffersize=KB
buffer=k
'
SetupDiGetDeviceRegistryProperty(_
hDevInfo,_
@DeviceInfoData,_
SPDRP_FRIENDLYNAME,_ 'SPDRP_DEVICEDESC
@DataT,_
strptr(buffer),_
buffersize,_
@buffersize)
'
buffer=trim(buffer)
if buffer>"" then
s &=buffer &" "
else
s &=Space(LoWord(Width)-Len(s)-2) &"*"
end if
If LoWord(Width)<Len(s) Then LineCounter += 1
Print Char2Oem(s)
If NoW8 Then Continue For
if LineCounter=HiWord(Width)-1 Then
LineCounter=0
Print "::::Pause:::: Weiter mit Enter";
s=""
Do
s=InKey
Sleep 1
Loop Until s=!"\r"
Print s;
EndIf
end if
'
next i
'
print "Erledigt, Ende mit beliebiger Taste..";
If NoW8=False Then GetKey 'beware: NOT will not deliver the desired results..
Print !"\r***EnumPorts-Ende***" &Space(40);
end
Zusätzliche Informationen und Funktionen |
- Das Code-Beispiel wurde am 16.04.2012 von ytwinky angelegt.
- Die aktuellste Version wurde am 16.04.2012 von ytwinky gespeichert.
|
|