Bug ?! Pls Help ^^

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
The_Dark_Zim-.-
Beiträge: 372
Registriert: 18.03.2008 16:53

Bug ?! Pls Help ^^

Beitrag von The_Dark_Zim-.- »

Hey Ho
Habe mir einen WallpaperChanger gemacht :P
Aber irgentwie spinnt der unter Vista ein wenig.
Wenn man ein Desktophintergrund rein machen will geht das nur wenn ich 2 ausgewählt hab. Dann taucht die Console nur manchmal auf. Ich kann den Fehler nicht finden.

Code: Alles auswählen

OpenConsole()
ConsoleTitle("WallpaperChanger @ TheDarkZim-.-")
ConsoleColor(12, 0)
ConsoleCursor(10)
Print("Dieses Programm wurde von The_Dark_Zim-.- geschrieben!")
Delay(1500)
Print(".")
Delay(200)
Print(".")
Delay(200)
PrintN(".")
Delay(200)
PrintN("#################################################")
Delay(50)
PrintN(" #                                             #")
Delay(50)
PrintN("  #                                           #")
Delay(50)
PrintN("   #           /\              /\            #")
Delay(50)
PrintN("    #         //_\            /_\\          #")
Delay(50)
PrintN("     #       ///                \\\        #")
Delay(50)
PrintN("      #      ______________________       #")
Delay(50)
PrintN("       #     \                    /      #")
Delay(50)
PrintN("        #     \                  /      #")
Delay(50)
PrintN("         #     \  __        __  /      #")
Delay(50)
PrintN("          #     \/°°\      /°°\/      #")
Delay(50)
PrintN("           #     °°°°\    /°°°°      #")
Delay(50)
PrintN("            #     °°°°|  |°°°°      #")
Delay(50)
PrintN("             #     °°°|  |°°°      #")
Delay(50)
PrintN("              #     °/    \°      #")
Delay(50)
PrintN("               #     \    /      #")
Delay(50)
PrintN("                #     \  /      #")
Delay(50)
PrintN("                 #     \/      #")
Delay(50)
PrintN("                  #           #")
Delay(50)
PrintN("                   #         #")
Delay(50)
PrintN("                    #       #")
Delay(50)
PrintN("                     #     #")
Delay(50)
PrintN("                      #   #")
Delay(50)
PrintN("                       # #")
Delay(50)
PrintN("                        #")
Delay (2000)
CloseConsole()

UseJPEGImageDecoder()
UseTGAImageDecoder()
UsePNGImageDecoder()
UseTIFFImageDecoder()

Global Image0
Image0 = CatchImage(0, ?Image0)

DataSection
Image0:
  IncludeBinary "logo.bmp"
EndDataSection

Global Icon0
Icon0 = CatchImage(1, ?Icon0)

DataSection
Icon0:
  IncludeBinary "wallpaperZIM.ico"
EndDataSection


ProcedureDLL AddHotkey(Window, fsModifiers, Keys, HotkeyID) 
  ProcedureReturn RegisterHotKey_(WindowID(Window), HotkeyID, fsModifiers, Keys)
EndProcedure

ProcedureDLL RemoveHotkey(Window, HotkeyID)
  ProcedureReturn UnregisterHotKey_(WindowID(Window), HotkeyID)
EndProcedure

#PB_Event_Hotkey = 786

Procedure.s GetSystemDirectory()
  Path.s=Space(501)
  GetSystemDirectory_(@Path,500)
  ProcedureReturn Path
EndProcedure

 Procedure refresh()
RunProgram("rundll32.exe", "user32.dll,UpdatePerUserSystemParameters", GetSystemDirectory() , 0) 
 EndProcedure
  
Enumeration
  #Window_0
EndEnumeration

Enumeration
  #String_0
  #String_1
  #Button_0
  #Button_1
  #Button_2
  #Button_3
  #Button_4
  #Text_0
  #Text_1
  #Image_0
  #Image_1
  #Image_2
EndEnumeration

Procedure Open_Window_0()
  If OpenWindow(#Window_0, 506, 300, 310, 300, "WallpaperChanger @ TheDarkZim-.-",  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar | #PB_Window_MinimizeGadget )
   If CreateStatusBar(0, WindowID(#Window_0))
   AddStatusBarField(506)
   StatusBarText(0,0, "1.Bild = Strg + F1 ; 2.Bild = Strg + F2")
   EndIf
     If CreateGadgetList(WindowID(#Window_0))
      StringGadget(#String_0, 20, 50, 100, 20, "")
      StringGadget(#String_1, 20, 130, 100, 20, "")
      ButtonGadget(#Button_0, 230, 50, 60, 20, "Search")
      ButtonGadget(#Button_1, 230, 130, 60, 20, "Search")
      ButtonGadget(#Button_4, 258, 2, 51, 20, "Minimize")
      TextGadget(#Text_0, 20, 30, 260, 20, "Bild 1:")
      TextGadget(#Text_1, 20, 110, 260, 20, "Bild 2:")
      ImageGadget(#Image_0, 52, 200, 200, 60, Image0)
      ButtonImageGadget(#Image_1, 140, 19, 80, 80,Icon0)
      ButtonImageGadget(#Image_2, 140, 101, 80, 80,Icon0)
     EndIf
  EndIf
EndProcedure

Open_Window_0()

AddSysTrayIcon(#PB_Any,WindowID(#Window_0),Icon0)
AddHotkey(0, #MOD_CONTROL, #PB_Shortcut_F1, 0)
AddHotkey(0, #MOD_CONTROL, #PB_Shortcut_F2, 1)

Repeat 


  Event = WaitWindowEvent()
  
  WindowID = EventWindow() 
  
  GadgetID = EventGadget()
  
  EventType = EventType()
  
  If Event = #PB_Event_Gadget
    
    If GadgetID = #String_0
      
    ElseIf GadgetID = #Button_0
     file$ = OpenFileRequester("Choose a picture", "", "All Images Formats|*.bmp;*.jpg;*.png;*.tif;*.tga", 0)
   If file$ > ""
     LoadImage(1,file$)
     SaveImage(1,  GetSystemDirectory()+"\Wall1.bmp",#PB_ImagePlugin_BMP)
     file1$ =  GetSystemDirectory()+"\Wall1.bmp"
     SetGadgetText(#String_0, GetFilePart(file$)) 
     LoadImage(2,file1$)
     ResizeImage(2,80,80) 
     ButtonImageGadget(#Image_1, 140, 19, 80, 80,ImageID(2))
   EndIf
    ElseIf GadgetID = #Button_1
     file$ = OpenFileRequester("Choose a picture", "", "All Images Formats|*.bmp;*.jpg;*.png;*.tif;*.tga", 0)
   If file$ > ""
     LoadImage(3,file$)
     SaveImage(3, GetSystemDirectory()+"\Wall2.bmp",#PB_ImagePlugin_BMP)
     file2$ = GetSystemDirectory()+"\Wall2.bmp"
     SetGadgetText(#String_1, GetFilePart(file$)) 
     LoadImage(3,file2$)
     ResizeImage(3,80,80) 
     ButtonImageGadget(#Image_2, 140, 101, 80, 80,ImageID(3))
   EndIf
    ElseIf GadgetID = #Image_1
    
datasize.l = Len(file1$) 

openkey = #HKEY_CURRENT_USER 
subkey.s = "Control Panel\Desktop" 
keyset.s = "Wallpaper" 
hkey.l = 0

RegCreateKey_(OpenKey,SubKey,@hKey) 
RegSetValueEx_(hKey,keyset,0,#REG_SZ,file1$,datasize) 
RegCloseKey_(hKey) 

refresh()
    ElseIf GadgetID = #Image_2

datasize.l = Len(file2$) 

openkey = #HKEY_CURRENT_USER 
subkey.s = "Control Panel\Desktop" 
keyset.s = "Wallpaper" 
hkey.l = 0

RegCreateKey_(OpenKey,SubKey,@hKey) 
RegSetValueEx_(hKey,keyset,0,#REG_SZ,file2$,datasize) 
RegCloseKey_(hKey) 
    
refresh()
    ElseIf GadgetID = #Button_4
     HideWindow(#window_0,1)
 EndIf
EndIf
  
  If EventType() = #PB_EventType_LeftClick
          min +1
  EndIf 
  
  If min = 2 
    HideWindow(#window_0,0)
    min = 0
  EndIf
  
    Select event
       Case #PB_Event_Hotkey 
         Select EventwParam() 
          Case 0 
datasize.l = Len(file1$) 

openkey = #HKEY_CURRENT_USER 
subkey.s = "Control Panel\Desktop" 
keyset.s = "Wallpaper" 
hkey.l = 0

RegCreateKey_(OpenKey,SubKey,@hKey) 
RegSetValueEx_(hKey,keyset,0,#REG_SZ,file1$,datasize) 
RegCloseKey_(hKey) 
    
refresh()
          Case 1 
datasize.l = Len(file2$) 

openkey = #HKEY_CURRENT_USER 
subkey.s = "Control Panel\Desktop" 
keyset.s = "Wallpaper" 
hkey.l = 0

RegCreateKey_(OpenKey,SubKey,@hKey) 
RegSetValueEx_(hKey,keyset,0,#REG_SZ,file2$,datasize) 
RegCloseKey_(hKey) 
    
refresh()
        EndSelect
EndSelect
Until Event = #PB_Event_CloseWindow 

  RemoveHotkey(0, 0)
  RemoveHotkey(0, 1)

End
Logo und Icon (fals gesucht) :
Bild
Bild

Wenn jemand Fahler sieht bitte Melden, Danke ;)

Gruß ZIM
PB: 5.xx LTS x86/x64 | WIN: 10 Pro x64, Linux Mint x64
Andesdaf
Moderator
Beiträge: 2673
Registriert: 15.06.2008 18:22
Wohnort: Dresden

Beitrag von Andesdaf »

ich versteh nicht ganz was du meinst...
... nur wenn du zwei Bilder ausgewählt hast funktioniert das Programm?

ich empfehle dir mal mach die zwei Images in einer Datasection.

was soll eigentlich die Console im Programm? Hat die einen näheren Sinn
zum eigentlichen Programm?
Win11 x64 | PB 6.20
Benutzeravatar
The_Dark_Zim-.-
Beiträge: 372
Registriert: 18.03.2008 16:53

Beitrag von The_Dark_Zim-.- »

Man kann 2 Bilder auswählen die man dann als Desktophintergrund einrichten kann, entweder per Bedienfeld oder Tastenkombie.

Die Console ist nur Spaß. Würde trotzdem gerne wissen warum die nicht immer erscheint.
PB: 5.xx LTS x86/x64 | WIN: 10 Pro x64, Linux Mint x64
Andesdaf
Moderator
Beiträge: 2673
Registriert: 15.06.2008 18:22
Wohnort: Dresden

Beitrag von Andesdaf »

Zur Console: Ich habe mehrmals probiert und beim ersten Start der Console
wurde sie zwar nicht auf dem Bildschirm angezeigt, aber in der Taskleiste.
Vielleicht meinst du das.
Scheint so als würde die nur minimiert geöffnet werden, wenn du sie das
erste Mal mit PB startest.
Ist aber nur eine Theorie.
Win11 x64 | PB 6.20
Benutzeravatar
The_Dark_Zim-.-
Beiträge: 372
Registriert: 18.03.2008 16:53

Beitrag von The_Dark_Zim-.- »

Ne das mein ich nicht. Das ist auch meist nicht wenn man die exe ausführt. Bei Vista ist da nichtmals was in der Taskleiste. Das ist ja das merkwürdige.

Hast du denn Vista ?

Gruß ZIM
PB: 5.xx LTS x86/x64 | WIN: 10 Pro x64, Linux Mint x64
Andesdaf
Moderator
Beiträge: 2673
Registriert: 15.06.2008 18:22
Wohnort: Dresden

Beitrag von Andesdaf »

> Hast du denn Vista ?
Ja.
Win11 x64 | PB 6.20
Benutzeravatar
The_Dark_Zim-.-
Beiträge: 372
Registriert: 18.03.2008 16:53

Beitrag von The_Dark_Zim-.- »

Geht bei dir denn das mit dem Hintergrund ändern ?
PB: 5.xx LTS x86/x64 | WIN: 10 Pro x64, Linux Mint x64
Andesdaf
Moderator
Beiträge: 2673
Registriert: 15.06.2008 18:22
Wohnort: Dresden

Beitrag von Andesdaf »

nein. Bei

Code: Alles auswählen

LoadImage(2,file1$)
bzw.

Code: Alles auswählen

LoadImage(2,file2$)
reckt er immer ab.

Irgendwie werd ich nicht schlau aus dem Code...
Win11 x64 | PB 6.20
Benutzeravatar
The_Dark_Zim-.-
Beiträge: 372
Registriert: 18.03.2008 16:53

Beitrag von The_Dark_Zim-.- »

Bin selbst nochmal drüber gegangen und hab ein wenig was umgestellt.

Aktueller Code

Code: Alles auswählen

Enumeration
  #Window_0
  #String_0
  #String_1
  #Button_0
  #Button_1
  #Button_4
  #Text_0
  #Text_1
  #Image_0
  #Image_1
  #Image_2
EndEnumeration

Global Icon0
Global Image0
Icon0 = CatchImage(6, ?Icon0)
Image0 = CatchImage(7, ?Image0)

DataSection
Image0:
  IncludeBinary "logo.bmp"
Icon0:
  IncludeBinary "wallpaperZIM.ico"
EndDataSection

UseJPEGImageDecoder()
UseTGAImageDecoder()
UsePNGImageDecoder()
UseTIFFImageDecoder()

OpenConsole()
ConsoleTitle("WallpaperChanger @ TheDarkZim-.-")
ConsoleColor(12, 0)
ConsoleCursor(10)
Print("Dieses Programm wurde von The_Dark_Zim-.- geschrieben!")
Delay(1500)
Print(".")
Delay(200)
Print(".")
Delay(200)
PrintN(".")
Delay(200)
PrintN("#################################################")
Delay(50)
PrintN(" #                                             #")
Delay(50)
PrintN("  #                                           #")
Delay(50)
PrintN("   #           /\              /\            #")
Delay(50)
PrintN("    #         //_\            /_\\          #")
Delay(50)
PrintN("     #       ///                \\\        #")
Delay(50)
PrintN("      #      ______________________       #")
Delay(50)
PrintN("       #     \                    /      #")
Delay(50)
PrintN("        #     \                  /      #")
Delay(50)
PrintN("         #     \  __        __  /      #")
Delay(50)
PrintN("          #     \/°°\      /°°\/      #")
Delay(50)
PrintN("           #     °°°°\    /°°°°      #")
Delay(50)
PrintN("            #     °°°°|  |°°°°      #")
Delay(50)
PrintN("             #     °°°|  |°°°      #")
Delay(50)
PrintN("              #     °/    \°      #")
Delay(50)
PrintN("               #     \    /      #")
Delay(50)
PrintN("                #     \  /      #")
Delay(50)
PrintN("                 #     \/      #")
Delay(50)
PrintN("                  #           #")
Delay(50)
PrintN("                   #         #")
Delay(50)
PrintN("                    #       #")
Delay(50)
PrintN("                     #     #")
Delay(50)
PrintN("                      #   #")
Delay(50)
PrintN("                       # #")
Delay(50)
PrintN("                        #")
Delay (2000)
CloseConsole()

ProcedureDLL AddHotkey(Window, fsModifiers, Keys, HotkeyID) 
  ProcedureReturn RegisterHotKey_(WindowID(Window), HotkeyID, fsModifiers, Keys)
EndProcedure

ProcedureDLL RemoveHotkey(Window, HotkeyID)
  ProcedureReturn UnregisterHotKey_(WindowID(Window), HotkeyID)
EndProcedure

Procedure.s GetSystemDirectory()
  Path.s=Space(501)
  GetSystemDirectory_(@Path,500)
  ProcedureReturn Path
EndProcedure

Procedure refresh()
 RunProgram("rundll32.exe", "user32.dll,UpdatePerUserSystemParameters", GetSystemDirectory() , 0) 
EndProcedure
  
Procedure Open_Window_0()
  If OpenWindow(#Window_0, 506, 300, 310, 300, "WallpaperChanger @ TheDarkZim-.-",  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar | #PB_Window_MinimizeGadget )
   If CreateStatusBar(0, WindowID(#Window_0))
    AddStatusBarField(506)
    StatusBarText(0,0, "1.Bild = Strg + F1 ; 2.Bild = Strg + F2")
   EndIf
     If CreateGadgetList(WindowID(#Window_0))
      StringGadget(#String_0, 20, 50, 100, 20, "")
      StringGadget(#String_1, 20, 130, 100, 20, "")
      ButtonGadget(#Button_0, 230, 50, 60, 20, "Search")
      ButtonGadget(#Button_1, 230, 130, 60, 20, "Search")
      ButtonGadget(#Button_4, 258, 2, 51, 20, "Minimize")
      TextGadget(#Text_0, 20, 30, 260, 20, "Bild 1:")
      TextGadget(#Text_1, 20, 110, 260, 20, "Bild 2:")
      ImageGadget(#Image_0, 52, 200, 200, 60, Image0)
      ButtonImageGadget(#Image_1, 140, 19, 80, 80,Icon0)
      ButtonImageGadget(#Image_2, 140, 101, 80, 80,Icon0)
     EndIf
  EndIf
EndProcedure

#PB_Event_Hotkey = 786

Open_Window_0()

AddSysTrayIcon(#PB_Any,WindowID(#Window_0),Icon0)
AddHotkey(0, #MOD_CONTROL, #PB_Shortcut_F1, 0)
AddHotkey(0, #MOD_CONTROL, #PB_Shortcut_F2, 1)

Repeat 

  Event = WaitWindowEvent()
  WindowID = EventWindow() 
  GadgetID = EventGadget()
  EventType = EventType()
  
  If Event = #PB_Event_Gadget
    
   If GadgetID = #String_0
      
    ElseIf GadgetID = #Button_0
    
     file$ = OpenFileRequester("Choose a picture", "", "All Images Formats|*.bmp;*.jpg;*.png;*.tif;*.tga", 0)
   If file$ > ""
     LoadImage(1,file$)
     SaveImage(1,  GetSystemDirectory()+"\Wall1.bmp",#PB_ImagePlugin_BMP)
     file1$ =  GetSystemDirectory()+"\Wall1.bmp"
     SetGadgetText(#String_0, GetFilePart(file$)) 
     LoadImage(2,file1$)
     ResizeImage(2,80,80) 
     ButtonImageGadget(#Image_1, 140, 19, 80, 80,ImageID(2))
   EndIf
   
    ElseIf GadgetID = #Button_1
    
     file$ = OpenFileRequester("Choose a picture", "", "All Images Formats|*.bmp;*.jpg;*.png;*.tif;*.tga", 0)
   If file$ > ""
     LoadImage(3,file$)
     SaveImage(3, GetSystemDirectory()+"\Wall2.bmp",#PB_ImagePlugin_BMP)
     file2$ = GetSystemDirectory()+"\Wall2.bmp"
     SetGadgetText(#String_1, GetFilePart(file$)) 
     LoadImage(4,file2$)
     ResizeImage(4,80,80) 
     ButtonImageGadget(#Image_2, 140, 101, 80, 80,ImageID(4))
   EndIf
   
    ElseIf GadgetID = #Image_1
    
datasize.l = Len(file1$) 
openkey = #HKEY_CURRENT_USER 
subkey.s = "Control Panel\Desktop" 
keyset.s = "Wallpaper" 
hkey.l = 0

RegCreateKey_(OpenKey,SubKey,@hKey) 
RegSetValueEx_(hKey,keyset,0,#REG_SZ,file1$,datasize) 
RegCloseKey_(hKey) 
  
refresh()

    ElseIf GadgetID = #Image_2

datasize.l = Len(file2$) 
openkey = #HKEY_CURRENT_USER 
subkey.s = "Control Panel\Desktop" 
keyset.s = "Wallpaper" 
hkey.l = 0

RegCreateKey_(OpenKey,SubKey,@hKey) 
RegSetValueEx_(hKey,keyset,0,#REG_SZ,file2$,datasize) 
RegCloseKey_(hKey) 
    
refresh()

    ElseIf GadgetID = #Button_4
     HideWindow(#window_0,1)
 EndIf
EndIf
  
  If EventType() = #PB_EventType_LeftClick
     min +1
  EndIf 
  
  If min = 2 
    HideWindow(#window_0,0)
    min = 0
  EndIf
  
    Select event
       Case #PB_Event_Hotkey 
         Select EventwParam() 
          Case 0 
          
datasize.l = Len(file1$) 
openkey = #HKEY_CURRENT_USER 
subkey.s = "Control Panel\Desktop" 
keyset.s = "Wallpaper" 
hkey.l = 0

RegCreateKey_(OpenKey,SubKey,@hKey) 
RegSetValueEx_(hKey,keyset,0,#REG_SZ,file1$,datasize) 
RegCloseKey_(hKey) 
    
refresh()
          Case 1 
          
datasize.l = Len(file2$) 
openkey = #HKEY_CURRENT_USER 
subkey.s = "Control Panel\Desktop" 
keyset.s = "Wallpaper" 
hkey.l = 0

RegCreateKey_(OpenKey,SubKey,@hKey) 
RegSetValueEx_(hKey,keyset,0,#REG_SZ,file2$,datasize) 
RegCloseKey_(hKey) 
    
refresh()
        EndSelect
    EndSelect
Until Event = #PB_Event_CloseWindow 

  RemoveHotkey(0, 0)
  RemoveHotkey(0, 1)

End
Gruß ZIM
PB: 5.xx LTS x86/x64 | WIN: 10 Pro x64, Linux Mint x64
Andesdaf
Moderator
Beiträge: 2673
Registriert: 15.06.2008 18:22
Wohnort: Dresden

Beitrag von Andesdaf »

dein GetSystemDirectory findet bei mir den Pfad

Code: Alles auswählen

c:\Windows\System32
heraus. und dort soll eine Datei namens
"Wall1.bmp" sein. Ist sie aber nicht. Aus dem Grund funktioniert die Sache
nicht.
Ich weiß nicht, was das nun soll.
Win11 x64 | PB 6.20
Antworten