vbstreets conferință - Vezi subiect - Cum de a găsi un kontrola mâner

De fapt, există un control calendar. Iată un


De fapt, calendarul am fost destul de fericit, dar are defectele enervant pe care aș dori să elimine, iar pentru acest lucru este zasubklassit banal. Dar nu a fost acolo. Problema este că este nevoie de un mâner, iar cel care a făcut controlul (ridiche) mânerul Obținerea care nu sunt prevăzute. M-am gândit imediat că este posibil să se găsească fereastra pe care doriți și să-l printr-un mâner FindWindowEx, dar aici ambuscada. Căutarea este posibilă numai în clasă, pentru că nu este nimic altceva, sau necunoscut. Clasa ferestrei ThunderRT6UserControlDC, iar ambuscada în care controlul nu este singurul, și ferestre cu această clasă, respectiv, de asemenea. Ei bine, în acest caz, puteți găsi mânerul ferestrei de control instanță? Nu pot veni cu și, în consecință, pentru a cere ajutor.

PS: Imaginea nu este doar un singur calendar, și spune simbioză lui cu un câmp de text, în plus față de TP este un buton pentru, ceea ce, s-ar părea același calendare.

Straduiti, să caute, să găsească și perepryatat

-Ne separa fețele zâmbitoare de restul corpului lor, căpitane.
Așa e! Noi le decapita.

ger_kar a scris (a): și ambuscada în care controlul nu este singurul


Nu crezi că dacă cu controlul pe care ceva nu este corect, este necesar să se schimbe toate cazurile de ea în anexă, și nu pentru unul?

Ura! Noua versiune a Unreal Commander'a!

Qwertiy scris (a): Nu crezi că dacă cu controlul pe care ceva nu este corect, este necesar să se schimbe toate cazurile de ea în anexă, și nu pentru unul?

Ei bine, ar fi cu siguranță bun, dar cum să-l pună în aplicare? Dar eu știu cum să schimbe comportamentul unei anumite ferestre, folosind subklassing, apoi se adaugă reacția ferestrei la datele din mesajele mele fereastra.

Hacker a scris (a): În conformitate cu coordonatele.

Și este posibil un pic mai în detaliu?

Straduiti, să caute, să găsească și perepryatat

ger_kar a scris (a): Poate un pic mai în detaliu?


Am coordonatele controlerului.
La fereastra, de asemenea.
Este necesar să se compare.

-Ne separa fețele zâmbitoare de restul corpului lor, căpitane.
Așa e! Noi le decapita.

Ie există o fereastră, pentru a compara-l coordonează cu coordonatele de control în cazul în care aceeași, atunci este, în cazul în care nu coincid, este nu căutarea în continuare?
Poate mai bine în debugger pentru a găsi un loc în care maneta de comandă pentru a stoca, calcula offset și să ia de acolo? Acesta va fi cu siguranță un mic Blackjack-codare, dar totul va fi rapid și fără mișcări inutile?

Straduiti, să caute, să găsească și perepryatat

ger_kar a scris (a): Ie există o fereastră, pentru a compara-l coordonează cu coordonatele de control în cazul în care aceeași, atunci este, în cazul în care nu coincid, este nu căutarea în continuare?


Aproximativ vorbind - asa.
Dar, în minte - un algoritm diferit.

ger_kar a scris (a): Poate fi mai bine în debugger pentru a găsi un loc în care maneta de comandă pentru a stoca, calcula offset și să ia de acolo? Acesta va fi cu siguranță un mic Blackjack-codare, dar totul va fi rapid și fără mișcări inutile?


codificare negru mare. Acesta poate varia de la o versiune la alta rulare (și nu poate fi modificată). Având în vedere faptul că statele membre pot elibera un nou rulare construi, să se bazeze pe el, mi-am temut.

-Ne separa fețele zâmbitoare de restul corpului lor, căpitane.
Așa e! Noi le decapita.

Hacker a scris (a): Dar în minte - un algoritm diferit.

Desigur, am dori mintea. Și ce un algoritm inteligent pentru mine cu excepția faptului că am scris nimic altceva în capul meu nu merge?

Straduiti, să caute, să găsească și perepryatat

ger_kar a scris (a): Desigur, aș dori mintea. Și ce un algoritm inteligent pentru mine cu excepția faptului că am scris nimic altceva în capul meu nu merge?


Nu vrei să se gândească.
Citește odă lene și să actualizeze o listă a metodei corecte. Se actualizează lista de nimic de a face cu, dar problema algoritmică - la fel.

-Ne separa fețele zâmbitoare de restul corpului lor, căpitane.
Așa e! Noi le decapita.

Hacker a scris (a): citit o odă la lene și să actualizeze o listă a metodei corecte. Se actualizează lista de nimic de a face cu, dar problema algoritmică - la fel.


Nu înțeleg. Fereastra una, consideră că este necesar să o dată. Mai eficientă decât fereastra de verificare de rezultate până până când obțineți dreptul de a nu va funcționa.

Ura! Noua versiune a Unreal Commander'a!

Qwertiy a scris (a): Și eu nu înțeleg. Fereastra una, consideră că este necesar să o dată.

De ce unul? Dacă a existat, și nu au existat probleme. Windows poate fi oarecum pe cantitatea de control, dar mai ales 2 ferestre.

Straduiti, să caute, să găsească și perepryatat

QUERTY, cum propui să faci asta? Poate că nu înțeleg ceva în Windows API. Arată cel puțin pseudo-cod.

-Ne separa fețele zâmbitoare de restul corpului lor, căpitane.
Așa e! Noi le decapita.

ger_kar a scris (a): De ce unul?

ger_kar a scris (a): Dar eu știu cum să schimbe comportamentul unei anumite ferestre

și, dacă nu, atunci ia toate lor generală.

Hacker a scris (a): QUERTY, cum propui să faci asta? Poate că nu înțeleg ceva în Windows API. Arată cel puțin pseudo-cod.


Ei bine, eu nu sunt atât de bun la WinAPI, pentru a spune exact ce și cum să-l folosească.
Dacă numai un singur control, se pare ca acest lucru. În numele ferestrei de clasă găsi. În interiorul apel invers-funcția de a verifica coordonatele ferestrei, în cazul în care meciul, salvați mânerul pentru a opri și de căutare.
Cine m-am gândit că puteți încerca să obțineți o fereastră vizibilă pe un punct în interiorul acestuia, dar trebuie să-l arate pe ecran în momentul căutării, așa că nu-mi place această opțiune. În plus, este posibil pentru a satisface controlul imbricate, în cazul în care pentru un motiv sau altul se va muta.

PS: Eu nu fac "QUERTY".

Ura! Noua versiune a Unreal Commander'a!

Ei bine Qwertiy, toate au nevoie de confuz pentru a găsi o cutie printre un anumit set. Ie Acesta este dat o mulțime de ferestre, nu unul, asa ca am scris

ger_kar a scris (a): De ce unul?

Straduiti, să caute, să găsească și perepryatat

Qwertiy a scris (a): În cazul în care doar un singur control, se pare ca acest lucru.


Dacă unul, atunci da. Dar, în acest caz, situația nu este același lucru.

Am vorbit în general despre problema algoritmică aici este de acest fel: există două seturi de dimensiuni egale, între care acționează o relație bijectivă. Aceasta este, într-un fel putem verifica dacă cele două elemente ale celor două seturi - legate una de cealaltă.

Și acum trebuie să stabilească o conexiune.

Cel mai rau mod de a face acest lucru: pentru a ocoli prima multitudine de elemente și fiecare element din prima multitudine de a face căutarea tuturor elementelor din al doilea set, până când se găsește elementul corespunzător.

Cel mai bun mod, acest lucru este ceea ce am numit „metoda celor două cursoare“ în subiectul listei actualizate. Trebuie să construiască mai întâi elementele unele cheie și apoi instalați două cursorul la începutul celor două liste și pentru a muta cursorul peste setul (așa cum este descris în subiect) regula.

Pentru trei controale ar putea fi lipsite de importanță, dar, în general.

-Ne separa fețele zâmbitoare de restul corpului lor, căpitane.
Așa e! Noi le decapita.

Hacker a scris (a): Cel mai rau mod de a face acest lucru: pentru a ocoli prima multitudine de elemente și fiecare element din prima multitudine de a face căutarea tuturor elementelor din al doilea set, până când se găsește elementul corespunzător.


Ei bine, e un da. Dar aici unul state de control. Sau toate, fără filtrare.

Hacker a scris (a): Cel mai bun mod, acest lucru este ceea ce am numit „metoda celor două cursoare“ în subiectul listei actualizate.


Ce despre metodele de utilizare hash?

Hacker a scris (a): Dacă, atunci da. Dar, în acest caz, situația nu este același lucru.


Sunt destul de confuz, ceea ce este situația în speță

Ura! Noua versiune a Unreal Commander'a!

Ceea ce distinge drept de control pe de altă parte? Coordonate? Text? Mai multe unele fichey?
Am verificat prin EnumProps - poate că există ceva acolo. În cazul în care nu - renumeroteze controale corp la corp prin hwnd SetProp, „ctrlIndex“, indicele. bine apoi determina prin GetProp - corectă sau nu.
PS. Apropo, indicele poate fi nu numai indicele, dar, de asemenea, pe indicator oriunde - structura linie, ObjPtr etc.
ZY2

ger_kar a scris (a): este zasubklassit banală

Dacă procesul este un străin - este banală nu funcționează. În cazul în care dvs. - de ce tam-tam cu FindWindow?

arca a scris (a): Dacă procesul este un străin - este banală nu funcționează. În cazul în care dvs. - de ce tam-tam cu FindWindow?

Procesul nativ. Și de ce acest lucru este interesant de grădină FindWindowEx? Cred că EnumChildWindows va fi mult mai rău, după cum va fi transferat la toate ferestrele copil.

arca a scris (a): Care este diferența de control chiar pe de altă parte? Coordonate? Text? Mai multe unele fichey?

Straduiti, să caute, să găsească și perepryatat

arca a scris (a): 2. Mâner în controlul este, și este probabil să fie stocate pentru uz intern undeva doar în spatele vtable. Încercați mai întâi să caute 100-200 bytes pe ObjPtr

Am găsit locul în care controlul Hadley dvs. ascunde. Și a continuat deplasarea H3C (60). Ei bine, în același timp, am găsit alte locuri unde poate fi găsit. O astfel de loc a fost de 3 Mă întrebam de ce a fost listat o serie de 1-200 Byte?

arca a scris (a): Ei bine, acolo ChildWindowFromPoint (Ex)

Qwertiy a scris (a): GetWindowClass

Straduiti, să caute, să găsească și perepryatat