Systrayicons werden nach Explorer Crash nicht angezeigt
Systrayicons werden nach Explorer Crash nicht angezeigt
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
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
Schreibmaschine, Bildschirmlupe, Wings3DtoOgreMeshConverter
Watch: PureArea
PB-V: 4
WinXP
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.
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
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
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
Schreibmaschine, Bildschirmlupe, Wings3DtoOgreMeshConverter
Watch: PureArea
PB-V: 4
WinXP
Gebe Andy recht.
kannst ja probieren das zu lösen und bei erfolg uns mitteilen
kannst ja probieren das zu lösen und bei erfolg uns mitteilen

Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
...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
_________________________________
_________________________________
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
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
Schreibmaschine, Bildschirmlupe, Wings3DtoOgreMeshConverter
Watch: PureArea
PB-V: 4
WinXP
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
_________________________________
_________________________________
Damit bin ich aber nicht einverstanden !AND51 hat geschrieben:Fakt ist, da machst du nichts dran, egal, was du probierst.
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