[Win7] Taskbar-Schaltfläche animieren

Windowsspezifisches Forum , API ,..
Beiträge, die plattformübergreifend sind, gehören ins 'Allgemein'-Forum.
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Re: [Win7] Taskbar-Schaltfläche animieren

Beitrag von DarkDragon »

Sorry für Doppelpost, ich will aber dass es jeder mitbekommt. Ich habs geschafft! Der Beispielcode ist noch alles andere als sauber aber es funktioniert

Code: Alles auswählen

; Author: DarkDragon

Interface ITaskbarList3 Extends ITaskbarList2
  SetProgressValue(hWnd, Completed.q, Total.q)
  SetProgressState(hWnd, Flags.l)
  RegisterTab(hWndTab, hWndMDI)
  UnregisterTab(hWndTab)
  SetTabOrder(hWndTab, hwndInsertBefore)
  SetTabActive(hWndTab, hWndMDI, dwReserved.l)
  ThumbBarAddButtons(hWnd, cButtons, *pButtons)
  ThumbBarUpdateButtons(hWnd, cButtons, *pButtons)
  ThumbBarSetImageList(hWnd, himl)
  SetOverlayIcon(hWnd, hIcon, pszDescription.s)
  SetThumbnailTooltip(hWnd, pszTip.s)
  SetThumbnailClip(hWnd, *prcClip.RECT)
EndInterface

#TBPF_NoProgress    = $00
#TBPF_Indeterminate = $01
#TBPF_Normal        = $02
#TBPF_Error         = $04
#TBPF_Paused        = $08

#CLSCTX_INPROC_SERVER = 1
#CLSCTX_LOCAL_SERVER  = 4
#CLSCTX_SERVER        = #CLSCTX_INPROC_SERVER | #CLSCTX_LOCAL_SERVER

OpenWindow(0, 10, 0, 300, 50, "Test")

CoInitialize_(0)

*tb.ITaskbarList3
ret = CoCreateInstance_(?CLSID_TaskbarList, 0, #CLSCTX_SERVER, ?IID_ITaskbarList, @*tb)
If ret = 0
  *tb\SetProgressState(WindowID(0), #TBPF_Normal)
Else
  Debug "Error:"
  Debug ret
EndIf

i = 0
Repeat
  i + 1
 
  *tb\SetProgressValue(WindowID(0), i % 1000, 1000)
 
  Event = WindowEvent()
  Select Event
    Case #PB_Event_CloseWindow
      Break
  EndSelect
  Delay(1)
ForEver

CoUninitialize_()

End

DataSection
  CLSID_TaskbarList:
    ; 56FDF344-FD6D-11D0-958A-006097C9A090
    Data.l $56FDF344
    Data.w $FD6D, $11D0, $8A95
    Data.b $00, $60, $97, $C9, $A0, $90
  IID_ITaskbarList:
    ; {56FDF342-FD6D-11D0-958A-006097C9A090}
    Data.l $56FDF342
    Data.w $FD6D, $11D0, $8A95
    Data.b $00, $60, $97, $C9, $A0, $90
EndDataSection
Da geht noch weitaus mehr wenn man sich da einarbeitet. Auch solche Buttons etc. macht man glaube ich damit ins Vorschaufenster.

[EDIT]
Code geupdated.
Zuletzt geändert von DarkDragon am 15.11.2009 10:18, insgesamt 3-mal geändert.
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Benutzeravatar
Kai
Beiträge: 264
Registriert: 29.09.2005 20:58
Computerausstattung: iMac 2019
Wohnort: Hannover
Kontaktdaten:

Re: [Win7] Taskbar-Schaltfläche animieren

Beitrag von Kai »

Stürzt bei mir leider sofort mit der Meldung 'Das mit dem Debugger getestete Executable endete unerwartet.' ab.

Windows 7 Ultimate x86
Meine Homepage - Aktuelle Projekte - Launcher
Letzte PB-Version - Window 7 x86
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Re: [Win7] Taskbar-Schaltfläche animieren

Beitrag von DarkDragon »

Kai hat geschrieben:Stürzt bei mir leider sofort mit der Meldung 'Das mit dem Debugger getestete Executable endete unerwartet.' ab.

Windows 7 Ultimate x86
Steht da irgendwo eine Zeile drin? Oder kannst du das durchsteppen (Vllt durch einfügen eines breakpoints bzw CallDebugger oben am source)?

[EDIT]
Ich habs. Hab den Code angepasst.
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: [Win7] Taskbar-Schaltfläche animieren

Beitrag von RSBasic »

Hallo DarkDragon,


wow, cool, vielen Dank für dein Code :allright:
Funktioniert hier einwandfrei.
Danke nochmal :D
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
Kai
Beiträge: 264
Registriert: 29.09.2005 20:58
Computerausstattung: iMac 2019
Wohnort: Hannover
Kontaktdaten:

Re: [Win7] Taskbar-Schaltfläche animieren

Beitrag von Kai »

Nun läuft es 1A :allright:
Meine Homepage - Aktuelle Projekte - Launcher
Letzte PB-Version - Window 7 x86
Benutzeravatar
Deluxe0321
Beiträge: 336
Registriert: 19.05.2006 00:31
Kontaktdaten:

Re: [Win7] Taskbar-Schaltfläche animieren

Beitrag von Deluxe0321 »

Läuft hier ohne mukken, danke dafür xD
Mal sehn ob ich jetzt dank dir die anderen Funktionen hinbekomme.

Edit: Ich peil nicht ganz wie ich Buttons hinzufügen kann (wie in Itunes/WMP). Die Buttons werden zwar erstellt, aber es wird kein Icon hinzugefügt, bzw. angezeigt. Und der Tooltip ist ein Haufen chinesicher Text.

Grüße Marv
Ich habe keine Lösung, aber ich bewundere das Problem.
marco2007
Beiträge: 906
Registriert: 26.10.2006 13:19
Kontaktdaten:

Re: [Win7] Taskbar-Schaltfläche animieren

Beitrag von marco2007 »

@DD: ..hab`s zwar noch nicht probiert, aber wenn`s funktioniert: Respekt :allright:
-> Codearchiv!
Windows 11 - PB 6.03 x64
_________________________________
Benutzeravatar
KatSeiko
Beiträge: 367
Registriert: 19.07.2008 07:47

Re: [Win7] Taskbar-Schaltfläche animieren

Beitrag von KatSeiko »

Fehlt nur noch, dass ein paar einfache Befehle aufgenommen werden... SetSuperbarProgress(WindowID(), Progress, ProgressType) und sowas...
Win7 Ultimate x64, PureBasic 5.11

There is no substitute..
BildBildBild
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: [Win7] Taskbar-Schaltfläche animieren

Beitrag von ts-soft »

KatSeiko hat geschrieben:Fehlt nur noch, dass ein paar einfache Befehle aufgenommen werden... SetSuperbarProgress(WindowID(), Progress, ProgressType) und sowas...
Jahre später ... :lol:

Hier mal meine Implementation, hab die Progress-Werte auf 0 - 100 festgesetzt.

Code: Alles auswählen

EnableExplicit

#TBPF_NOPROGRESS    = $0
#TBPF_INDETERMINATE = $1
#TBPF_NORMAL        = $2
#TBPF_ERROR         = $4
#TBPF_PAUSED        = $8

Interface ITaskbarList3 Extends ITaskbarList2
  SetProgressValue.i(hWnd.i, ullCompleted.q, ullTotal.q)
  SetProgressState.i(hWnd.i, tbpFlags.l)
  RegisterTab.i(hWndTab.i, hWndMDI.i)
  UnregisterTab.i(hWndTab.i)
  SetTabOrder.i(hWndTab.i, hWndInsertBefore.i)
  SetTabActive.i(hWndTab.i, hWndMDI.i, tbatFlags.l)
  ThumbBarAddButtons.i(hWnd.i, cButtons.l, *pButton)
  ThumbBarUpdateButtons.i(hWnd.i, cButtons.l, *pButton)
  ThumbBarSetImageList.i(hWnd.i, himl.i)
  SetOverlayIcon.i(hWnd.i, hIcon.i, pszDescription.s)
  SetThumbnailTooltip.i(hWnd.i, pszTip.s)
  SetThumbnailClip.i(hWnd.i, *prcClip)
EndInterface

DataSection
  CLSID_TaskBarList:
  Data.l $56FDF344
  Data.w $FD6D, $11D0
  Data.b $95, $8A, $00, $60, $97, $C9, $A0, $90
  IID_ITaskBarList3:
  Data.l $ea1afb91
  Data.w $9e28,$4b86
  Data.b $90,$E9,$9e,$9f,$8a,$5e,$ef,$af
EndDataSection

Procedure TaskBarProgress(hWnd, flag = #TBPF_NORMAL)
  Protected ptl.ITaskbarList3
  
  If OSVersion() >= #PB_OS_Windows_7
    CoCreateInstance_(?CLSID_TaskBarList, 0, 1, ?IID_ITaskBarList3, @ptl)
    
    If ptl
      ptl\HrInit()
      ptl\SetProgressValue(hWnd, 0, 100)
      ptl\SetProgressState(hWnd, flag)
    EndIf
  EndIf
  ProcedureReturn ptl
EndProcedure

Procedure TBP_SetState(hWnd, ptl.ITaskbarList3, state)
  If ptl
    Select state
      Case #TBPF_NOPROGRESS, #TBPF_INDETERMINATE, #TBPF_NORMAL, #TBPF_ERROR, #TBPF_PAUSED
        ptl\SetProgressState(hWnd, state)
    EndSelect
  EndIf
EndProcedure

Procedure TBP_SetValue(hWnd, ptl.ITaskbarList3, value)
  If ptl
    If value <   0 : value =   0 : EndIf
    If value > 100 : value = 100 : EndIf
    ptl\SetProgressValue(hWnd, value, 100)
  EndIf
EndProcedure

Procedure TBP_Release(ptl.ITaskbarList3)
  If ptl
    ptl\Release()
    ptl = 0
  EndIf
EndProcedure

; example
Define TBP, progress, pause = 1
Define hIcon = ExtractIcon_(GetModuleHandle_(0), #PB_Compiler_Home + "PureBasic.exe", 0)

OpenWindow(0, #PB_Ignore, #PB_Ignore, 265, 30, "Example", #PB_Window_SystemMenu)
SendMessage_(WindowID(0), #WM_SETICON, 0, hIcon)
ButtonGadget(0, 5, 5, 80, 20, "start")
ButtonGadget(1, 90, 5, 80, 20, "stop")
ButtonGadget(2, 175, 5, 80, 20, "pause")

TBP = TaskBarProgress(WindowID(0), #TBPF_NOPROGRESS)

Repeat
  Select WaitWindowEvent()
    Case #PB_Event_CloseWindow
      TBP_Release(TBP)
      DestroyIcon_(hIcon)
      Break
    Case #PB_Event_Gadget
      Select EventGadget()
        Case 0 ; start
          AddWindowTimer(0, 1, 100)
        Case 1 ; stop
          RemoveWindowTimer(0, 1)
          TBP_SetState(WindowID(0), TBP, #TBPF_NOPROGRESS)
          progress = 0
        Case 2 ; pause
          pause ! 1
          If pause
            AddWindowTimer(0, 1, 100)
            TBP_SetState(WindowID(0), TBP, #TBPF_NORMAL)
            SetGadgetText(2, "pause")
          Else
            RemoveWindowTimer(0, 1)
            TBP_SetState(WindowID(0), TBP, #TBPF_PAUSED)
            SetGadgetText(2, "weiter")
          EndIf
      EndSelect
    Case #PB_Event_Timer
      progress + 1
      If progress > 100 : progress = 0 : EndIf
      TBP_SetState(WindowID(0), TBP, #TBPF_NORMAL)
      TBP_SetValue(WindowID(0), TBP, progress)
  EndSelect
ForEver
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Derren
Beiträge: 558
Registriert: 23.07.2011 02:08

Re: [Win7] Taskbar-Schaltfläche animieren

Beitrag von Derren »

Witzig.
Wurde vor 2 Tagen im englischen Forum gepostet:
http://purebasic.fr/english/viewtopic.p ... it=taskbar
Signatur und so
Antworten