[B3D, BMax] [Win7] Statusanzeige in der Superbar

Übersicht BlitzBasic DLLs und Userlibs

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen

Nicdel

Betreff: [B3D, BMax] [Win7] Statusanzeige in der Superbar

BeitragDi, Jan 12, 2010 16:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Nach den Tipps von ChristianK und Silver_Knee ist die DLL jetzt fertig. Danke an die beiden Smile

Beschreibung:
Mit der DLL lässt sich in der Superbar von Windows 7 der aktuelle Status anzeigen. Dabei gibt es 3 Varianten: Normal (Grün), Error (Rot) und Pause (Gelb).
Achtung: Die DLL funktioniert nicht mit BlitzPlus! Ich arbeite dran.

Bilder:
user posted image
Superbar-Test in BlitzMax (Modus: Normal)

user posted image
Superbar-Test in B3D (Modus: Error)

Codes:
Blitz3D:
BlitzBasic: [AUSKLAPPEN]
Const TBPF_NOPROGRESS = 0, TBPF_INDETERMINATE = 1, TBPF_NORMAL = 2, TBPF_ERROR = 4, TBPF_PAUSED = 8 

AppTitle("Superbar-Test")

Graphics 130,20,32,2


Local hwnd = SystemProperty("AppHWND")
SetWindowLong(hwnd,-20,128) ;Benötigt user32.decls, ggf. auskommentieren.

Local i# = 0, state = 2
Color 0,230,0

Local timer = CreateTimer(20)


Repeat

ShowProgress(hwnd,Int(i),100,state)

i = i + 1

If i > 100

i = 0

If state = 2

state = 4

Color 230,0,0

ElseIf state = 4

state = 8

Color 255,200,0

ElseIf state = 8

state = 2

Color 0,230,0

EndIf

EndIf

Text 0,0,Int(i)+"% | State: "+state

Flip 0

Cls

WaitTimer timer

Until KeyHit(1)

End


Decls:
Code: [AUSKLAPPEN]
.lib "Win7Superbar.dll"

ShowProgress(hwnd%,completed%,total%,state%) : "_ShowProgress@16"


BlitzMax-Beispiel:
BlitzMax: [AUSKLAPPEN]
Strict

Framework BRL.D3D7Max2D

Import Pub.Win32

Import BRL.Timer


Local DllName$ = "Win7Superbar.dll"
Local DllHandle = LoadLibraryA(DllName)


If DllHandle = 0 RuntimeError "Dll konnte nicht geladen werden"


Global ShowProgress(hwnd%, completed%, total%, state%)"Win32" = GetProcAddress(DllHandle,"_ShowProgress@16")

Const TBPF_NOPROGRESS = 0, TBPF_INDETERMINATE = 1, TBPF_NORMAL = 2, TBPF_ERROR = 4, TBPF_PAUSED = 8


AppTitle = "Superbar-Test"

Graphics 100,15


Local hwnd = GetForegroundWindow()
SetWindowLongA(hwnd,-20,128)

Local i# = 0, state = 2
SetColor 0,230,0

Local timer:TTimer = CreateTimer(20)


Repeat

ShowProgress(hwnd,Int(i),100,state)

i :+ 1

If i > 100

i = 0

If state = 2

state = 4

SetColor 230,0,0

ElseIf state = 4

state = 8

SetColor 255,200,0

ElseIf state = 8

state = 2

SetColor 0,230,0

EndIf

EndIf

DrawText Int(i)+"% | State: "+state,0,0

Flip 0

Cls

WaitTimer timer

Until KeyHit(27) Or AppTerminate()


DLL:
Download

Viel Spaß!

Mfg Nicdel
Desktop: Intel Pentium 4 2650 Mhz, 2 GB RAM, ATI Radeon HD 3850 512 MB, Windows XP
Notebook: Intel Core i7 720 QM 1.6 Ghz, 4 GB DDR3 RAM, nVidia 230M GT, Windows 7
  • Zuletzt bearbeitet von Nicdel am Mi, Jan 13, 2010 16:56, insgesamt einmal bearbeitet

ozzi789

BeitragDi, Jan 12, 2010 18:43
Antworten mit Zitat
Benutzer-Profile anzeigen
wau, sieht ja mal richtig cool aus!
Werd ich wahrscheinlich noch öfters brauchen können Very Happy



thnx
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5

blackgecko

BeitragDi, Jan 12, 2010 19:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Also bei mir funktioniert das nicht. Sad
Das kleine Fenster mit dem Status wird angezeigt, nacheinander in grün, gelb und rot, aber in der Taskleiste sieht man nichts davon.
Statusleisten vom Windows Explorer dagegen werden auf die Taskleiste übertragen.
So long and thanks for all the fish.
Fedora 17 | Windows 7 || BlitzPlus | BlitzMax
Rechtschreibflame GO!!! Deppenapostroph | SeidSeit | Deppenakzent | DassDas | Deppenleerzeichen | TodTot | enzigste.info - Ja, ich sammel die.

Jo0oker

BeitragDi, Jan 12, 2010 19:58
Antworten mit Zitat
Benutzer-Profile anzeigen
Nicdel,
könntest du auch deinen C++ Code mitgeben :>?

lg Jo0oker
Tehadon, das kostenlose 3D RPG
www.tehadon.de
http://www.blitzforum.de/worklogs/14/
Das Abenteuer wird beginnen!

Nicdel

BeitragDi, Jan 12, 2010 20:02
Antworten mit Zitat
Benutzer-Profile anzeigen
@ozzi: Danke Smile

@blackgecko: Das ist seltsam, denn der Explorer verwendet die selben Funktionen Confused
(Kann aber auch einen anderen Grund geben, warum es bei B+ nicht geht...)

@Jo0oker: Klar, kein Problem:
Code: [AUSKLAPPEN]
BBDECL void BBCALL ShowProgress(HWND hwnd, int completed, int total, int state)
{

   ITaskbarList3 *tl3 = NULL;

   HRESULT hr = CoCreateInstance(CLSID_TaskbarList, NULL, CLSCTX_INPROC_SERVER,
    __uuidof(ITaskbarList3), (void **)&tl3);

   hr = tl3->HrInit();

   hr = tl3->SetProgressValue(hwnd, completed, total);
   hr = tl3->SetProgressState(hwnd, (TBPFLAG) state);

}
Desktop: Intel Pentium 4 2650 Mhz, 2 GB RAM, ATI Radeon HD 3850 512 MB, Windows XP
Notebook: Intel Core i7 720 QM 1.6 Ghz, 4 GB DDR3 RAM, nVidia 230M GT, Windows 7

Jo0oker

BeitragDi, Jan 12, 2010 20:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Welche header braucht man?
Nur windows.h?

lg Jo0oker
Tehadon, das kostenlose 3D RPG
www.tehadon.de
http://www.blitzforum.de/worklogs/14/
Das Abenteuer wird beginnen!

Nicdel

BeitragDi, Jan 12, 2010 20:07
Antworten mit Zitat
Benutzer-Profile anzeigen
windows.h und shobjidl.h
Desktop: Intel Pentium 4 2650 Mhz, 2 GB RAM, ATI Radeon HD 3850 512 MB, Windows XP
Notebook: Intel Core i7 720 QM 1.6 Ghz, 4 GB DDR3 RAM, nVidia 230M GT, Windows 7

ozzi789

BeitragDi, Jan 12, 2010 20:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Funktioniert tatsächlich nicht mit B+ (1.47), vlt könnt ihr ja da was machen Wink
Wär toll

mfg
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5

BtbN

BeitragDi, Jan 12, 2010 21:49
Antworten mit Zitat
Benutzer-Profile anzeigen
Nicdel hat Folgendes geschrieben:
Code: [AUSKLAPPEN]
BBDECL void BBCALL ShowProgress(HWND hwnd, int completed, int total, int state)
{

   ITaskbarList3 *tl3 = NULL;

   HRESULT hr = CoCreateInstance(CLSID_TaskbarList, NULL, CLSCTX_INPROC_SERVER,
    __uuidof(ITaskbarList3), (void **)&tl3);

   hr = tl3->HrInit();

   hr = tl3->SetProgressValue(hwnd, completed, total);
   hr = tl3->SetProgressState(hwnd, (TBPFLAG) state);

}


Bei mir gibt CoCreateInstance einen fehler zurück und setzt den pointer erst recht nicht auf irgend einen Wert, hab damit auch schon rum probiert, aber ka, worans da scheitert.

Nicdel

BeitragDi, Jan 12, 2010 21:53
Antworten mit Zitat
Benutzer-Profile anzeigen
CoCreateInstance ist tatsächlich etwas seltsam. Bis vor kurzem hab ich auch nur einen Fehler bekommen (Fehlercode 0x2: File does not exist), plötzlich gings dann.
Desktop: Intel Pentium 4 2650 Mhz, 2 GB RAM, ATI Radeon HD 3850 512 MB, Windows XP
Notebook: Intel Core i7 720 QM 1.6 Ghz, 4 GB DDR3 RAM, nVidia 230M GT, Windows 7

BtbN

BeitragDi, Jan 12, 2010 21:58
Antworten mit Zitat
Benutzer-Profile anzeigen
Mit welchen flags hast du die DLL gelinkt, welche header inkludierst du alle?
Edit: Und gäbs ne möglichkeit, an den ganzen Code/Projekt/Compile Script zu kommen?

Nicdel

BeitragDi, Jan 12, 2010 22:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Flags:
CommandLine hat Folgendes geschrieben:
/Zi /nologo /W3 /WX- /O2 /Oi /Oy- /GL /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_USRDLL" /D "WIN7SUPERBAR_EXPORTS" /D "_WINDLL" /D "_UNICODE" /D "UNICODE" /Gm- /EHsc /MT /GS /Gy /fp:precise /Zc:wchar_t /Zc:forScope /Yu"StdAfx.h" /Fp"Release\Win7Superbar.pch" /Fa"Release\" /Fo"Release\" /Fd"Release\vc100.pdb" /Gd /analyze- /errorReport:queue


Header:
Arrow windows.h
Arrow shobjidl.h

Edit:
Ja, gibt es, ich hab's hochgeladen: http://www.mcrs.eu/files/temp/Win7Superbar.rar
Sollte alles dabei sein, wenn nicht -> PN.
Desktop: Intel Pentium 4 2650 Mhz, 2 GB RAM, ATI Radeon HD 3850 512 MB, Windows XP
Notebook: Intel Core i7 720 QM 1.6 Ghz, 4 GB DDR3 RAM, nVidia 230M GT, Windows 7

Jo0oker

BeitragDi, Jan 12, 2010 22:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Was für eine IDE nutzt du?

Kann die Solution mit keinem Studio öffnen:
VS 2010, 2008 Pro, Express, mit garnichts ):

lg Jo0oker
Tehadon, das kostenlose 3D RPG
www.tehadon.de
http://www.blitzforum.de/worklogs/14/
Das Abenteuer wird beginnen!

Nicdel

BeitragDi, Jan 12, 2010 22:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Echt? Ich verwende VS 2010 Premium...
Desktop: Intel Pentium 4 2650 Mhz, 2 GB RAM, ATI Radeon HD 3850 512 MB, Windows XP
Notebook: Intel Core i7 720 QM 1.6 Ghz, 4 GB DDR3 RAM, nVidia 230M GT, Windows 7

Jo0oker

BeitragDi, Jan 12, 2010 22:39
Antworten mit Zitat
Benutzer-Profile anzeigen
Also ich nutze die Prof 2010 Beta und kann es nicht öffnen...

lg Jo0oker
Tehadon, das kostenlose 3D RPG
www.tehadon.de
http://www.blitzforum.de/worklogs/14/
Das Abenteuer wird beginnen!

ozzi789

Betreff: Fix für B+

BeitragMi, Jan 11, 2012 10:01
Antworten mit Zitat
Benutzer-Profile anzeigen
So funktioniert es auch mit B+, liegt daran das "SystemProperty("AppHWND")" nur in B3D seit V.1.88 funktioniert.

Code: [AUSKLAPPEN]
;user32.decls
:api_FindWindow% (lpClassName$, lpWindowName$) : "FindWindowA"

AppTitle("Superbar-Test")
hwnd = api_FindWindow("BLITZMAX_WINDOW_CLASS", "Superbar-Test")



Viel Spass damit Very Happy
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5

BladeRunner

Moderator

BeitragMi, Jan 11, 2012 10:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Ozzi, könntest Du die zwei Jahre alten Leichen ruhen lassen?
Wir haben den rot geschriebenen Hinweis dass der Thread sehr alt ist nicht ohne Grund in die Antwortseite reingebaut.
Danke.
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92

FireballFlame

BeitragDo, Jan 12, 2012 0:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Es wäre doch aber sicher eine nützliche Ergänzung für jemanden, der noch B+ benutzt, oder?
PC: Intel Core i7 @ 4x2.93GHz | 6 GB RAM | Nvidia GeForce GT 440 | Desktop 2x1280x1024px | Windows 7 Professional 64bit
Laptop: Intel Core i7 @ 4x2.00GHz | 8 GB RAM | Nvidia GeForce GT 540M | Desktop 1366x768px | Windows 7 Home Premium 64bit

Propellator

BeitragDo, Jan 12, 2012 1:16
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich bin mir nicht sicher ob man heutzutage das Benutzen von B+ noch in irgend einer Art unterstützen, geschweige denn Fördern sollte. Da es wirklich nur noch etwa 2 bis 3 Leute gibt (vermute ich anhand der Aktivität hier) die B+ benutzen, lohnt es sich in meinen Augen nicht einen alten Thread auszugraben, besonders wegen einem simplen Workaround wie diesem. Nicht umsonst gibt es für WinAPI-Funktionen MSDN.

Ebenfalls frage ich mich, was "BLITZMAX_WINDOW_CLASS" soll.
Propellator - Alles andere ist irrelephant.
Elefanten sind die Könige der Antarktis.

FireballFlame

BeitragDo, Jan 12, 2012 1:42
Antworten mit Zitat
Benutzer-Profile anzeigen
Propellator hat Folgendes geschrieben:
Ich bin mir nicht sicher ob man heutzutage das Benutzen von B+ noch in irgend einer Art unterstützen, geschweige denn Fördern sollte.
Was soll das denn heißen, dann könnten wir ja auch gleich den BlitzPlus-Teil aus dem Forum löschen.
Vielleicht interessiert der Fix ja wirklich keinen, aber da hier im Userlibs-Unterforum noch weniger los ist als in dem von Blitz+, finde ich das nicht sonderlich störend Rolling Eyes
PC: Intel Core i7 @ 4x2.93GHz | 6 GB RAM | Nvidia GeForce GT 440 | Desktop 2x1280x1024px | Windows 7 Professional 64bit
Laptop: Intel Core i7 @ 4x2.00GHz | 8 GB RAM | Nvidia GeForce GT 540M | Desktop 1366x768px | Windows 7 Home Premium 64bit

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen


Übersicht BlitzBasic DLLs und Userlibs

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group