Autor Thema: Systeminformationen (API)  (Gelesen 8529 mal)

Offline eknori

  • @Notes Preisträger
  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 11.728
  • Geschlecht: Männlich
Systeminformationen (API)
« am: 31.03.02 - 11:56:16 »
Hallo zusammen,

Deepsee hatt in einem früheren Thread einmal nach der Möglichkeit gefragt, Systeminformationen auszulesen.

Ich habe hier einmal eine kleine Klasse zusammengebaut, die folgende Informationen ermittelt

-Werden kleine Schriftarten verwendet
-Ist eine Soundkarte installiert
-Anzahl Farben
-Tastatur Typ
-Anzahl Funktionstasten
-Hostname
-IP Adresse des Host
-aktuelle Bildschirmauflösung
-CPU Takt
-Anzahl Processoren
-Prozessor Typ
-Prozessor Build Level
-Prozessor Revision
-Betriebssystem
-Windows Systemverzeichnis
-Notes Verzeichnis
-Welche COM Ports sind verfügbar

Ich habe die Klasse unter Windows 2000 entwickelt und getestet. Gebt mir doch bitte einmal ein Feedback, wie es unter anderen OS aussieht.

Selbstverständlich sind das noch nicht alle Informationen, die man auslesen kann. Welche Funktionen soll ich noch einbauen ?

http://www.eknori.de/downloads/cSysInfo.zip

eknori
« Letzte Änderung: 01.01.70 - 01:00:00 von 1034200800 »
Egal wie tief man die Messlatte für den menschlichen Verstand auch ansetzt: jeden Tag kommt jemand und marschiert erhobenen Hauptes drunter her!

Offline Christopher

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.060
  • Geschlecht: Männlich
  • Dumm ist der, der dummes tut.
Re: Systeminformationen (API)
« Antwort #1 am: 31.03.02 - 13:55:03 »
Hallo Ulrich,

Hut ab wirklich gute arbeit gefällt mir gut. Ich suche noch die möglickkeit über API WIN200 bzw. XP zu beenden.

Hast Du noch was im Zauberkasten?

Viele Grüße

Osterhasi

« Letzte Änderung: 01.01.70 - 01:00:00 von 1034200800 »
Client & Server R 5.011
Principal Certified Lotus Professional R5 System Administration
Microsoft Certified Systems Engineer 2000
Microsoft Certified Systems Administrator 2000
Microsoft Certified Systems Administrator 2003
Microsoft Certified Systems Engineer 2003

Offline eknori

  • @Notes Preisträger
  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 11.728
  • Geschlecht: Männlich
Re: Systeminformationen (API)
« Antwort #2 am: 31.03.02 - 14:10:58 »
Hallo Christopher,

das Thema hatten wir ja schon mal. Die "alten" API Calls funktionieren leider nicht in W2K.
Leider habe ich im Moment da nix auf Lager ( selbst rundll32.exe user.exe, ExitWindows funktioniert nicht unter 2000).
Aber ich bleibe dran.


eknori.

« Letzte Änderung: 01.01.70 - 01:00:00 von 1034200800 »
Egal wie tief man die Messlatte für den menschlichen Verstand auch ansetzt: jeden Tag kommt jemand und marschiert erhobenen Hauptes drunter her!

Offline NotesBug

  • Aktives Mitglied
  • ***
  • Beiträge: 129
  • Geschlecht: Männlich
  • Accept it, it is Notes !
Re: Systeminformationen (API)
« Antwort #3 am: 02.04.02 - 09:40:03 »
Ich habe zwar keine Ahnung von API Calls, aber beenden kann man alle MS Betriebssysteme sehr gut mit shutdown.exe aus dem Resource Kit.
Wenn man eine kleine Batch Datei schreibt, kann man da auch mit 'load shutdown.bat' sehr einfach aus der entfernung einen Server komplett beenden.

Wenn man adminrechte auf dem entfernten Rechner hat, muß man die Datei nicht einmal dort ablegen, sondern man kann aus der Entfernung den Rechner anschiessen.

Hat man keine Adminrechte auf dem NT Rechner, aber Rechte auf dem Notes server, kann man mit einem Server Agenten dort zwei Dateien (shutdown.exe und die Batch Datei)ablegen und dann über die Konsole oder einen weiteren Agenten die batch ausführen und den Server abschiessen. (Das funktioniert deshalb so gut, weil der Notes Server meistens mit System Rechten als Dienst gestartet wird.)
« Letzte Änderung: 01.01.70 - 01:00:00 von 1034200800 »

Offline eknori

  • @Notes Preisträger
  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 11.728
  • Geschlecht: Männlich
Re: Systeminformationen (API)
« Antwort #4 am: 02.04.02 - 11:33:47 »
Hallo NotesBug,

sicher, hast recht. Kann man auch damit lösen. Ich habe da aber einen anderen Ansatz im Sinn. Ich möchte gerne ohne externe Programme auskommen. Das bedeutet wieder einen Zusatzaufwand bei der Softwareverteilung. Zudem weiß man nicht, welche Nebenwirkungen solche zusätzlichen Programme habe; da habe ich das lieber selbst in der Hand.
In meinem Fall ist das auch nur ein theoretischer Ansatz, Christopher hat da Bedarf. Also Christopher, kannst es ja mal mit shutdown.exe  versuchen. Möglicherweise löst das dein Problem mit einfachen Mitteln.

eknori
« Letzte Änderung: 01.01.70 - 01:00:00 von 1034200800 »
Egal wie tief man die Messlatte für den menschlichen Verstand auch ansetzt: jeden Tag kommt jemand und marschiert erhobenen Hauptes drunter her!

Offline manuel

  • Senior Mitglied
  • ****
  • Beiträge: 377
  • Geschlecht: Männlich
  • el pueblo unido
Re: Systeminformationen (API)
« Antwort #5 am: 02.04.02 - 12:02:30 »
Ich hab' da noch was:

Standard-Drucker ermitteln
Code

Private Declare Function GetProfileString Lib "kernel32" _
       Alias "GetProfileStringA" (ByVal lpAppName As String, _
       ByVal lpKeyName As String, ByVal lpDefault As String, _
       ByVal lpReturnedString As String, ByVal nSize As Long) _
       As Long


Private Sub GetStdPrinterName()
 Dim PrinterName$, Driver$, Port$
 Dim Buffer$, r&, X&, Y&
   
   Buffer = Space(8192)
   r = GetProfileString("windows", "Device", "", Buffer, Len(Buffer))
   If r Then
     Buffer = Mid(Buffer, 1, r)
     X = InStr(Buffer, ",")
     PrinterName = Mid(Buffer, 1, X - 1)
     Y = InStr(X + 1, Buffer, ",")
     Driver = Mid(Buffer, X + 1, Y - X - 1)
     Port = Mid(Buffer, Y + 1)
   Else
     PrinterName = "?"
     Driver = "?"
     Port = "?"
   End If
End Sub



oder eine VolumeInformation

Code

Private Declare Function GetVolumeInformation& Lib "kernel32" _
       Alias "GetVolumeInformationA" (ByVal lpRootPathName _
       As String, ByVal pVolumeNameBuffer As String, ByVal _
       nVolumeNameSize As Long, lpVolumeSerialNumber As Long, _
       lpMaximumComponentLength As Long, lpFileSystemFlags As _
       Long, ByVal lpFileSystemNameBuffer As String, ByVal _
       nFileSystemNameSize As Long)

Const MAX_FILENAME_LEN = 256


Public Function SerNum(Drive$) As Long
 Dim No&, S As String * MAX_FILENAME_LEN
   Call GetVolumeInformation(Drive & ":\", S, MAX_FILENAME_LEN, _
                             No, 0&, 0&, S, MAX_FILENAME_LEN)
   SerNum = No
End Function



CD-Fach öffnen/schließen

Code

Private Declare Function mciExecute Lib "winmm.dll" _
          (ByVal lpstrCommand As String) As Long

 ' Laufwerkstür öffnen
 Call mciExecute("Set CDaudio door open")

 ' Laufwerkstür schließen
 Call mciExecute("Set CDaudio door closed")



Dauer seit Anmeldung

Code

Private Declare Function GetTickCount Lib "kernel32" () As Long


 Dim H As Single, M As Single, S As Single, MS As Single
 Dim strH$, strM$, strS$, strMS$
   MS = GetTickCount()
   MS = MS / 1000
   
   H = Int(MS / 3600)
   MS = MS - H * 3600
   M = Int(MS / 60)
   MS = MS - M * 60
   S = Int(MS)
   MS = Int((MS - S) * 10)
   
   strH = CStr(H)
   strM = Format(CStr(M), "##00")
   strS = Format(CStr(S), "##00")
   strMS = CStr(MS)
   'lblTime.Caption = strH & ":" & strM & ":" & strS & ":" & strMS
« Letzte Änderung: 01.01.70 - 01:00:00 von 1034200800 »
V 5.0.2c | Windows 2000

Offline eknori

  • @Notes Preisträger
  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 11.728
  • Geschlecht: Männlich
Re: Systeminformationen (API)
« Antwort #6 am: 02.04.02 - 12:25:46 »
Danke dir. Die Sache mit dem Standarddrucker funktioniert in deinem Fall leider nur unter Win 9x, da Win NT und 2000 die Informationen in der Registry ablegen.
Die VolInformation habe ich bereits implementiert

- Seriennummer
- Volumenname
- FileSystem

des Laufwerks

außerdem habe ich noch Funktionen zur Ermittllung verschiedener Parameterwerte des Arbeitsspeichers eingebaut. Wenn ich die Tests heute noch schaffe, stelle ich die neue Version auf meinen Server.

Wegen der Drucker habe ich noch ein anderes Projekt am Laufen.
Ich bin dabei eine neue Klasse zu schreiben, die es ermöglicht, den Standarddrucker temporär per LS zu wechseln, um z.B. NotesDokumente oder Attachments in das PDF Format umzuwandeln.
Ist aber nicht so einfach, weil, wie schon gesagt, die Infos zum Drucker nicht konsistent über alle Windows Versionen an einer Stelle stehen.
Ist ein ganz schöner Brocken, das kann ich sagen.

eknori
« Letzte Änderung: 01.01.70 - 01:00:00 von 1034200800 »
Egal wie tief man die Messlatte für den menschlichen Verstand auch ansetzt: jeden Tag kommt jemand und marschiert erhobenen Hauptes drunter her!

Offline eknori

  • @Notes Preisträger
  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 11.728
  • Geschlecht: Männlich
Re: Systeminformationen (API)
« Antwort #7 am: 02.04.02 - 14:22:50 »
@All

habe gerade eine neue Version hochgeladen.

folgende Funktionen sind hinzugekommen.

Grösse des Arbeitsspeichers ermitteln
grösse des virtuellen ASrbeitsspeichers ermitteln
Seriennummer der Festpaltte
Dateisystem
Volume Name der Festplatte

und für Christopher noch die Funktionen
zum

shutdown
reboot
logoff und
poweroff

unter Windows 2000

zusätzlich noche eine Funktion zum Sperren der Workstation ( nur für W2K )

bei der Reboot funktion habe ich im ActionButton der Ansicht eine Sperre eingebaut. (der code ist gnadenlos, daher bitte vorher alle anderen Anwendungen schließen !!! )

probiert es mal aus und gebt mir bitte ein Feedback, ob irgendwelche unbeabsichtigten Fehlermeldungen auftauchen.

bisher bekannte Fehler :

die Funktion zur ermittlung der Soundkarte scheint irgendwie den Stack durcheinander zu bringen. Wenn man dann die IP des Host ermitteln will, crasht Notes.


viel Spaß beim Testen.

eknori
« Letzte Änderung: 01.01.70 - 01:00:00 von 1034200800 »
Egal wie tief man die Messlatte für den menschlichen Verstand auch ansetzt: jeden Tag kommt jemand und marschiert erhobenen Hauptes drunter her!

Offline manuel

  • Senior Mitglied
  • ****
  • Beiträge: 377
  • Geschlecht: Männlich
  • el pueblo unido
Re: Systeminformationen (API)
« Antwort #8 am: 02.04.02 - 14:37:22 »
Ich habe folgende Fehlermeldung bekommen:
Cannot find external name: GETREGISTEREDOWNER


Die Funktion ist auch nirgends deklariert!
« Letzte Änderung: 01.01.70 - 01:00:00 von 1034200800 »
V 5.0.2c | Windows 2000

Offline eknori

  • @Notes Preisträger
  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 11.728
  • Geschlecht: Männlich
Re: Systeminformationen (API)
« Antwort #9 am: 02.04.02 - 14:39:57 »
Stimmt, ist noch in dem AktionButton als Funktionsaufruf enthalten.
Habe ich aber vorerst aus der Klasse verbannt.

Habs nochmal neu hochgeladen
Egal wie tief man die Messlatte für den menschlichen Verstand auch ansetzt: jeden Tag kommt jemand und marschiert erhobenen Hauptes drunter her!

Offline manuel

  • Senior Mitglied
  • ****
  • Beiträge: 377
  • Geschlecht: Männlich
  • el pueblo unido
Re: Systeminformationen (API)
« Antwort #10 am: 02.04.02 - 15:22:19 »
Wie versprochen:

Code

Declare Function InternetGetConnectedState Lib "wininet.dll" (lpSFlags As Long, Byval dwReserved As Long) As Long

Const INTERNET_CONNECTION_LAN = &H2
Const INTERNET_CONNECTION_MODEM = &H1
Const INTERNET_CONNECTION_PROXY = &H4
Const INTERNET_CONNECTION_MODEM_BUSY = &H8



Code

Sub Click(Source As Button)
     Dim icFlags As Long
     
     Call InternetGetConnectedState(icFlags, 0&)
     
     Msgbox Out(icFlags, INTERNET_CONNECTION_LAN), 0, "Verbunden via LAN"
     Msgbox Out(icFlags, INTERNET_CONNECTION_MODEM), 0, "Verbunden via Modem"
     Msgbox Out(icFlags, INTERNET_CONNECTION_PROXY), 0, "Verbunden via Proxy"
     Msgbox Out(icFlags, INTERNET_CONNECTION_MODEM_BUSY), 0, "Modem ist gerade aktiv"
End Sub


Function Out(Byval icFlags&, Byval Flag&) As String
     If Flag And icFlags Then
           Out = "Ja"
     Else
           Out = "Nein"
     End If
End Function
« Letzte Änderung: 01.01.70 - 01:00:00 von 1034200800 »
V 5.0.2c | Windows 2000

Offline eknori

  • @Notes Preisträger
  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 11.728
  • Geschlecht: Männlich
Re: Systeminformationen (API)
« Antwort #11 am: 02.04.02 - 15:24:06 »
Danke dir, werde es gleich mal einbauen
« Letzte Änderung: 01.01.70 - 01:00:00 von 1034200800 »
Egal wie tief man die Messlatte für den menschlichen Verstand auch ansetzt: jeden Tag kommt jemand und marschiert erhobenen Hauptes drunter her!

Offline eknori

  • @Notes Preisträger
  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 11.728
  • Geschlecht: Männlich
Re: Systeminformationen (API)
« Antwort #12 am: 02.04.02 - 15:36:38 »
Habs est mal so als Sub eingebaut; mach morgen noch eine FUnktion daraus
« Letzte Änderung: 01.01.70 - 01:00:00 von 1034200800 »
Egal wie tief man die Messlatte für den menschlichen Verstand auch ansetzt: jeden Tag kommt jemand und marschiert erhobenen Hauptes drunter her!

Offline Silvio

  • Aktives Mitglied
  • ***
  • Beiträge: 113
  • Geschlecht: Männlich
  • für jedes Problem gibt es eine Lösung (W.v.B.)
Re: Systeminformationen (API)
« Antwort #13 am: 19.04.02 - 10:09:06 »
Re: zu Geschrieben am: 02.04.02 um 12:25:46
Ich habe schon ein paar Jahre VB3,4,5 auf dem Buckel, aber den Std-Drucker umschalten per LS habe ich (auch noch) nicht hingekriegt. Wie du möchte ich auch zu PDF umschalten und ein Dok erstellen und wieder zurück. Leider scheitert es daran dass Notes die Info nicht von W2k erhält oder diese selbst nicht verfolgt.
Das einzige was ich nach der Std-Drucker Umstellung in W2k (noch) nicht versucht habe ist den Notes-Client ein weiteres mal zu starten und hoffen das dieser den PDF Drucker anzieht. => Setzt eine eigene Notes.INI vorraus. Benötigt ein wenig mehr Speicher aber sollte funktionieren.
Im schlimmsten Fall musst du die Notes C-API ansprechen.

Silvio
« Letzte Änderung: 01.01.70 - 01:00:00 von 1034200800 »
Gruss aus der Schweiz
Silvio
IBM Certified System Administrator
Lotus Notes and Domino 8.5

Offline eknori

  • @Notes Preisträger
  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 11.728
  • Geschlecht: Männlich
Re: Systeminformationen (API)
« Antwort #14 am: 19.04.02 - 10:16:39 »
Ne ne, das geht schon mit LS und ein bisschen API Programmierung. Die Vorgehensweise ist mir im Prinzip auch schon klar, bin nur leider noch nicht dazu gekommen, das konsequent umzusetzen.

Zum Thema PDF guck doch mal hier

http://www.atnotes.de/cgi-bin/yabb/YaBB.pl?board=002-3;action=display;num=1019112400
Egal wie tief man die Messlatte für den menschlichen Verstand auch ansetzt: jeden Tag kommt jemand und marschiert erhobenen Hauptes drunter her!

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz