| |
|
|
| comme Ausgangspunkt pour unsere Betrachtungen soll einmal suivant Voir le texte source herhalten:
Déclarer Treeview3&,TV_INSERT#,TV_TEXT$,Parent&,Child&,Neu&
Windowstyle 31
Windowtitle "Treeviewtest"
Fenêtre 0,0-640,440
DIM TV_INSERT#,48
Laisser Treeview3&=@control("SysTreeView32","Testtree",$40000000+$10000000+$800000+$200000+$0002+$0010+$0020+$10000+$800,10,100,600,300,%HWND,2603,%Hinstance) treeview wird erstellt
qui erste Eintrag des Treeviews wird erstellt
Claire TV_INSERT#
LET TV_TEXT$="Root" qui Text im Label.
long TV_INSERT#,0=0 qui Eintrag ist qui erste Eintrag im Treeview.
long TV_INSERT#,4=$FFFF0002 qui Eintrag venez à den Schluß.
long TV_INSERT#,8=$0001 seulement Text, aucun weiteren Angaben zum Eintrag.
long TV_INSERT#,24=@ADDR(TV_TEXT$) Adresse des Textes des Eintrags.
long TV_INSERT#,28=$FFFF Maximale Longueur des Eintrags.
@sendmessage(Treeview3&,$1100,0,TV_INSERT#) Message zum insérer eines Eintrages.
Imprimer "Handle des angezeigten Treeviews: "+@STR$(Treeview3&) données volonté zur Kontrolle ausgegeben.
Laisser Treeview3&=@val(@Contribution$("Handle eines Treeviews eingeben:","Handle",@Str$(Treeview3&))) cela Handle eines Treeviews peux eingegeben volonté. Standardmäßig steht ici cela erzeugte Treeview.
LET Parent&=@SendMessage(Treeview3&,$110A,0,0) qui erste Eintrag cet Treevies wird ermittelt.
PRINT "Handle des Rootitems des eingegebenen Treeviews: "+@str$(Parent&) données volonté zur Kontrolle ausgegeben.
LET Child&=@SendMessage(Treeview3&,$110A,$4,Parent&) qui nachfolgende Eintrag sous dem ersten Eintrag wird ermittelt.
PRINT "Handle des ersten Kinditems des eingegebenen Treeviews: "+@str$(CHILD&) données volonté zur Kontrolle ausgegeben.
Imprimer "Zeit="+@Time $(0) données volonté zur Kontrolle ausgegeben.
qui zweite Eintrag des Treeviews wird erstellt
Claire TV_INSERT#
LET TV_TEXT$=@Time $(0)+" ca est un Treeview-Test! ca est un Treeview-Test! ca est un Treeview-Test! ca est un Treeview-Test! ca est un Treeview-Test! ca est un Treeview-Test! ca est un Treeview-Test!" qui Text im Label
long TV_INSERT#,0=Parent& qui zweite Eintrag wird sous dem Rooteintrag erstellt.
long TV_INSERT#,4=$FFFF0002 qui Eintrag venez à den Schluß.
long TV_INSERT#,8=$0001 seulement Text, aucun weiteren Angaben zum Eintrag.
long TV_INSERT#,24=@ADDR(TV_TEXT$) Adress of Label
long TV_INSERT#,28=$FFFF Maximale Longueur des Eintrags.
LET NEU&=@sendmessage(Treeview3&,$1100,0,TV_INSERT#) Message zum insérer eines Eintrages.
PRINT "Handle des neuen Treeviewitems: "+@STR$(Neu&) données volonté zur Kontrolle ausgegeben.
Zeit zum nachsehen et sur) donner...
Tandis que 0=0
Waitinput Schnarchpause einlegen....
Wend
Dispose TV_INSERT# Müll débarrasser...
s'il te plaît simple toujours OK drücken et vorerst im Eingabefeld rien verändern. chez mir sieht qui Geschichte pour einem Double-cliquez sur sur den Eintrag ROOT ensuite so aus:
[...]
Uns soll vorerst einmal pas qui Rooteintrag, mais qui Eintrag avec qui l'heure au-dessous intéresser. cela de qui Message TVM_INSERTITEM zurückgegebene Handle cet Eintrags lautet chez mir 36687824. eh bien venez wieder TNT ins Spiel. après que wir im Treeview de TNT den justement erzeugten Prozess angeklickt avons, faisons la fois wieder cela altbekannte Spiel et 1faire entier frech so, comme wäre cela Handle une Adresse. en supplément laisser wir uns qui Heaps des Prozesses listen - si on cela Programme pas avec Profan2Cpp compilé, peux cela Listing quelque chose après que qui Heapblockadresse qui dem Handle entspricht (36687824) erreicht wurde, avec qui bouton PAUSE abgebrochen volonté. eh bien chercher wir fois le Heapblockstartadresse, qui dem Handle des Treevieweintrags entspricht et laisser uns den le contenu des Blocks comme dezimale Doublewords Montrer:
[...]
Folgendes wird chez mir angezeigt: [box:fc91e92bbb] X1=36685936 X2=0 X3=0 X4=36688672 X5=0 X6=0 X7=0 X8=131071 X9=-1412628479 X10=47382540 X11=393242 X12=524544 [/box:fc91e92bbb] X1 ist ici scheinbar cela Handle des übergeordneten Eintrags, c'est léger ersichtlich. eh bien regarder wir uns la fois X4 à. Wir 1faire wieder so, comme wäre cela Doubleword X4 une Adresse (hoffentlich wirds pas fastidieux) et regarder pour, si wir une Heapblock trouver, dessen Startadresse cette Adresse (chez mir 3668872) entspricht et laisser uns ensuite den le contenu des Heapblocks comme String représenter. So siehts chez mir aus:
[...]
comment on voit, ici steht qui Text des Treevieweintrages. cela Handle, cela wir par cela Senden qui Message TVM_INSERTITEM et cela avec cela verbundene Erstellen eines neuen Treevieweintrags conservé, ist alors alors cela Handle des Heapblocks, dans dem qui Eintrag steht - et cela Handle entspricht oui c'est ca qui Startadresse des Blockes. Eingentlich sieht cela oui entier unspektakulär aus, ist es mais pas - car quoi important ist, ist qui Tatsache qui je ici par simple senden de Messages une Adresse eines Speicherbereiches - peut-être aussi dedans eines fremden Prozesses - erhalte. une weitere, très interessante Geschichte ist, qui sich qui Heapblock avec dem Text des Items seulement wenig au-dessus de cette Adresse est. maintenant wird quelque chose phantasiegeladen: si es eh bien possible wäre, une Treevieweintrag dans einem fremden Prozess trop erzeugen, serait mir avec qui Erzeugung juste une Adresse mitgeliefert volonté. Statt Text pourrait je beim Erzeugen une DLL avec Voir le texte source übertragen et qui beim Senden qui Message TVM_INSERTITEM erhaltene Adresse pourrait je comme Ausgangspunkt pour prendre, den dans qui DLL enthaltenen Voir le texte source (mittels WM_TIMER, une l'affaire qui je déjà erfolgreich avec einem Multiedit durchgeführt habe) anzusprechen - et cela sans irgendwelche Schreib- ou bien Leserechte sur den Prozess trop avons! mais allez cela wirklich? la fois regarder...
en supplément doit wir simple den déjà bekannten Voir le texte source zweimal starten. Beim ersten Start klicken wir beim Eingabefeld sur OK, beim zweiten Start donner wir cela Handle des Treeviews des ersten Prozesses (pas des Eintrages) un et bestätigen ensuite avec OK: entre den Starts qui beiden Prozesse doit absolument quelques Minuten liegen, c'est très important. cela ici zeigt chez mir ensuite qui d'abord gestartete Prozess à:
[...]
Mmh - si on pas entier oui c'est ca hinsieht, était unser projet erfolgreich. quoi chez näherer Betrachtung mais auffällt - qui Uhrzeiten qui beiden Einträge müßten oui unterschiedlich son, vous êtes mais pas! quoi ist oui c'est ca geschehen? de mir gibts ici folgende Erklärung: quoi beim Senden einer Message übertragen wird sommes toujours seulement quatre Doublewords - dans unserem le cas wurde ici comme vierter paramètre un Pointer, alors qui Startadresse qui Struktur TV_INSERT#, übertragen. qui Empfänger qui Message (Prozess numéro une) bezieht qui avec qui Message übertragene Adresse komplett sur seinen Adressbereicht. là es sich chez den beiden Prozessen um cela gleiche Programme handelt, steht à cette Adresse également encore qui Struktur TV_INSERT# - quoi dans TV_TEXT$ steht, unterscheidet sich mais. Fazit: Messages übertragen aucun Strukturen mais seulement Adressen, qui sich sur den jeweils Aktuellen Prozess beziehen. .... - mais comment funktioniert ensuite qui Zwischenablage? la fois regarder........... |
|
|
| |
|
|