Interacțiunea cu ferestrele altor persoane - surse delphi faq

Imaginați-vă un utilizator prost este așezat ca și cum nimic fără precedent sagely deja ceva timp încercând să creeze un document în Microsoft Word'e, dar dintr-o dată fereastra începe să galopeze salbatic pe ecran, mesajele obscene sunt afișate în antet, este redusă la minimum, se desfășoară, își schimbă dimensiunile tot timpul și, la sfârșit, dispare complet, înlăturând tot textul care a atras cu atâta îngrijorare lameruga în uitare. și dacă este cazul, orice program se poate comporta în orice moment. impresiile de acest lucru vor dura mult timp.







Pentru a face ceva pe orice fereastră, trebuie mai întâi să obțineți mânerul său, adică poziția sa în memoria operativă. Pentru aceasta, utilizați funcția FindWindow. Trebuie să specificați numai doi parametri: în primul rând clasa ferestrei de căutare, apoi titlul acesteia. Ei bine, cu titlul de probleme, în general, nu există - o vedem, dar iată cum să definim clasa. deoarece este ascunsă de vocea utilizatorului. De fapt, putem specifica doar titlul ferestrei și în locul clasei am pus nul.

În primul rând, rulați programul Notepad standard - și ce vedem? În Notepad, titlul ferestrei ține evidența numelui fișierului curent. Inițial, tk. fișierul nu este utilizat, titlul notebook-ului arată astfel: "Nameless - Notepad". Vom încerca să găsim fereastra notebook-ului conform acestui criteriu. Acesta va arata astfel:

După cum vedem din cod, dacă programul nostru găsește o fereastră pentru notebook-uri, vom vedea un mesaj care să spună acest lucru.

Apoi, încercați să mutați această fereastră

Din nou găsim un notepad. Plasăm descriptorul într-o variabilă a clasei HWND [From English Handle Window - handle window]. Apoi, folosim funcția SetWindowPos pentru a seta poziția. Ca parametri, trebuie să specificați:

Dacă această funcție reușește, ea returnează o valoare nenuloasă. Ei bine, acum putem să ne mutăm și să redimensionăm ferestrele celorlalți. Pentru a schimba titlul ferestrei, scriem următorul cod:

Numai doi parametri trebuie să fie specificați în funcția setwindowtext: este mânerul ferestrei necesare și noua valoare pentru antet. Asta e tot!

Există o altă funcție interesantă ShowWindow, care vă permite să ascundeți sau să afișați ferestrele. Trebuie să o utilizați așa.







În paranteze, indicăm mai întâi ce fereastră specială vrem să frământăm și apoi ce anume vrem să facem cu ea. Ca acțiuni posibile putem specifica:

  • SW_HIDE Ascunde fereastra și activează cealaltă.
  • SW_MAXIMIZE Extinde fereastra.
  • SW_MINIMIZE Colaps fereastra.
  • SW_RESTORE Activează și afișează o fereastră. Dacă fereastra a fost extinsă sau restrânsă - restabilește dimensiunea și poziția originală.
  • SW_SHOW Activează și afișează o fereastră cu dimensiunea și poziția originală.
  • SW_SHOWDEFAULT Activează cu setările specificate în structura STARTUPINFO trimisă când aplicația a creat procesul care a lansat programul dorit.
  • SW_SHOWMAXIMIZED Afișează fereastra în forma sa extinsă.
  • SW_SHOWMINIMIZED Afișează o fereastră ca pictogramă pe bara de activități.
  • SW_SHOWMINNOACTIVE Afișează fereastra minimizată pe bara de activități și nu trece focalizarea de intrare în ea, adică o fereastră care anterior a fost activ activă ca înainte.
  • SW_SHOWNA Afișează o fereastră în starea sa actuală. Fereastra activă rămâne activă ca mai înainte.
  • SW_SHOWNOACTIVATE Afișează fereastra în ultima sa poziție și cu ultimele dimensiuni utilizate. Fereastra activă rămâne activă ca mai înainte.
  • SW_SHOWNORMAL Afișează o fereastră. Dacă a fost prăbușit sau dezvelit - își restabilește dimensiunile și poziția originale

Dar întreaga complexitate a acțiunilor constă în faptul că numele fișierului curent este urmărit în antetul Notepad și nu putem folosi întotdeauna valoarea "Noteless Notepad". . (Mai ales că nu este numai în cazul notebook-ului, dar există o modalitate :. Deoarece FindWindow funcția pentru a găsi fereastra indicăm nu numai titlul ferestrei pe care doriți, dar cu atât mai mult clasa lui Ce este de ieșire s-ar putea spune, titlul ferestrei, vom vedea, atunci știm. ceea ce să indice - și clasa fereastră., de fapt, poate găsi un pic de efort!

Pachetul Delphi include un utilitar special pentru urmărirea tuturor proceselor active, se numește WinSight32. Aceasta este ceea ce vom folosi. Rulați-l, scotocire în lista de procese, uita-te pentru linia în cazul în care titlul curent apare fereastra pe care doriți, cum ar fi Notepad, și pe partea stângă a acestei linii acolade veți găsi numele clasei ferestrei. Pentru un notepad acesta va fi "Notepad". Acum, cunoscând numele clasei de ferestre, putem rescrie căutarea ferestrei în felul următor:

Acum, în loc de titlul ferestrei, specificăm valoarea nul, ignorând acest parametru.

Există o altă modalitate foarte bună de a transmite comenzi către ferestre. - Funcția PostMessage. Ca parametri, este necesar să se precizeze:

  • Mânerul ferestrei la care este trimis mesajul sau următoarele valori:
    • Mesajul HWND_BROADCAST va fi trimis la toate ferestrele nivelul superior al sistemului, inclusiv ferestrele inactive și invizibile, suprapuse-fereastră, și PopUp-fereastră, dar mesajul nu va fi trimis la copil [copii] ferestre.
    • NULL Funcționează ca o funcție PostThreadMessage cu parametrul dwThreadId trecut la el.
  • Mesajul trimis
  • Primul parametru al mesajului
  • Al doilea parametru al mesajului

De exemplu, dacă trimiteți un mesaj wm_quit notepad - fereastra va fi închisă fără a afișa mesaje despre necesitatea salvării!







Trimiteți-le prietenilor: