Seite 2 von 3

Verfasst: 23.01.2006 16:44
von DarkDragon
Init-, DeInit- Funktionen vergessen.

Verfasst: 23.01.2006 16:53
von Tsuki-Namida
DarkDragon hat geschrieben:Init-, DeInit- Funktionen vergessen.
init habe ich ja schon mal gesehen.... aber als variabel.... wie meinst du das? was ist init

Verfasst: 23.01.2006 22:13
von Tsuki-Namida
Ich habe jetzt alles durchsucht was mir eingafallen ist zu dem habe ich umher experementiert... nur ich bin auf kein Ergebnis gekommen :(

Verfasst: 24.01.2006 07:59
von DarkDragon

Code: Alles auswählen

InitDesktopPreferences()

;Your Functions

DeInitDesktopPreferences()

Verfasst: 24.01.2006 14:50
von Tsuki-Namida
DarkDragon hat geschrieben:

Code: Alles auswählen

InitDesktopPreferences()

;Your Functions

DeInitDesktopPreferences()
Okay ich habe jetzt verstanden das ich die 2 Funktionen extra rufen muss also erst InitDesktopPreferences() und nam meinem Belibigen befehl DeInitDesktopPreferences()

Aber ich verstehe jetzt nicht warum das gemacht werden muss... gut ich werde es machen aber warum ist das notwendig? könntest du mir das bitte erklären?

[EDIT]
Eine fehler mendung kommt nun nicht mehr aber das Hintergrundbild Wechelt dennoch nicht...

Code: Alles auswählen

  InitDesktopPreferences()
  SetWallpaper(Neu.s)
  DeInitDesktopPreferences()
Was ist jetzt nicht richtig? Ich habe extra noch auf einem XP system getestet da ich erst dachte das es an win 2k3 liegt....

Verfasst: 24.01.2006 15:08
von Kiffi
> aber warum ist das notwendig?

naja, Du rufst beispielsweise die Prozedur [c]SetWallpaper()[/c] auf. Darin befindet
sich die Sequenz [c]CallFunction(DesktopPreferences_Lib, [...][/c]. Es wird also eine
Funktion mit der Adresse aufgerufen, die in der Variable
[c]DesktopPreferences_Lib[/c] steht.

Wenn Du nun [c]InitDesktopPreferences()[/c] zuvor nicht aufrufst, dann wird die
Variable [c]DesktopPreferences_Lib[/c] nicht mit dem korrekten Wert gefüllt. Somit
geht dann auch der Aufruf [c]CallFunction()[/c] unweigerlich in die Hose.

[c]DeInitDesktopPreferences()[/c] rufst Du nach Deinen Desktop-Aktivitäten auf,
damit die DLL, die in [c]InitDesktopPreferences()[/c] geöffnet wurde, korrekt
wieder geschlossen wird. Das ist quasi eine Aufräumroutine.

Grüße ... Kiffi

Verfasst: 24.01.2006 15:17
von Tsuki-Namida
Danke kiffi :)

Jetzt nur naoch das Proplem das, dass Wallpaper nicht dennoch nicht ändert...

[Edit]
So ich musste eben festestellen das das Wallpaper gesetzt wurde aber nicht korreckt.
Ich habe folgendes gemacht.
Ich habe die Eigenschaften auf dem Desktop aufgerufen und musste in der Vorschau für das Desktop Theme gesehen das kein Hintergrundbild mehr da ist.....
Als ich in der Klapkarten auf Desktop Geklickt habe ws das im Debug angezeigte bild ausgewählt. das heist das, dass Problem woanderst liegen muss.... aber wo? kann es sein das es an einer *.jpg Grafik liegt? wenn ja wie kann ich das ändern bzw. lösen
[Edit End]

[Edit 2]

Also geändert ist es nun doch -_- nur es wird auf dem Desktop nicht aktualisiert....
[Edit2 End]

Verfasst: 24.01.2006 15:31
von Kiffi
> kann es sein das es an einer *.jpg Grafik liegt?

kann sein. Wenn Du in Deinen Einstellungen den Active-Desktop
ausgeschaltet hast, wird eine jpg-Grafik nicht angezeigt.

Aber egal, ob jpg- oder bmp-Grafik: Du änderst mit Deinem Code ja
lediglich einen Eintrag in der Registry. Danach muss auf jeden Fall noch
eine Nachricht an Windows gesendet werden, damit veranlasst wird, dass
das neu eingetragene Bild auch auf dem Desktop angezeigt wird.
Momentan weiss ich aber nicht, wie man das macht.

Mit folgender Anweisung kannst Du das Hintergrundbild mit einer Bitmap
ad hoc ändern:

Code: Alles auswählen

SystemParametersInfo_(#SPI_SETDESKWALLPAPER, 0, FileName$, #SPIF_UPDATEINIFILE)
Grüße ... Kiffi

Verfasst: 24.01.2006 16:11
von Tsuki-Namida
naja aber das heist das ich die meldung an das system aufjedenfall senden muss egal welches Bildformat ich nutze....

Kennt jemand den befehl und weis jemand wu man den Befehl finden kann?

Verfasst: 24.01.2006 18:49
von Tsuki-Namida
So Hier noch mal den kompletten Code:

Code: Alles auswählen

IncludeFile "Desktop.pb"
Procedure.s GetExePath()
  Prg.s = Space(#MAX_PATH)
  GetModuleFileName_(GetModuleHandle_(0), @Prg, #MAX_PATH)
  Prg = GetPathPart(Prg)
  If (FindString(prg,"\PureBasic\Compilers\", 1))
    Prg.s = Space(#MAX_PATH)
    GetCurrentDirectory_(#MAX_PATH,@Prg)
  EndIf
If Right(Prg, 1) <> "\" : Prg + "\" : EndIf
  ProcedureReturn Prg
  teste$ = Prg.s
EndProcedure

If OpenFile(0, GetExePath() + "Setting.conf")
  IMG$ = ReadString()
  Random$ = ReadString()
  RandomTest$ = ReadString()
  CloseFile(0)
Else
  MessageRequester("Information","Keine Configuration voranden!",#PB_MessageRequester_Ok)
  RunProgram(Run$,"","",0)
  End
EndIf
If Random$ = RandomTest$
  ExamineDirectory(50, IMG$, "*.jpg")
  Debug NextDirectoryEntry()
  While NextDirectoryEntry() = 1
    Anzahl.l + 1
    Debug Anzahl.l
    Debug DirectoryEntryName()
  Wend
  z = Random(Anzahl)
  ;ExamineDirectory(50, IMG$, "*.jpg")
  If Anzahl = 0
    Anzahl = 1
  EndIf
  ;ExamineDirectory(50, IMG$, "*.jpg")
  For k = 0 To z
    Neu.s = IMG$ + DirectoryEntryName()
    Debug Neu.s
    Debug z
  Next
  Debug z
  Debug "Neues Bild: " + Neu.s

  InitDesktopPreferences()
  SetWallpaper(Neu.s)
  DeInitDesktopPreferences()
  CreateFile(0,GetExePath() + "Setting.conf")
  WriteStringN(IMG$)
  WriteStringN(Random$)
  WriteStringN("1")
  CloseFile(0)
Else
  Debug RandomTest$
  Debug Val(RandomTest$)
  Radndom.l = Val(RandomTest$)
  Radndom.l + 1
  RandomNeu$ = Str(Radndom.l)
  Debug RandomNeu$
  CreateFile(0,GetExePath() + "Setting.conf")
  WriteStringN(IMG$)
  WriteStringN(Random$)
  WriteStringN(RandomNeu$)
  CloseFile(0)
EndIf
Hier die Desktop.pb:

Code: Alles auswählen

Procedure InitDesktopPreferences()
  Shared DesktopPreferences_Lib
  DesktopPreferences_Lib = OpenLibrary(#PB_Any, "SHLWAPI.DLL")
  If DesktopPreferences_Lib = 0
    MessageRequester("ERROR", "Couldn't open SHLWAPI.DLL")
  EndIf
EndProcedure

Procedure SetScreensaver(Val.s)
  Shared DesktopPreferences_Lib
  ProcedureReturn CallFunction(DesktopPreferences_Lib, "SHSetValueA", #HKEY_CURRENT_USER, "Control Panel\Desktop", "SCRNSAVE.EXE", #REG_SZ, Val, Len(Val)+1)
EndProcedure

Procedure SetScreensaverActive(Val.l)
  Shared DesktopPreferences_Lib
  ProcedureReturn CallFunction(DesktopPreferences_Lib, "SHSetValueA", #HKEY_CURRENT_USER, "Control Panel\Desktop", "ScreenSaveActive", #REG_SZ, Str(Val), Len(Str(Val))+1)
EndProcedure

Procedure SetScreensaverTimeout(Val.l)
  Shared DesktopPreferences_Lib
  ProcedureReturn CallFunction(DesktopPreferences_Lib, "SHSetValueA", #HKEY_CURRENT_USER, "Control Panel\Desktop", "ScreenSaveTimeOut", #REG_SZ, Str(Val), Len(Str(Val))+1)
EndProcedure

Procedure SetWallpaper(Val.s)
  Shared DesktopPreferences_Lib
  ProcedureReturn CallFunction(DesktopPreferences_Lib, "SHSetValueA", #HKEY_CURRENT_USER, "Control Panel\Desktop", "Wallpaper", #REG_SZ, Val, Len(Val)+1)
EndProcedure

Procedure SetMouseSpeed(Val.l) ;Standard here: 2
  Shared DesktopPreferences_Lib
  ProcedureReturn CallFunction(DesktopPreferences_Lib, "SHSetValueA", #HKEY_CURRENT_USER, "Control Panel\Mouse", "MouseSpeed", #REG_SZ, Str(Val), Len(Str(Val))+1)
EndProcedure

Procedure SetDoubleClickSpeed(Val.l) ;Standard here: 458
  Shared DesktopPreferences_Lib
  ProcedureReturn CallFunction(DesktopPreferences_Lib, "SHSetValueA", #HKEY_CURRENT_USER, "Control Panel\Mouse", "DoubleClickSpeed", #REG_SZ, Str(Val), Len(Str(Val))+1)
EndProcedure

Procedure SwapMouseButtons(Val.l)
  Shared DesktopPreferences_Lib
  ProcedureReturn CallFunction(DesktopPreferences_Lib, "SHSetValueA", #HKEY_CURRENT_USER, "Control Panel\Mouse", "SwapMouseButtons", #REG_SZ, Str(Val), Len(Str(Val))+1)
EndProcedure

Procedure SetKeyboardSpeed(Val.l) ;Standard here: 31
  Shared DesktopPreferences_Lib
  ProcedureReturn CallFunction(DesktopPreferences_Lib, "SHSetValueA", #HKEY_CURRENT_USER, "Control Panel\Keyboard", "KeyboardSpeed", #REG_SZ, Str(Val), Len(Str(Val))+1)
EndProcedure

Procedure SetKeyboardDelay(Val.l) ;Standard here: 1
  Shared DesktopPreferences_Lib
  ProcedureReturn CallFunction(DesktopPreferences_Lib, "SHSetValueA", #HKEY_CURRENT_USER, "Control Panel\Keyboard", "KeyboardDelay", #REG_SZ, Str(Val), Len(Str(Val))+1)
EndProcedure

Procedure DeInitDesktopPreferences()
  Shared DesktopPreferences_Lib
  CloseLibrary(DesktopPreferences_Lib)
  DesktopPreferences_Lib = 0
EndProcedure

InitDesktopPreferences()

;Your Functions

DeInitDesktopPreferences()