[Win32] Childwindow zoeken op naam

Pagina: 1
Acties:

  • Quitter3
  • Registratie: Januari 2001
  • Laatst online: 13-02 16:30
Ik heb een app, die een externe applicatie (Window) op zoekt.
Als hij deze gevonden heeft, zoekt hij alle children op met EnumChildWindows.

In de hieraan gekoppelde Callbackfunctie probeer ik de naam van het childitem te vinden. Hoe moet ik deze uitlezen? De classname en allerlei andere dingen zoals caption enzo kan ik allemaal vinden. Maar ik moet het veld identificeren aan de hand van zijn naam.
Ik kom er momenteel even niet meer uit.

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 12-05 22:23

curry684

left part of the evil twins

Een window heeft geen naam dus nogal wiedes dat je die niet vindt... :?

En ik vermoed dat dit Win32 is, topictitel fixed.

edit:
Als je de Windowname uit CreateWindow bedoelt, da's dus die caption die je gevonden hebt, of je bent wel een erge soepzooi van je vraag aan het maken en dan snap ik er niets van :)

[ Voor 45% gewijzigd door curry684 op 21-04-2004 11:44 ]

Professionele website nodig?


  • Quitter3
  • Registratie: Januari 2001
  • Laatst online: 13-02 16:30
Ok.

Ik zal het proberen te verduidelijken.

Ik maak een applicatie met vier editvelden. Edit1 .. Edit4.
Nu wil ik vanuit een andere applicatie Edit3 uitlezen.
Hoe identificeer ik veldje Edit3 nu als ik alle children Enumerate?

  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

En die namen Edit1 t/m Edit4 zijn de namen van de variablen? Die heb je natuurlijk niet meer als je je programm compiled. Meer als Classname en Caption krijg je niet van Windows.

Of heb je het hier over Delphi/BCB programma's? Dan kan je met de FindControl functie werken. Daar geef je een Window Handle aan mee en als er een Delphi TControl achter zit krijg je die ook. Dan kan je er mee doen wat je wilt. En dus ook TControl.Name opvragen.

We adore chaos because we like to restore order - M.C. Escher


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 12-05 22:23

curry684

left part of the evil twins

Uh ja als dit BCB oid is moet je niet op Windows-niveau die dingen op gaan zoeken, daar moet je gewoon de VCL-encapsulaties voor gebruiken. Zie btw even onze stickies voor wat betreft duidelijke openingsposts en topictitels :+

Professionele website nodig?


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 15:56

.oisyn

Moderator Devschuur®

Demotivational Speaker

LordLarry schreef op 21 april 2004 @ 14:37:
Of heb je het hier over Delphi/BCB programma's? Dan kan je met de FindControl functie werken. Daar geef je een Window Handle aan mee en als er een Delphi TControl achter zit krijg je die ook. Dan kan je er mee doen wat je wilt. En dus ook TControl.Name opvragen.
werkt dat dan ook cross-process?

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 12-05 22:23

curry684

left part of the evil twins

.oisyn schreef op 21 april 2004 @ 14:45:
[...]


werkt dat dan ook cross-process?
Als je weet waar je mee bezig bent wel, maar da's voer voor gevorderden ;)

Overigens is ie idd in een extern proces aan het zoeken dus de vraag gaat nergens over... die hebben geen VCL Name property in de meeste gevallen :z

Professionele website nodig?


  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

.oisyn schreef op 21 april 2004 @ 14:45:
werkt dat dan ook cross-process?
Niet zomaar. Je krijgt een pointer naar een TControl, maar die ligt in het andere process. Opzich heb je daar dus weinig aan tenzij je er door trukjes wel bij kan.

We adore chaos because we like to restore order - M.C. Escher


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 12-05 22:23

curry684

left part of the evil twins

LordLarry schreef op 21 april 2004 @ 15:16:
[...]


Niet zomaar. Je krijgt een pointer naar een TControl, maar die ligt in het andere process. Opzich heb je daar dus weinig aan tenzij je er door trukjes wel bij kan.
Uh als je via EnumWindows de toplevel windows enumereert moet je ranzige trucjes uit gaan halen om uit te vinden dat die HWND's die je krijgt bij een VCL window horen, en om er vervolgens een TCustomForm* uit te krijgen....

Professionele website nodig?


  • Quitter3
  • Registratie: Januari 2001
  • Laatst online: 13-02 16:30
Identificeren via de naam lukt dus niet.

Is er dan mischien een manier om de Tag property uit te lezen?
Wij gebruiken de tag property, om elk item een unieke nummer te geven.
Dit nummer is in een externe file gedefinieerd.

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 12-05 22:23

curry684

left part of the evil twins

Wat denk je nu zelf als je de VCL specifieke Name niet uit kunt lezen? :?

Professionele website nodig?


  • farlane
  • Registratie: Maart 2000
  • Laatst online: 22-05 16:53
Heb je ook controle over de externe applicatie ? Op dat moment kun je die functionaliteit ook zelf bouwen....

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


  • Quitter3
  • Registratie: Januari 2001
  • Laatst online: 13-02 16:30
Ik had inderdaad niet verwacht dat het kon. Maar goed, misschien dat er toch nog een Message bestond, die ik niet ken.
Je kunt niet alles weten.

We maken de externe applicatie inderdaad zelf. We zullen deze functionaliteit dus moeten gaan inbouwen. Is op zich ook niet zo'n probleem. Alleen de uitlevering richting klant zal toch behoorlijk wat tijd in beslag nemen (in huis testen. De klant zal eerst testen).
Een al aanwezige oplossing was makkelijker geweest.

  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

curry684 schreef op 21 april 2004 @ 15:45:
[...]

Uh als je via EnumWindows de toplevel windows enumereert moet je ranzige trucjes uit gaan halen om uit te vinden dat die HWND's die je krijgt bij een VCL window horen, en om er vervolgens een TCustomForm* uit te krijgen....
Nee, dat gedeelte valt wel mee. Delphi stopt bij ieder window ook een pointer naar de TControl en die kan je dus vrij makkelijk met FindControl opvragen. Wat je met de pointer kan in een ander process is de vraag.

/edit
Ow, ik zie wel dat FindControl een controle doet of de hwnd wel in het eigen process zit, dus FindControl zal niet werken. Maar als je de code ervan bekijkt zie je hoe het gedaan is. Er kan zelf met messages gewerkt worden om de pointer te achterhalen...

[ Voor 20% gewijzigd door LordLarry op 23-04-2004 15:58 ]

We adore chaos because we like to restore order - M.C. Escher


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 12-05 22:23

curry684

left part of the evil twins

LordLarry schreef op 23 april 2004 @ 15:55:
[...]

Nee, dat gedeelte valt wel mee. Delphi stopt bij ieder window ook een pointer naar de TControl en die kan je dus vrij makkelijk met FindControl opvragen. Wat je met de pointer kan in een ander process is de vraag.
Dat zeg ik: ranzige trucjes :) Zodra je met GetWindowLong aan de gang moet is het geen nette oplossing meer, vooral omdat je geen garantie hebt dat een niet-VCL applicatie er geen andere troep in stopt (!!!).

Professionele website nodig?


  • farlane
  • Registratie: Maart 2000
  • Laatst online: 22-05 16:53
Quitter3 schreef op 23 april 2004 @ 15:43:
We maken de externe applicatie inderdaad zelf.
Dan ga je toch lekker een eigen window message maken waarop een window reageert ? Best simpel te doen.

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 09-04 22:08
En als je toch met window messages werkt, is de hele code een heel stuk makkelijker. Je zendt gewoon de naam. De andere kant zoekt de waarde op (FindControl werkt wel in het andere proces) en retourneert de gezochte waarde, weer in een window message.

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein

Pagina: 1