Systrayicons werden nach Explorer Crash nicht angezeigt

Hier werden, insbesondere in den Beta-Phasen, Bugmeldungen gepostet. Das offizielle BugForum ist allerdings hier.
Benutzeravatar
Scarabol
Beiträge: 1427
Registriert: 30.11.2005 21:00

Systrayicons werden nach Explorer Crash nicht angezeigt

Beitrag von Scarabol »

Hi Leute,

wenn der Explorer zusammenbricht verschwindet ja auch kurzzeitig die Systray und nach dem neuladen werden auch alle icons wieder angezeigt außer die meiner PB Programme.

Sollte also PB intern geregelt werden, das die Icons wieder hinzugefügt werden, denn die Programme laufen noch!

Gruß
Scarabol
Abgeschlossen Projekte:
Schreibmaschine, Bildschirmlupe, Wings3DtoOgreMeshConverter
Watch: PureArea

PB-V: 4
WinXP
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag von AND51 »

Sollte nicht PB intern geregelt werden, denn dieses Problem tritt auch mit vielen nicht PB-Programmen auf u. a. auch AntiVir, wenn ich mich recht erinnere.
Fakt ist, da machst du nichts dran, egal, was du probierst.
Übrigens muss es nicht immer ein Explorer-Absturz sein, man kann den Prozess explorer.exe auch ganz normal im Taskmanager killen um das Poblem hervorzurufen.
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Benutzeravatar
Scarabol
Beiträge: 1427
Registriert: 30.11.2005 21:00

Beitrag von Scarabol »

Also die etwas professionelleren Programme kommen ohne Probleme damit klar....
Darunter:
- Skype
- Miranda
- AntiVir
- Fritz.Box StartCenter

Ähm wieso soll ich was daran machen?
Das ist doch eher das Problem von PB...

Gruß
Scarabol
Abgeschlossen Projekte:
Schreibmaschine, Bildschirmlupe, Wings3DtoOgreMeshConverter
Watch: PureArea

PB-V: 4
WinXP
Benutzeravatar
mk-soft
Beiträge: 3855
Registriert: 24.11.2004 13:12
Wohnort: Germany

Beitrag von mk-soft »

Gebe Andy recht.
kannst ja probieren das zu lösen und bei erfolg uns mitteilen :allright:
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
marco2007
Beiträge: 906
Registriert: 26.10.2006 13:19
Kontaktdaten:

Beitrag von marco2007 »

...bei mir kommen wieder alle Icons...

Code: Alles auswählen

 ;http://www.purearea.net/pb/CodeArchiv/Windows_System/Tasks&Processes/KillProcess.pb 

; English forum: http://www.purebasic.fr/english/viewtopic.php?t=8086&start=15 
; Author: Hi-Toro 
; Date : 30. November 2003 
; OS : Windows 
; Demo : No 

; ------------------------ Get PID 
Structure PROCESSENTRY32s 
  dwsize.l 
  cntusage.l 
  th32ProcessID.l 
  th32DefaultHeapID.l 
  th32ModuleID.l 
  cntThreads.l 
  th32ParentProcessID.l 
  pcPriClassBase.l 
  dwFlags.l 
  szExeFile.s{1024} 
EndStructure 
#TH32CS_SNAPPROCESS = $2 

Procedure.l FindPid(s.s) 
  Process.PROCESSENTRY32s 
  ProcSnap.l 
  ProcSnap = CreateToolhelp32Snapshot_(#TH32CS_SNAPPROCESS, 0) 
  If ProcSnap <> 0 
    Process\dwsize=SizeOf(Process) 
    Process32First_(ProcSnap, Process) 
    While Process32Next_(ProcSnap, Process) > 0 
      If Process\szExeFile = s 
        ProcedureReturn Process\th32ProcessID 
        Break 
      EndIf 
    Wend 
  EndIf 
EndProcedure 
; --------------------- Get PID end 

; Take a look at ListTaskbarWindows.pb before... 
; ... and if a program refuses to close like that, you could instead 'force' it closed 
; via this, passing the 'pid' variable from the above code : 

#PROCESS_TERMINATE = $1 
#PROCESS_CREATE_THREAD = $2 
#PROCESS_VM_OPERATION = $8 
#PROCESS_VM_READ = $10 
#PROCESS_VM_WRITE = $20 
#PROCESS_DUP_HANDLE = $40 
#PROCESS_CREATE_PROCESS = $80 
#PROCESS_SET_QUOTA = $100 
#PROCESS_SET_INFORMATION = $200 
#PROCESS_QUERY_INFORMATION = $400 
#PROCESS_ALL_ACCESS = #STANDARD_RIGHTS_REQUIRED|#SYNCHRONIZE|$FFF 

; This appears to be pretty much how Windows kills a program if you 'End Process' 
; from the Task Manager. Note that this is 'unfriendly'! 

Procedure KillProcess(pid) 
  phandle = OpenProcess_(#PROCESS_TERMINATE, #False, pid) 
  If phandle <> #Null 
    If TerminateProcess_(phandle, 1) 
      result = #True 
    EndIf 
    CloseHandle_(phandle) 
  EndIf 
  ProcedureReturn result 
EndProcedure 

; Enter process ID here! I suggest going to Task Manager, 
; making sure PIDs are shown (try View menu -> Select columns if 
; they are not listed), then run a program and enter its number here... 

KillProcess(FindPid("explorer.exe"))
Delay(200)
RunProgram("explorer.exe")
Windows 11 - PB 6.03 x64
_________________________________
Benutzeravatar
Scarabol
Beiträge: 1427
Registriert: 30.11.2005 21:00

Beitrag von Scarabol »

Hi marco,

dann kill doch mal bitte den Explorer über den Taskmanager und guck ob die mit PB programmierten Anwendungen ihre Icons auch wieder anzeigen...

Gruß
Scarabol
Abgeschlossen Projekte:
Schreibmaschine, Bildschirmlupe, Wings3DtoOgreMeshConverter
Watch: PureArea

PB-V: 4
WinXP
marco2007
Beiträge: 906
Registriert: 26.10.2006 13:19
Kontaktdaten:

Beitrag von marco2007 »

Hast recht, ...ich glaube, wenn explorer crasht und neu gestartet wird, beginnt er quasi wie bei einem Windowsstart -> er startet die selben Programme und somit lädt er die gleichen Icons....
Zuletzt geändert von marco2007 am 09.12.2007 21:02, insgesamt 1-mal geändert.
Windows 11 - PB 6.03 x64
_________________________________
Benutzeravatar
Scarabol
Beiträge: 1427
Registriert: 30.11.2005 21:00

Beitrag von Scarabol »

Ne leider nicht, denn die Programme die bei mir nicht mehr angezeigt werden sind auch im Autostart...

Gruß
Scarabol
Abgeschlossen Projekte:
Schreibmaschine, Bildschirmlupe, Wings3DtoOgreMeshConverter
Watch: PureArea

PB-V: 4
WinXP
Andreas
ToolbarKönig
Beiträge: 142
Registriert: 08.09.2004 08:33

Beitrag von Andreas »

AND51 hat geschrieben:Fakt ist, da machst du nichts dran, egal, was du probierst.
Damit bin ich aber nicht einverstanden !

Das ist abzufangen.
Immer wenn der Explorer crasht sendet er eine registrierte Message ("TaskbarCreated")
an alle Toplevel-Fenster.
Es muss also eine Message registriert, und im FensterCallback darauf reagiert werden. Dann erscheint das Icon auch wieder !

Beispiel :

Code: Alles auswählen

Procedure WCB (wnd,msg,wParam,lParam)
  Shared TB_Created
  Result = #PB_ProcessPureBasicEvents
  Select msg
  Case TB_Created
    AddSysTrayIcon(1, WindowID(0), LoadImage(0,#PB_Compiler_Home +"examples\sources\Data\CdPlayer.ico"))
  EndSelect
  ProcedureReturn Result
EndProcedure

TB_Created.l = RegisterWindowMessage_("TaskbarCreated")

If OpenWindow(0, 100, 150, 300, 100, "PureBasic - SysTray Example", #PB_Window_SystemMenu)
  AddSysTrayIcon(1, WindowID(0), LoadImage(0,#PB_Compiler_Home +"examples\sources\Data\CdPlayer.ico"))
  SysTrayIconToolTip(1, "Icon 1")
  SetWindowCallback(@wcb())
  Repeat
    Event = WaitWindowEvent()
    If Event = #PB_Event_SysTray
      If EventType() = #PB_EventType_LeftDoubleClick
        MessageRequester("SysTray", "Left DoubleClick on SysTrayIcon "+Str(EventGadget()),0)
      EndIf
    EndIf
  Until Event = #PB_Event_CloseWindow
EndIf
Gruss Andreas
marco2007
Beiträge: 906
Registriert: 26.10.2006 13:19
Kontaktdaten:

Beitrag von marco2007 »

@Andreas: :allright:
Windows 11 - PB 6.03 x64
_________________________________
Antworten