Găsiți partea interioară a ferestrei principale având inima

Găsiți HWND din fereastra principală cu HINSTANCE

Este nevoie să executați unele EXE-shku. EXE-străin este străin, ce clase sunt descrise în această aplicație nu am nici o idee. Rularea prin ShellExecute trece fără probleme și returnează HINSTANCE. Dar cum să găsiți HWND din fereastra principală a aplicației numai cu HINSTANCE.

Lipsa rezultatului este, de asemenea, un rezultat. Mulțumesc.

nu folosiți ShellExecute, o CreateProcess - acolo se întoarce mânerul firului principal, apoi se afișează toate ferestrele, se găsește firul pe care această fereastră a creat-o (GetWindowThreadProcessId)
Gemor într-un singur cuvânt (deși pot exista și alte modalități)


> listați apoi toate ferestrele, găsiți firul care este acesta
> fereastra a fost creată (GetWindowThreadProcessId)

Toate ferestrele au fost create într-un fir, apoi ce. Care este cea mai importantă?

Dar, în general, care este fereastra principală? swill toate ferestrele sunt echivalente (cu excepția pentru copii, desigur, dar apoi puteți afla părintele lor)

dacă aplicația nu este complexă a-la notebook, atunci după (după maalenkoy zaderzhechki) executați ekzeshnika puteți apela GetForegroundWindow și cel mai probabil această fereastră va fi principala

În majoritatea cazurilor, fereastra principală este ceea ce este creat primul, cel mai înalt nivel și nu are un părinte. Deși nu este faptul că este întotdeauna.

> GetForegroundWindow și cel mai probabil această fereastră va fi principala

Fereastra principală poate fi complet invizibilă și are dimensiuni zero.
Concluzie: fereastra principală nu poate fi determinată, deoarece nu puteți spune ce înseamnă a fi fereastra principală.

Înainte de a rula "unele EXE-shki", instalați cârligul WH_CBT. vă permite să prindeți structura CREATESTRUCT, care conține toate informațiile despre clasa înregistrată, pe baza căreia a fost creată o fereastră, înainte de a crea fereastra (principala / prima, dacă doriți).
Același cârlig vă permite să modificați parametrii acestei structuri înainte de a crea fereastra.

Și ce folosește? Să spunem că creez două ferestre în program, unul după altul (CreateWindowEx), ambele absolut identice, ambele nu au un părinte, care este cel principal, care a fost creat primul?

Și în programele scrise în Delphi, în general sărind. Prima fereastră este creată de obiectul TApplication, care este apoi imbricat, iar prima fereastră creată devine "principală". Și principalul lucru este că, de fapt, este fereastra aplicației TA.


> Fereastra principală poate fi complet invizibilă și are zero
> dimensiuni.
> Concluzie: fereastra principală nu poate fi determinată, deoarece este imposibilă
> spuneți ce înseamnă să fii fereastra principală.

Da, nu susțin că este imposibil de determinat. Dar în aplicații simple poate funcționa

astfel încât să puteți lista toate ferestrele din aplicație. și nu mai mult de

dar care este fereastra principală diferită de fereastra principală? În opinia mea, doar o reacție la închidere, închideți fereastra principală - nailed aplicației.


> În opinia mea, doar o reacție la închidere, aproape
> fereastra principală - a aplicat aplicația.

Apoi, programul creat pe Delphi are două ferestre "principale" :)

Se simte ca și cum nu ai auzit nimic despre stilurile ferestrelor.
faceți o validare pe foile de stil WS_OVERLAPPED sau WS_OVERLAPPEDWINDOW. și lipsa stilurilor WS_CHILD și WS_POPUP. de data aceasta.
doi. Persoana vorbește despre programul concret. atunci trebuie să o luați și să o executați, apoi rulați WinSight și vedeți stilurile, clasele și anteturile. și pe toate acestea!


> Apoi, programul creat pe Delphi are două ferestre "principale"
> :)

nu, de ce nu?

și, în general, WinAppy nu distinge fereastra principală, cea principală, va fi doar pentru programator împreună cu utilizatorul.

când creați o fereastră (spuneți cu CreateWindowEx) în loc de ParentHwnd 0, atunci pictograma ferestrei va apărea în bara de activități, nu?

cu siguranță puteți presupune că toate ferestrele cu Parent == 0 de tip principal, apoi setați cârligul la WM_CREATE, extrageți structura (CREATESTRUCT) și uitați-vă la Parent.


pe calea returnată de la ShellExecute HINSTANCE - false HINSTANCE, servește doar pentru controlul erorilor


> și, în general, VinApi nu distinge fereastra principală a ferestrei principale, principala
> va fi numai pentru programator cu utilizatorul.

Asta este! Un exemplu simplu este CONDUCTOR. Care este fereastra sa principală? Închiderea - nu închide aplicația, dar închide ultima - da.

specificați, Th pentru dirijor. iexplore.exe sau explorer.exe? %)

explorer.exe. Există un caz în care fereastra Progman lipsește din orice motiv (de exemplu, un alt program este instalat pe shell). Atunci toate ferestrele sunt egale.