Toon posts:

[VB6] Windows XP uiterlijk gebruiken in shell extensions

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik ben de laatste tijd bezig met het programmeren van shell extensions in Visual Basic 6. Ik compileer deze projecten als ActiveX DLL's. Nu wil ik graag dat wanneer deze programma's opgestart worden vanuit Windows XP alle componenten het XP uiterlijk gebruiken. Omdat deze extensions opgestart worden door de Windows verkenner kan je niet zomaar een manifest bestand in de map van de DLL zetten. Ik zal hieronder even alle stappen beschrijven die ik tot nu toe heb genomen.

Manifest mbv resource bestand mee compileren

Programma.dll.manifest (704 Bytes)
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
    <assemblyIdentity
        version="1.0.0.0"
        processorArchitecture="X86"
        name="Programma"
        type="win32"/>

    <description>Programma</description>

    <dependency>
        <dependentAssembly>
            <assemblyIdentity
                type="win32"
                name="Microsoft.Windows.Common-Controls"
                version="6.0.0.0"
                processorArchitecture="X86"
                publicKeyToken="6595b64144ccf1df"
                language="*"/>
        </dependentAssembly>
    </dependency>
</assembly>

Dit manifest bestand compileer ik in mijn resource bestand met het volgende resource script:

Programma.rc
code:
1
2 24 Programma.dll.manifest


Common controls laden

Ik laad ComCtl32 in met de volgende code:

Visual Basic:
1
2
3
4
5
6
7
Private Declare Function InitCommonControls _
                Lib "comctl32.dll" () As Long

 
Private Sub Form_Initialize()
    InitCommonControls
End Sub

Het werkt echter nog niet. Ik krijg nog steeds de (ouderwetse) grijze knoppen.

Ik heb de tutorial op MSDN gevolgd. Wie kan mij vertellen waarom mijn programma's niet het Windows XP uiterlijk aannemen?

  • whoami
  • Registratie: December 2000
  • Laatst online: 17:38
Draai je je programma wel op windows XP?

https://fgheysels.github.io/


  • flexje
  • Registratie: September 2001
  • Laatst online: 19-08 18:51

flexje

got-father

Heb je toevallig de classic theme aan? volgens mij pakt ie em alleen als je de "teletubbie" themes gebruikt...

// Btw: ik heb hier nog een hele goeie site over de .net / winxp themes in vb6:
http://www.vbsmart.com/index.htm

[ Voor 40% gewijzigd door flexje op 24-10-2003 09:43 ]

"Try not to become a man of success but rather to become a man of value..."


Verwijderd

Topicstarter
Ik het blauwe "teletubbie" theme aan staan dus daar zou het niet aan moeten liggen.

Op die website staat helaas niets over shell extensions en implementeren van het Windows XP uiterlijk...

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

Verwijderd schreef op 23 October 2003 @ 20:28:
Omdat deze extensions opgestart worden door de Windows verkenner kan je niet zomaar een manifest bestand in de map van de DLL zetten.
Maar werkt het wel als je dat wel doet? :?

Je kunt het overigens voor mekaar krijgen door een 'late load' van de DLL, maar dat is knap omslachtig...

Professionele website nodig?


  • flexje
  • Registratie: September 2001
  • Laatst online: 19-08 18:51

flexje

got-father

Probeer deze is:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
  <assembly 
     xmlns="urn:schemas-microsoft-com:asm.v1" 
     manifestVersion="1.0"> 
  <assemblyIdentity 
     version="1.0.1086.39714" 
     processorArchitecture="X86" 
     name=" " 
     type="win32" /> 
  <dependency> 
     <dependentAssembly> 
       <assemblyIdentity 
         type="win32" 
         name="Microsoft.Windows.Common-Controls" 
         version="6.0.0.0" 
         processorArchitecture="X86" 
         publicKeyToken="6595b64144ccf1df" 
         language="*" /> 
       </dependentAssembly> 
    </dependency> 
  </assembly> 

Bij mij doet deze het wel...

[ Voor 82% gewijzigd door flexje op 25-10-2003 11:21 ]

"Try not to become a man of success but rather to become a man of value..."


Verwijderd

Topicstarter
curry684 schreef op 25 oktober 2003 @ 09:54:
[...]

Maar werkt het wel als je dat wel doet? :?

Je kunt het overigens voor mekaar krijgen door een 'late load' van de DLL, maar dat is knap omslachtig...
Nee, helaas is het niet zo simpel.

Wat houd late load precies in dan en wat kan je dan wel voor elkaar krijgen?
flexje schreef op 25 oktober 2003 @ 11:19:
Probeer deze is:

...

Bij mij doet deze het wel...
Bij mij niet. Heb je deze gebruikt voor een stand-alone programma of een DLL in de vorm van een shell extension?

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

Verwijderd schreef op 25 October 2003 @ 17:07:
Wat houd late load precies in dan en wat kan je dan wel voor elkaar krijgen?
Late load bedoel ik 'dynamisch linken' mee. Normaliter link je statisch DLL's mee, wat inhoudt dat je de DLL functies kunt gebruiken alsof ze onderdeel zijn van je programma. Dynamisch linken houdt in dat je LoadLibrary en GetProcAddress API calls gebruikt. Op die manier kun je hard de ComCtl32.dll versie 6 binnentrekken indien aanwezig en de calls daarin hard gebruiken. Dit is overigens erg omslachtig en echt 'last resort'.

Ik weet overigens niet wie een shell extension draait: is dat rundll32.exe of explorer.exe zelf? In het eerste geval: klik hier. In het 2e geval: klik hier. :)

Professionele website nodig?


  • whoami
  • Registratie: December 2000
  • Laatst online: 17:38
Staat je manifest file in dezelfde directory als je dll-file?
Staat de flatstyle property van de controls op System?

https://fgheysels.github.io/


Verwijderd

Topicstarter
whoami schreef op 27 October 2003 @ 09:27:
Staat je manifest file in dezelfde directory als je dll-file?
Nee, die zit nu in het resource bestand.
whoami schreef op 27 October 2003 @ 09:27:
Staat de flatstyle property van de controls op System?
Nee, maar de Style instelling staat wel op 0 (Standard).

  • whoami
  • Registratie: December 2000
  • Laatst online: 17:38
Die (flat)style moet je zowiezo op System zetten. Dit is nodig om die controls de goeie 'look' te laten geven.

Hoe je het precies met VB6 moet doen weet ik niet, maar ik heb het vandaag ff met C# geprobeerd (werkwijze is gelijk met VB.NET), en daar moest je de manifest in dezelfde directory zetten als de assembly.

https://fgheysels.github.io/


  • flexje
  • Registratie: September 2001
  • Laatst online: 19-08 18:51

flexje

got-father

whoami schreef op 27 October 2003 @ 19:04:
Die (flat)style moet je zowiezo op System zetten. Dit is nodig om die controls de goeie 'look' te laten geven.

Hoe je het precies met VB6 moet doen weet ik niet, maar ik heb het vandaag ff met C# geprobeerd (werkwijze is gelijk met VB.NET), en daar moest je de manifest in dezelfde directory zetten als de assembly.
Klopt, is idd ook met vb... vaag dat het bij mij wel werkt en bij jou niet

[ Voor 4% gewijzigd door flexje op 27-10-2003 22:54 ]

"Try not to become a man of success but rather to become a man of value..."


  • Tranq
  • Registratie: Oktober 1999
  • Laatst online: 16-10-2024
ik weet dat sommige controls (meegeleverd met vb6) niet werken met XP style...omdat deze keihard zitten ingebakken...

wat je eventueel kan doen is een test projectje maken (form met wat controls)...dan die code er in en de programmaexenaam.exe.manifest er bij gooien...kijken wat er gebeurd

Als je design-time/run-time XP-style uiterlijk wilt hebben moet je vb6 op eenzelfde manier opstarten...
Pagina: 1