Obțineți ferestrele mânerului printr-un nume incomplet

obțineți ferestrele de mâner printr-un nume incomplet

și anume Sarcina este că trebuie să găsiți o fereastră și să o faceți, dar fereastra se poate schimba.
de exemplu, pentru a găsi o fereastră Delphi 7 pe o linie dreaptă pentru a nu se întoarce de atunci. dacă de exemplu proiectul este deschis. numele ferestrei va arata ca Delphi 7- Project1.dpr. Așa cum se poate găsi prin coincidență. Codul Naryl care face asta. Dar, în practică, funcția returnează handle = 0 ie. fereastra nu a fost găsită. la sfarsitul ei indeplineste "fereastra nu a fost gasita!"






Iată codul

// -----------------
funcția EnumWindowsProc (hWindow.hWnd; lParam.LongInt). Bool stdcall; ; export;
var
# xA0; lpBuffer: PChar;
# xA0; WindowCaptionFound: bool;
# xA0; ClassNameFound: bool;
începe
# xA0; GetMem (lpBuffer, 255);
# xA0; Rezultat: = Adevărat;
# xA0; WindowCaptionFound: = False;
# xA0; ClassNameFound: = False;

# xA0; încercați
# xA0; # xA0; dacă GetWindowText (hWindow, lpBuffer, 255)> 0 atunci
# xA0; # xA0; # XA0; dacă Pos (PFindWindowStruct (lParam) .Caption, StrPas (lpBuffer))> 0 atunci
# xA0; # xA0; # xA0; # xA0; WindowCaptionFound: = adevărat;

# xA0; # xA0; dacă PFindWindowStruct (lParam) .ClassName = "" atunci
# xA0; # xA0; # xA0; ClassNameFound: = Adevărat
# xA0; # xA0; altceva
# xA0; # xA0; dacă GetClassName (hWindow, lpBuffer, 255)> 0 atunci
# xA0; # xA0; # XA0; dacă Pos (PFindWindowStruct (lParam) .ClassName, StrPas (lpBuffer))> 0 atunci
# xA0; # xA0; # xA0; # xA0; ClassNameFound: = Adevărat;

# xA0; # xA0; dacă (WindowCaptionFound și ClassNameFound) atunci
# xA0; # xA0; începeți
# xA0; # xA0; # xA0; PFindWindowStruct (lParam); WindowHandle: = hWindow;
# xA0; # xA0; # xA0; Rezultat: = False;
# xA0; # xA0; sfârșitul;

# xA0; în cele din urmă






# xA0; # xA0; FreeMem (lpBuffer, sizeof (lpBuffer ^));
# xA0; sfârșitul;
se încheie;

funcția FindAWindow (șir de șir, șir de nume de clasă). THandle;
var
# xA0; WindowInfo. TFindWindowStruct;
începe
# xA0; cu WindowInfo nu începe
# xA0; # xA0; Caption: = Caption;
# xA0; # xA0; ClassName: = ClassName;
# xA0; # xA0; WindowHandle: = 0;
# xA0; # xA0; EnumWindows (@EnumWindowsProc, LongInt (@WindowInfo));
# xA0; # xA0; FindAWindow: = WindowHandle;
# xA0; sfârșitul;
se încheie;
// -----------------

procedura TForm1.close_start (Expeditor: TObject);
var
# xA0; # xA0; h: THANDLE;
# xA0; # xA0; TheWindowHandle. THandle;
începe
TheWindowHandle: = FindAWindow ("Delphi 7 -", "");
# xA0; dacă TheWindowHandle = 0 atunci
# xA0; # xA0; ShowMessage ("Fereastra nu a fost găsită!")
# xA0; altceva
# xA0; # xA0; BringWindowToTop (TheWindowHandle);

Nu vrei prea mult?


> Nu vrei prea mult?

Flacăra ... în esență nimic.

În esență, vrei să?

Solicitați o cerere la msdn.microsoft.com prin key.phase "EnumWindows".

Sau nu este afacerea țarului?

Acum, în esență.
Ei bine, codul de mai sus este motivul pentru care nu va funcționa?

EnumWows va salva tatăl democrației rusești. Detalii în ajutor.

> Dimich1978 # xA0; (05/05/06 13:22)

La mine acest cod funcționează.

procedura TForm1.Button1Click (expeditor: TObject);
începe
ListBox1.Clear;
EnumWindows (@EnumProc, 0);
se încheie;

Cel mai simplu mod în opinia mea în această situație este să caut o fereastră în funcție de clasa sa.
Numele clasei ferestrei de multe ori nu depinde de antetul ei.
Sau dacă este imposibil să căutați după clasă, luați o listă cu toate ferestrele din sistem,
apoi luați antetul fiecărei ferestre separat și comparați-l cu condiția.
De exemplu:

funcție GetWndList: TStrings;
începe
// Faceți o listă cu toate ferestrele și puneți-le într-o matrice de șir
se încheie;

ListBox1.Items.Clear;
ListBox1.Items: = GetWndList;
pentru i: = 0 la ListBox1.Items.Count -1 face
# xA0; # xA0; # xA0; dacă pos ("Delphi 7", ListBox1.Items.Strings [i]) = 1 atunci // Fereastra găsită efectuând acțiunile

A făcut o frunte. Ie stocați doar fereastra în fișierul închis. Puteți adăuga și șterge înregistrări. Mai mult universal sa dovedit .. este posibil să se închidă nu numai 1C ferestre, dar aproape orice. Deși, pentru interesul pe care aș dori să o rezolv în această problemă.

Memorie: 0,74 MB
Timp: 0,065 sec







Trimiteți-le prietenilor: