none
DeskBand RRS feed

  • Frage

  • Hallo zusammen,

    wie kann ich mit Visual Basic 2010 ein DeskBand (in der TaskBar) erstellen? Habe lange gegoogelt, aber nichts gefunden.

    Vielen Dank!

    VG, Stefan

    Donnerstag, 1. Juli 2010 19:33

Antworten

Alle Antworten

  • Hallo Stefan,

    hier gibt es einen Artikel auf codeproject: http://www.codeproject.com/KB/shell/dotnetbandobjects.aspx

    das ist zwar c# aber besser als nichts ;-)


    Hannes

    If you have got questions about this, just ask.
    Mark the thread as answered if the answer helps you. This helps others who have the same problem !
    C# to VB.NET: http://www.developerfusion.com/tools/convert/csharp-to-vb/
    Freitag, 2. Juli 2010 07:35
  • Danke Hannes & Robert,

    scheint doch etwas schwieriger zu sein mit VB. Wenn ich mit Hilfe der Links etwas Sinnvolles zustande bringe, werde ich es hier kundtun...

    Freitag, 2. Juli 2010 21:37
  • Anleitung zur Erstellung eines DeskBands mit VB

    1.      Verweise (siehe auch bei Robert und Hannes)

    Eine Beschreibung für C# ist hier

    http://www.codeproject.com/KB/shell/dotnetbandobjects.aspx

     

    Der VB-SourceCode für das Projekt ist hier

    http://social.msdn.microsoft.com/Forums/fr-FR/vbasicfr/thread/4ed07f1a-97b7-45e5-8cb5-8aef58f50508 - a3fadcd1-d9f7-4b4f-814b-8514f75de4a2

     

    2.      Anleitung

    2.1.   Die Dateien hier Download source files - 118 Kb downloaden.

    2.2.   Daraus die Datei BandObjectsLib.dll und Interop.SHDocVw.dll im Global Assembly Cache registrieren. Wie das geht steht hier: http://msdn.microsoft.com/de-de/library/ex0ss12c.aspx

    2.3.   In Visual Studio ein neues Projekt vom Typ Klassenbibliothek erstellen und den Code einfügen:

    Imports System
    Imports System.ComponentModel
    Imports System.Windows.Forms
    Imports BandObjectsLib
    Imports System.Runtime.InteropServices
    
    Namespace SampleBars
    
      '<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
      <Guid("17A34106-412A-4f07-83A9-456377F0F4C8"), BandObject("Hello test", BandObjectStyle.Horizontal Or BandObjectStyle.ExplorerToolbar Or BandObjectStyle.TaskbarToolBar, HelpText:="Shows bar test")> _
      Public Class testoolbar
        Inherits BandObject
    
        Private button1 As System.Windows.Forms.Button
    
        Private components As System.ComponentModel.Container = Nothing
    
        Public Sub New()
          MyBase.New()
          InitializeComponent()
        End Sub
    
        Protected Overrides Sub Dispose(ByVal disposing As Boolean)
          If disposing Then
            If (Not (components) Is Nothing) Then
              components.Dispose()
            End If
          End If
          MyBase.Dispose(disposing)
        End Sub
    
        Private Sub InitializeComponent()
          Me.button1 = New System.Windows.Forms.Button
          Me.SuspendLayout()
          '
          ' button1
          '
          Me.button1.Anchor = (((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Bottom) _
                Or System.Windows.Forms.AnchorStyles.Left) _
                Or System.Windows.Forms.AnchorStyles.Right)
          Me.button1.BackColor = System.Drawing.SystemColors.HotTrack
          Me.button1.ForeColor = System.Drawing.SystemColors.Info
          Me.button1.Name = "button1"
          Me.button1.Size = New System.Drawing.Size(150, 24)
          Me.button1.TabIndex = 0
          Me.button1.Text = "Say test"
          AddHandler button1.Click, AddressOf Me.button1_Click
          '
          ' HelloWorldBar
          '
          Me.Controls.AddRange(New System.Windows.Forms.Control() {Me.button1})
          Me.MinSize = New System.Drawing.Size(150, 24)
          Me.Name = "Helloteste"
          Me.Size = New System.Drawing.Size(150, 24)
          Me.Title = "Helloteste"
          Me.ResumeLayout(False)
        End Sub
    
        Private Sub button1_Click(ByVal sender As Object, ByVal e As System.EventArgs)
          MessageBox.Show("test ....")
        End Sub
    
      End Class
    End Namespace
    
    

    2.4   Im Modul AssemblyInfo.vb muss hier <Assembly: ComVisible(True)> stehen.

    2.5.   Daraus eine DLL-Datei erstellen.

    2.6.   Ein Schlüsselpaar erstellen   http://msdn.microsoft.com/de-de/library/6f05ezxy(v=VS.80).aspx

    2.7.   Die unter 2.4. erzeugte Datei mit dem unter 2.5. generierten starken Namen signieren:

    http://msdn.microsoft.com/de-de/library/xc31ft41(v=VS.80).aspx

    2.8.   Selbige (die DLL) ebenfalls im Global Assembly Cache registrieren.

    2.9.   Mit dem Assembly Registration-Tool die erforderlichen Einträge bzgl. der neuen DLL in der Registrierung erstellen: http://msdn.microsoft.com/de-de/library/tzat5yw6(VS.80).aspx

    2.10. Im InternetExplorer kann nun über Extras\Symbolleisten die neue Leiste hinzugefügt werden.

     

    Thorsten Dörfler gebührt alle Ehre, er hat mir bei diesem Projekt an den entscheidenden Punkten, an denen ich nicht mehr weiterkam, immer sofort die richtige Lösung präsentiert! Vielen Dank Thorsten!

    Natürlich auch Danke an Robert und Hannes für die nützlichen Links und alle anderen, welche sich Gedanken zu diesem Fall gemacht haben!

    Samstag, 3. Juli 2010 21:20
  • Hallo Stefan,

    2.8.   Mit dem Assembly Registration-Tool die erforderlichen Einträge bzgl. der neuen DLL in der Registrierung erstellen: http://msdn.microsoft.com/de-de/library/tzat5yw6(VS.80).aspx

    Leider hat gerade der letzte Schritt bei mir nicht funktioniert. Das Programm regasm.exe teilte mir mit: RegAsm : warning RA000 : Es wurden keine Typen registriert .

    Hast Du Das ComVisible Attribut Deines Assembly auf True gesetzt?

    ' AssemblyInfo.vb
    <Assembly: ComVisible(True)>
    

    Die AssemblyInfo.vb findest Du unter "My Project", nachdem Du im Projektexplorer die Option "Alle Dateien" gewählt hast. Oder in den Projekt Eigenschaften > Assembly Information [X] Make assembly COM-visible


    Thorsten Dörfler
    Microsoft MVP Visual Basic
    vb-faq.de
    Samstag, 3. Juli 2010 21:29
    Moderator
  • RegAsm : warning RA000 : Es wurden keine Typen registriert

    Auf Codeproject [unten bei Kommentare] und mit Google finden sich dazu etwa:

    In den Projekt-Einstellungen fehlt evtl. ComVisible = true,
    oder eine deiner alten DLL-Assembly ist schon registriert und/oder im GAC (bitte entfernen),
    oder Konflikt mit der GUID.

     

    Samstag, 3. Juli 2010 21:30
  • Hallo Thorsten,

    genau das wars. Vielen Dank nochmals für Deine tolle Hilfe in diesem Projekt!!!

    Die Beschreibung habe ich entsprechend abgeändert (s.o.).

    VG Stefan

    Sonntag, 4. Juli 2010 09:23
  • Hallo Thomas,

    ComVisible = True wars!!!

    Dankeschön!!!

    VG Stefan

    Sonntag, 4. Juli 2010 09:30
  • Hallo nochmal,

    die TaskbarToolBar funktioniert bei mir jedoch nicht.

    Wenn noch jemand eine Idee hat, würde es mich freuen.

    VG Stefan

    Sonntag, 4. Juli 2010 10:40
  • die TaskbarToolBar funktioniert bei mir jedoch nicht.
    etwas dürftige Aussage, ohne Fehlerbeschreibung.
    Nur mal zur Sicherheit, welches Windows (7/Vista), etwa 64-Bit?
    Sonntag, 4. Juli 2010 11:13
  • Ja, ist Windows7 64-Bit Professional.
    Ich denke mal, man sollte nach dem Erstellen der Eintäge in der Registrierung, über rechte Maus\Symbolleisten die neue Leiste hinzufügen können. Was eben gerade nicht geht.

    Im Internetexplorer geht es zumindest via Extras\Symbolleisten...

    Sonntag, 4. Juli 2010 12:09
  • Windows7 64-Bit Professional.

    dann müssen wohl alle beteiligten Projekte (DLLs/Assemblies) auf 64-Bit umgestellt werden, im 'einfachsten' Fall für .NET müsste die Zielplattform auf 'AnyCPU' umgestellt werden, dann alles neu kompilieren und registrieren.
    Vorsicht, das gilt höchstwahrscheinlich _auch_ für alles aus jenem CodeProject ZIP verwendete/referenzierte; enthält anscheinend sogar irgendwelche C++ (Hilf-) DLLs, welche uU aufwändiger zu migrieren sind.
    Sonntag, 4. Juli 2010 12:17
  • Windows7 64-Bit Professional.
    Im Internetexplorer geht es...

    weiter, den Internet-Explorer gibt es bei 64-Bit OS zweifach (32+64bittig)!
    Falls du beide unterstützen willst, musst du auch 'doppelt' arbeiten, zumindest für native (C++) Code und die Einträge in Registry.
    Sonntag, 4. Juli 2010 12:22
  • Hallo Thomas,

    Du hast Recht, es funktioniert auch bloß bei dem 32-bit IE.

    Für meine eigene DLL habe ich in den Projekteigenschaften unter Debuggen die Plattform auf Aktiv (Any CPU ) gesetzt, ich denke, dass hast Du gemeint. Danach neue DLL erstellt + gacutil + regasm.

    Nur wie kann ich die BandObjectsLib.dll umstellen?

    Ich habe die gesamte Projektmappe runtergeladen, incl. der BandObjects2.0.sln , diese ist aber mit VS C# geschrieben und man kann sie offensichtlich nicht mit VS2010 VB öffnen?

    VG Stefan

    Sonntag, 4. Juli 2010 13:05
  • Ich habe die gesamte Projektmappe runtergeladen, incl. der BandObjects2.0.sln , diese ist aber mit VS C# geschrieben und man kann sie offensichtlich nicht mit VS2010 VB öffnen?

    wenn du nur die 'Express' VB2010 hast, dann geht C# natürlich nicht.
    Da brauchst du mind. die C#2010 Express dazuinstallieren  (was sowieso oft von Vorteil ist).
    Aber evtl. war der C# -Teil ab CodeProject schon (historisch) als AnyCPU voreingestellt/kompiliert.
    Zu RegAsm wäre offen, ob die 64-Bit Version (etwa unter:
     "C:\Windows\Microsoft.NET\Framework64\v4.0.30319\RegAsm.exe"
    zu nehmen ist.

    P.S. was die Register/RegisterLib C++ Projekte aus dem ZIP sollen, mag ich gerade nicht prüfen.

    Sonntag, 4. Juli 2010 13:36
  • Hallo Thomas,

    danke für deine nützlichen Antworten.

    Habe nun mit C:\Windows\Microsoft.NET\Framework64\v4.0.30319\RegAsm.exe registriert. Und siehe da - nun erscheint der Button auch im 64-bit IE und nun auch in der Taskleiste .

    Allerdings erscheint beim Einbinden via rechte Maus auf Taskleiste\Symbolleisten die Meldung:

    "Die Symbolleiste ... ist mit dieser Version von Windows nicht kompatibel. Wenn der Vorgang fortgesetzt wird, wird die Symbolleiste möglicherweise nicht ordnungsgemäß angezeigt. Wenn Sie eine Überprüfung auf eine aktualisiert Version ausführen möchten, besuchen Sie die Webseite des Softwareherausgebers. Soll die Symbolleiste auf Ihrer Taskleiste angezeigt werden?"

    Die Symbolleiste wird dann aber korrekt angezeigt.

    Vermute, dass nun eben noch die BandObjectsLib.dll anzupassen ist.

    VG Stefan

     

    Sonntag, 4. Juli 2010 14:27
  • Allerdings immer noch nicht in der Taskeiste...
    Vielleicht liegt es doch noch an etwas Anderem?

    wenn seitens Code/Registrierung alles stimmt,
    würde ich sagen: PC mal neu starten  (bzw logoff+login)

     

    Sonntag, 4. Juli 2010 14:35
  • Ja (mit Einschränkungen), habe meine Antwort eben nochmals angepasst (s.o.).
    Sonntag, 4. Juli 2010 14:39
  • mit Einschränkungen..mit dieser Version von Windows nicht kompatibel

    riecht verdächtig nach dem Windows Admin/UAC-Krampf (Manifest usw)?
     [dem mag ich dann aber an einem Sonntag nicht nachgehen, ist bei mir eh immer aus]
    Was Entwickler da alles zu beachten haben ist in MSDN beschrieben.
    Sonntag, 4. Juli 2010 14:55
  • "Die Symbolleiste ... ist mit dieser Version von Windows nicht kompatibel. Wenn der Vorgang fortgesetzt wird, wird die Symbolleiste möglicherweise nicht ordnungsgemäß angezeigt.

    suche (engl) wäre wohl:
    http://www.google.com/search?q=%22toolbar+might+appear+incorrectly%22

    ergibt evtl., dass eine neuere Version eines COM-Interfaces nötig sei:
    http://www.google.com/search?q=IDeskBand2
    http://www.pinvoke.net/default.aspx/Interfaces/IDeskBand2.html

     

    Sonntag, 4. Juli 2010 15:43