Seite 39 von 43

Re: WinAPI Library (Snippets) (1.052)

Verfasst: 02.01.2016 17:09
von RSBasic
Danke für deinen nützlichen Code. :allright:
Sowas ähnliches gibt es bereits: http://www.rsbasic.de/aktualisierung/wi ... mitteln.pb
Nur nicht als Modul. Deinen Code kann ich aber trotzdem hinzufügen.

Re: WinAPI Library (Snippets) (1.077)

Verfasst: 04.01.2016 00:50
von RSBasic

Re: WinAPI Library (Snippets) (1.077)

Verfasst: 06.03.2016 14:52
von Bisonte
Kurze Frage : Geht nur mir das so, oder ist der Server unter www.rsbasic.de nicht mehr verfügbar ?

Webseite lässt sich nicht öffnen (Verbindung zum Server fehlgeschlagen)
WinAPILibrary lässt sich nicht aktualisieren (Verbindungsproblem zum Server)

Re: WinAPI Library (Snippets) (1.077)

Verfasst: 06.03.2016 14:57
von Kiffi
ja, scheint momentan offline zu sein (evtl. Wartungsarbeiten?).

http://www.downforeveryoneorjustme.com/

Grüße ... Peter

Re: WinAPI Library (Snippets) (1.077)

Verfasst: 06.03.2016 15:14
von RSBasic
Ja, die Seite ist leider aus unbekanntem Grund nicht erreichbar. Eine E-Mail habe ich bereits geschrieben. Telefonisch sind sie leider nur Mo-Fr erreichbar. :(

Re: WinAPI Library (Snippets) (1.077)

Verfasst: 06.03.2016 16:11
von RSBasic
Die Seite geht jetzt wieder.

Re: WinAPI Library (Snippets) (1.077)

Verfasst: 14.01.2017 19:25
von Rudi
Weil ich das grade noch hier rumliegen habe: Registry auf Veränderung überwachen (RegNotifyChangeKeyValue_):

Code: Alles auswählen

EnableExplicit

#REG_NOTIFY_ALL = #REG_NOTIFY_CHANGE_LAST_SET|#REG_NOTIFY_CHANGE_ATTRIBUTES|#REG_NOTIFY_CHANGE_NAME|#REG_NOTIFY_CHANGE_SECURITY

Define Key, hEvent, Error

Procedure.s LastError(Error)
	Protected *MemoryID = AllocateMemory(#MAX_PATH), Message$
	
	If *MemoryID
		If FormatMessage_(#FORMAT_MESSAGE_FROM_SYSTEM, #Null, Error, #Null, *MemoryID, #MAX_PATH, #Null)
			Message$ = PeekS(*MemoryID)
		EndIf
		FreeMemory(*MemoryID)
	EndIf
	
	ProcedureReturn Message$
EndProcedure

MessageRequester("", "Eine Änderung unter HKEY_CURRENT_USER / AppEvents vornehmen!")

Repeat
	If RegOpenKeyEx_(#HKEY_CURRENT_USER, "AppEvents", #Null, #KEY_NOTIFY, @Key) = #ERROR_SUCCESS
		hEvent = CreateEvent_(#Null, #True, #False, #Null)
		If hEvent
			Error = RegNotifyChangeKeyValue_(Key, #True, #REG_NOTIFY_ALL, hEvent, #True)
			If Error = #ERROR_SUCCESS
				If WaitForSingleObject_(hEvent, #INFINITE) <> #WAIT_FAILED
					Debug "Registry wurde unter HKEY_CURRENT_USER / AppEvents verändert!"
				EndIf
			Else
				LastError(Error)
			EndIf
			CloseHandle_(hEvent)
		Else
			LastError(GetLastError_())
		EndIf
		RegCloseKey_(Key)
	Else
		LastError(GetLastError_())
	EndIf
	
	Delay(1000)
ForEver
MS-Link: https://msdn.microsoft.com/en-us/librar ... 85%29.aspx

Re: WinAPI Library (Snippets) (1.077)

Verfasst: 26.04.2017 13:23
von tft
Hallo,

an dieser Stelle eine herzliches danke. Deinen Mühen haben mir einiges an Arbeit gespart.

Aber hier habe ich ein Problem. Das sollte eigentlich Funktionieren aber bei mir gibts eine
Fehlermeldung.

Code: Alles auswählen

;Autor: nco2k, WeePe

EnableExplicit

Procedure.s sGetXPCDKey()
  Protected *bDigitalProductID
  Protected *bProductKey.byte
  Protected ilByte.l
  Protected lDataLen.l
  Protected hKey.l
  Protected Byte.l
  Protected nCur.l
  Protected sCDKey.s
  Protected ilKeyByte.l
  
  *bDigitalProductID = AllocateMemory(164)
  *bProductKey.byte = AllocateMemory(15)
  ilByte.l
  lDataLen.l
  hKey.l
  
  If RegOpenKey_(#HKEY_LOCAL_MACHINE, "SOFTWARE\MICROSOFT\Windows NT\CurrentVersion", @hKey) = #ERROR_SUCCESS
    lDataLen = 164
 
    If RegQueryValueEx_(hKey, "DigitalProductId", 0, "REG_BINARY", *bDigitalProductID, @lDataLen) = #ERROR_SUCCESS
     
      For ilByte = 52 To 66
        Byte = PeekB(*bDigitalProductID + ilByte) & 255
        PokeB(*bProductKey + ilByte - 52, Byte)
      Next ilByte
      
      RegCloseKey_(hKey)
      
    Else
      Debug("Data nicht gefunden")
      RegCloseKey_(hKey)
      ProcedureReturn ""
    EndIf
  Else
    Debug("Schlüssel nicht gefunden")
    ProcedureReturn ""
  EndIf
  
  Debug("Erzeuge String")
  
  Dim bKeyChars.l(23)
  
  bKeyChars(0) = Asc("B")
  bKeyChars(1) = Asc("C")
  bKeyChars(2) = Asc("D")
  bKeyChars(3) = Asc("F")
  bKeyChars(4) = Asc("G")
  bKeyChars(5) = Asc("H")
  bKeyChars(6) = Asc("J")
  bKeyChars(7) = Asc("K")
  bKeyChars(8) = Asc("M")
  bKeyChars(9) = Asc("P")
  bKeyChars(10) = Asc("Q")
  bKeyChars(11) = Asc("R")
  bKeyChars(12) = Asc("T")
  bKeyChars(13) = Asc("V")
  bKeyChars(14) = Asc("W")
  bKeyChars(15) = Asc("X")
  bKeyChars(16) = Asc("Y")
  bKeyChars(17) = Asc("2")
  bKeyChars(18) = Asc("3")
  bKeyChars(19) = Asc("4")
  bKeyChars(20) = Asc("6")
  bKeyChars(21) = Asc("7")
  bKeyChars(22) = Asc("8")
  bKeyChars(23) = Asc("9")
  nCur.l
  sCDKey.s
  ilKeyByte.l
  ilByte.l
  Byte.b
  For ilByte = 24 To 0 Step -1
    nCur = 0
    For ilKeyByte = 14 To 0 Step -1
      Byte = PeekB(*bProductKey + ilKeyByte) & 255
      nCur = ((nCur & 255) * 256) ! Byte
      PokeB(*bProductKey + ilKeyByte, (Int(nCur / 24)))
      nCur = nCur % 24
    Next ilKeyByte
    sCDKey = Chr(bKeyChars(nCur)) + sCDKey
    If ilByte % 5 = 0 And ilByte <> 0
      sCDKey = "-" + sCDKey
    EndIf
  Next ilByte
  
  ProcedureReturn sCDKey
EndProcedure

MessageRequester("","Windows-Seriennummer: "+sGetXPCDKey(),0)
bis auf die Debug Ausgabe entspricht es der Vorlage aus der Lib.
Der Schlüssel und die daten sind in der Registrie vorhanden. Habe ich mit RegEd
geprüft.

Gruss TFT

Re: WinAPI Library (Snippets) (1.077)

Verfasst: 26.04.2017 13:56
von RSBasic
Hallo tft,

meinst du diese Fehlermeldng:
Zeile 76: Variable bereits mit einem anderen Typ deklariert: Byte.
Bezüglich dieser Zeile:

Code: Alles auswählen

Byte.b
PB meckert, weil die Variable oben als Datentyp "Long" definiert wurde und in der Zeile 76 "Byte".
Im Originalcode lautet die Zeile aber:

Code: Alles auswählen

Byte.l
Und damit funktioniert es. Hast du die Zeile in deinem Editor nachträglich geändert? Wenn nicht, dann war es vielleicht mal vor langer Zeit falsch drin und bei dir wird noch eine ältere PB-Version im Browser angezeigt.
Oder meinst du eine andere Fehlermeldung?

Re: WinAPI Library (Snippets) (1.077)

Verfasst: 26.04.2017 14:43
von tft
Hallo,

da habe ich wohl irgendwas probiert ???? aber das ist nicht das Problem

Code: Alles auswählen

If RegQueryValueEx_(hKey, "DigitalProductId", 0, "REG_BINARY", *bDigitalProductID, @lDataLen) = #ERROR_SUCCESS
diese Zeile gebt einen Fehler aus. Die Funktion RegQueryValueEx_ gibt <> #ERROR_SUCCESS zurück. Was zu einem Abruch der
Funktion führt.

Fehler Code 2

Gruss TFT