[vb6] Extra knop in titlebar van extern programma

Pagina: 1
Acties:

  • Pc123
  • Registratie: Oktober 2000
  • Laatst online: 21-09 22:10
Ik ben op zoek naar een manier waarop ik in VB6 een extra knop aan de titlebar van een extern progje (dus niet t progje zelf, maar een ander draaiend progje) toe kan voegen.

Het gaat om een knop naast de minimize-knop, de plek die ook wordt gebruikt voor minimize-to-tray knoppen, door b.v. GetRight.

Met subclassing kan ik een knop toevoegen aan m'n eigen progje, maar als ik de hwnd van een ander progje gebruik, dan werkt het niet (ik kan overigs wel andere dingen met dat externe progje doen, zoals maximaliseren).

Weet iemand of er een manier is om zo'n knop toe te voegen? Steeds de positie van het venster checken en dan de knop tekenen werkt niet goed, als je het venster dan beweegt, gaat de knop niet vloeiend mee.

  • johnwoo
  • Registratie: Oktober 1999
  • Laatst online: 14:51

johnwoo

3S-GTE

Op zaterdag 22 september 2001 18:47 schreef Pc123 het volgende:
Ik ben op zoek naar een manier waarop ik in VB6 een extra knop aan de titlebar van een extern progje (dus niet t progje zelf, maar een ander draaiend progje) toe kan voegen.

Het gaat om een knop naast de minimize-knop, de plek die ook wordt gebruikt voor minimize-to-tray knoppen, door b.v. GetRight.

Met subclassing kan ik een knop toevoegen aan m'n eigen progje, maar als ik de hwnd van een ander progje gebruik, dan werkt het niet (ik kan overigs wel andere dingen met dat externe progje doen, zoals maximaliseren).

Weet iemand of er een manier is om zo'n knop toe te voegen? Steeds de positie van het venster checken en dan de knop tekenen werkt niet goed, als je het venster dan beweegt, gaat de knop niet vloeiend mee.
Klopt, je kan natuurlijk niet buiten het address space van je eigen proggel gaan werken, dus subclassen wordt lastig. Ik geloof dat er wel een manier voor was, maar dat gaat behoorlijk diep (8>

4200Wp ZO + 840Wp ZW + 1680Wp NW | 14xIQ7+ + 1xDS3-L | MTVenusE | HWP1


  • Pc123
  • Registratie: Oktober 2000
  • Laatst online: 21-09 22:10
Op zaterdag 22 september 2001 19:27 schreef johnwoo het volgende:

[..]

Klopt, je kan natuurlijk niet buiten het address space van je eigen proggel gaan werken, dus subclassen wordt lastig. Ik geloof dat er wel een manier voor was, maar dat gaat behoorlijk diep (8>
Precies, dat is het probleem. Weet je toevallig waar je ergens die oplossing hebt gezien? Misschien helpt het me wat verder.

Verwijderd

Jah een globalhook of systemwidehook (is het zelfde) maar die kan je niet zetten vanuit vb, moet je in dll prakken dus in C of delphi oid doen..

Verwijderd

Op zaterdag 22 september 2001 18:47 schreef Pc123 het volgende:
Ik ben op zoek naar een manier waarop ik in VB6 een extra knop aan de titlebar van een extern progje (dus niet t progje zelf, maar een ander draaiend progje) toe kan voegen.
Had deze URL nog ergens. Geen VB maar wel nuttige sourcecode enzo. Hope it helps.

http://www.beesknees.freeserve.co.uk/articles/hooks.html

  • Pc123
  • Registratie: Oktober 2000
  • Laatst online: 21-09 22:10
Op zaterdag 22 september 2001 20:17 schreef Yarvieh het volgende:
Jah een globalhook of systemwidehook (is het zelfde) maar die kan je niet zetten vanuit vb, moet je in dll prakken dus in C of delphi oid doen..
Zou de beste oplossing zijn inderdaad, de code van Nerv lijkt goed te zijn. In principe gaat het alleen om het toevoegen van één bepaalde knop aan het foreground-window, dus zo moeilijk is het niet.
Probleem is alleen dat ik helemaal geen C ken :(

Verwijderd

Leuke gelegenheid om dat te gaan leren toch?! :)

  • Pc123
  • Registratie: Oktober 2000
  • Laatst online: 21-09 22:10
Op zaterdag 22 september 2001 21:40 schreef Yarvieh het volgende:
Leuke gelegenheid om dat te gaan leren toch?! :)
Jah, k heb een paar weken geleden Visual C++ aangeschaft en k ben van plan om het te gaan leren als ik m'n huidige projecten af heb :)

Maar volgens gaat dat me flink veel tijd kosten, en dan moet dit progje al lang af zijn :(

K kan natuurlijk gewoon een wat positiecheck-teken knopje code er in zetten, maar dat ziet er niet uit als je het venster beweegt, dan "hobbelt" het knopje er achter aan >:)

K ben al wat aan het proberen met het bouwen van een DLL, maar k vat er eigenlijk nog helemaal niks van.

Verwijderd

Hier nog wat info, ook in C/C++ en voor C++ Builder magoed http://www.bytamin-c.com/Howto/subclass.htm

  • Pc123
  • Registratie: Oktober 2000
  • Laatst online: 21-09 22:10
Kent misschien iemand een begrijpbaar simpel-dll-bouw tutorial-tje? Ik hoef alleen de code die hier genoemd wordt er in te zetten, en dat als ie wordt aangeroepen een minimize-to-tray knop in de titlebar van het Foreground-window wordt gemikt (en de vorige ge-unhookt).

Verwijderd

Welke taal/product? Want dat verschilt nogal.

  • Pc123
  • Registratie: Oktober 2000
  • Laatst online: 21-09 22:10
Op zaterdag 22 september 2001 22:24 schreef Yarvieh het volgende:
Welke taal/product? Want dat verschilt nogal.
Ik heb Microsoft Visual C++ 6.

Verwijderd

Daar zit een wizard voor bij om je op weg te helpen?

  • Pc123
  • Registratie: Oktober 2000
  • Laatst online: 21-09 22:10
Die is er wel ja, maar ik moet eerlijk zeggen dat ik echt nog nooit in C++ gewerkt hebt, dus veel verder kom ik niet.

Ik denk ook niet dat het me zo gaat lukken, ik ga wel C++ leren maar k wil eerst de progjes die ik nu aan het maken ben af hebben.

Misschien moet ik maar iemand gaan zoeken die de DLL zou willen maken, maarja t wordt allemaal freeware, dus meer dan eeuwige roem bij de credits heb ik ook niet te bieden :)

  • Gerco
  • Registratie: Mei 2000
  • Laatst online: 21-09 21:55

Gerco

Professional Newbie

Ik heb een prog wat precies DAT doet. En in VB. Ik zal 'em even voor je uploaden.

En hier is 'ie dan, 100% puur VB, ik heb 'em niet gemaakt, laten we dat even voorop stellen, ik heb 'em ergens gevonden, ik zou alleen niet meer weten waar.

- "Als ik zou willen dat je het begreep, legde ik het wel beter uit!" | All number systems are base 10!


  • Pc123
  • Registratie: Oktober 2000
  • Laatst online: 21-09 22:10
Op zaterdag 22 september 2001 23:39 schreef Gerco het volgende:
Ik heb een prog wat precies DAT doet. En in VB. Ik zal 'em even voor je uploaden.
Echt? En niet met een positiecheck-teken loopje, maar dat de knop echt op het venster zit? Dat zou geweldig zijn :P

Bedankt!

Verwijderd

gerco: heb jij 'm systemwide? nee toch?

  • Gerco
  • Registratie: Mei 2000
  • Laatst online: 21-09 21:55

Gerco

Professional Newbie

Op zaterdag 22 september 2001 23:43 schreef Yarvieh het volgende:
gerco: heb jij 'm systemwide? nee toch?
Jawel, systemwide, hij zet een button op andere progjes. Ik heb mn post geedit.

- "Als ik zou willen dat je het begreep, legde ik het wel beter uit!" | All number systems are base 10!


  • Gerco
  • Registratie: Mei 2000
  • Laatst online: 21-09 21:55

Gerco

Professional Newbie

Op zaterdag 22 september 2001 23:41 schreef Pc123 het volgende:
Echt? En niet met een positiecheck-teken loopje, maar dat de knop echt op het venster zit? Dat zou geweldig zijn :P
Ik weet niet hoe 'ie werkt, nooit de moeite gedaan om het uit te zoeken, misschien wel zoals jij het zegt, want hij zet de knop alleen op het actieve window.

- "Als ik zou willen dat je het begreep, legde ik het wel beter uit!" | All number systems are base 10!


  • Pc123
  • Registratie: Oktober 2000
  • Laatst online: 21-09 22:10
Op zaterdag 22 september 2001 23:46 schreef Gerco het volgende:

[..]

Ik weet niet hoe 'ie werkt, nooit de moeite gedaan om het uit te zoeken, misschien wel zoals jij het zegt, want hij zet de knop alleen op het actieve window.
Als je het venster beweegt, gaat de knop dan net als de andere knoppen? Of gaat ie er een beetje schokkerig achteraan, wat je bij zo'n loopje krijgt?

In elk geval zou k m graag even willen zien :).

  • Gerco
  • Registratie: Mei 2000
  • Laatst online: 21-09 21:55

Gerco

Professional Newbie

Op zaterdag 22 september 2001 23:50 schreef Pc123 het volgende:
In elk geval zou k m graag even willen zien :).
Helaas, als je het window een beetje vlug sleept, dan hobbelt het knopje er een paar pixels achteraan. In puur VB is het ook niet anders te doen denk ik.

Ik heb al een link in mn post geedit, maar ik zal 'em nog even geven:

http://www.gdries.com/site/Min2Tray.rar

- "Als ik zou willen dat je het begreep, legde ik het wel beter uit!" | All number systems are base 10!


  • Pc123
  • Registratie: Oktober 2000
  • Laatst online: 21-09 22:10
Damn, is gewoon zo'n loopje :(

Kijk maar als je een venster beweegt, dan gaat dat knopje achter het venster aan, ziet er niet echt professioneel uit.

Toch bedankt.

K ga morgen wel ff wat forums langs, misschien is er ergens iemand die de dll zou willen maken.

  • Pc123
  • Registratie: Oktober 2000
  • Laatst online: 21-09 22:10
Ik heb nu de source gedownload van die Winamp plugin die knoppen in de titlebar plaatst, dat werkt prima, dus t is inderdaad goed mogelijk in MS Visual C++.

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 04-09 14:38

curry684

left part of the evil twins

Op zaterdag 22 september 2001 20:17 schreef Yarvieh het volgende:
Jah een globalhook of systemwidehook (is het zelfde) maar die kan je niet zetten vanuit vb, moet je in dll prakken dus in C of delphi oid doen..
Uit MSDN: Note: You should use global hooks only for debugging purposes; otherwise, you should avoid them. Global hooks hurt system performance and cause conflicts with other applications that implement the same type of global hook.

Lijkt me niet zo'n strak plan :?

[edit]
In de online MSDN library zijn Hooks uit de TOC bij IPC geschrapt, en als je vanuit de search er wel een referentie naar vindt geeft ie een 404 (Page Not Found).

Discontinued? :?

Professionele website nodig?


  • Pc123
  • Registratie: Oktober 2000
  • Laatst online: 21-09 22:10
Op zondag 23 september 2001 01:24 schreef curry684 het volgende:

[..]

Uit MSDN: Note: You should use global hooks only for debugging purposes; otherwise, you should avoid them. Global hooks hurt system performance and cause conflicts with other applications that implement the same type of global hook.

Lijkt me niet zo'n strak plan :?

[edit]
In de online MSDN library zijn Hooks uit de TOC bij IPC geschrapt, en als je vanuit de search er wel een referentie naar vindt geeft ie een 404 (Page Not Found).

Discontinued? :?
Valt wel mee hoor, je kunt er inderdaad een flinke crash mee veroorzaken, maar als je t goed doet is het helemaal geen probleem.

  • Pc123
  • Registratie: Oktober 2000
  • Laatst online: 21-09 22:10
Ik denk dat het het beste zou zijn als ik met een dll een bitmap als knop zou kunnen gebruiken.

Dan kan vb het knopje bouwen enzo, dan is het enige wat in C++ hoeft te doen het venster te hooken.

Op source codes sites nog niks gevonden, maar k blijf zoeken :)

  • Gerco
  • Registratie: Mei 2000
  • Laatst online: 21-09 21:55

Gerco

Professional Newbie

Ik denk dat je best bet is om een WH_CALLWNDPROC of een WH_CALLWNDPROCRET hook te zetten met SetWindowsHookEx().

Ik weet alleen niet vanuit welke thread context je hook wordt aangeroepen en in welke adress space die dll dan zit, daar krijg je problemen mee als je wilt gaan tekenen vanuit VB. Je kunt misschien vanuit die DLL wel helemaal niet een functie in VB aanroepen, omdat hij in een andere adress space zit.

- "Als ik zou willen dat je het begreep, legde ik het wel beter uit!" | All number systems are base 10!


  • Pc123
  • Registratie: Oktober 2000
  • Laatst online: 21-09 22:10
Op zondag 23 september 2001 12:43 schreef Gerco het volgende:
Ik denk dat je best bet is om een WH_CALLWNDPROC of een WH_CALLWNDPROCRET hook te zetten met SetWindowsHookEx().

Ik weet alleen niet vanuit welke thread context je hook wordt aangeroepen en in welke adress space die dll dan zit, daar krijg je problemen mee als je wilt gaan tekenen vanuit VB. Je kunt misschien vanuit die DLL wel helemaal niet een functie in VB aanroepen, omdat hij in een andere adress space zit.
Zou je gelijk in kunnen hebben inderdaad, ik heb alleen nog maar gewerkt met VB ActiveX DLL's.

In principe zou dat niet zo'n probleem zijn als de DLL maar aangeroepen kan worden.

Ik stel me zoiets voor.

* Het VB programma checkt al constant de status van het foreground window, en weet dus ook wanneer een ander venster geactiveerd wordt.

* Dan zou de DLL aangeroepen moeten worden, en het volgende doen:

1. Vorige venster unhooken, knop weg
2. Huidig foreground window hooken, knop er op zetten

VB hoeft alleen maar te weten wanneer er op de knop geklikt wordt, dit zou ook indirect doorgegeven kunnen worden, bijvoorbeeld via een regkey ofzo.

  • Gerco
  • Registratie: Mei 2000
  • Laatst online: 21-09 21:55

Gerco

Professional Newbie

Op zondag 23 september 2001 12:51 schreef Pc123 het volgende:
VB hoeft alleen maar te weten wanneer er op de knop geklikt wordt, dit zou ook indirect doorgegeven kunnen worden, bijvoorbeeld via een regkey ofzo.
Maar da's eenvoudig, je geeft de dll de hWnd van je vb prog op de 1 of andere manier en de dll stuurt dan gewoon een WM_USER+x message naar jouw window om aan te geven dat er iets met die knop gebeurt (mousemove, button down, button up, whatever). die 'x' kun je dan gebruiken voor de verschillende messages.

- "Als ik zou willen dat je het begreep, legde ik het wel beter uit!" | All number systems are base 10!


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 04-09 14:38

curry684

left part of the evil twins

Op zondag 23 september 2001 13:01 schreef Gerco het volgende:
Maar da's eenvoudig, je geeft de dll de hWnd van je vb prog op de 1 of andere manier en de dll stuurt dan gewoon een WM_USER+x message naar jouw window om aan te geven dat er iets met die knop gebeurt (mousemove, button down, button up, whatever). die 'x' kun je dan gebruiken voor de verschillende messages.
Je moet in dit geval (systemwide!!!) geen WM_USER + x gebruiken maar netjes met RegisterWindowMessage een prive systemwide message id aanvragen.

Professionele website nodig?


  • Pc123
  • Registratie: Oktober 2000
  • Laatst online: 21-09 22:10
Inderdaad, dan zal niet zo moeilijk zijn. Helaas zie ik al wel dat dit veel te moeilijk wordt voor iemand die nog nooit met C++ heeft gewerkt :'(

Het wordt een deel van een freeware progje, dus ik hoop maar dan dat ik iemand kan vinden die er aan mee wil werken.

Bedankt allemaal! :)

  • Gerco
  • Registratie: Mei 2000
  • Laatst online: 21-09 21:55

Gerco

Professional Newbie

Op zondag 23 september 2001 13:23 schreef curry684 het volgende:
Je moet in dit geval (systemwide!!!) geen WM_USER + x gebruiken maar netjes met RegisterWindowMessage een prive systemwide message id aanvragen.
OK, baas boven baas >:) , maar je hebt idd wel gelijk, ff niet aan gedacht dat het systemwide was... |:(

- "Als ik zou willen dat je het begreep, legde ik het wel beter uit!" | All number systems are base 10!

Pagina: 1