Fogadja a kezelőpaneleket egy hiányos névvel

a fogantyú ablakokat egy hiányos névvel kapja meg

azaz A feladat az, hogy meg kell találnunk egy ablakot és kezelnünk kell, de az ablak változhat.
például, hogy megtalálja a Delphi 7 ablakot egyenes vonalon, hogy azóta ne forduljon elő. ha például a projekt nyitva van. az ablak neve úgy fog kinézni, mint a Delphi 7- Project1.dpr. Mint azt véletlenül találja. Naryl kód, ami ezt teszi. De a gyakorlatban a függvény a handle = 0 értéket adja vissza. ablak nem található. a végén az "Ablak nem található!"
Itt van a kód

// -----------------
funkció EnumWindowsProc (hWindow.hWnd; lParam.LongInt). Bool stdcall; ; export;
var
# xA0; lpBuffer: PChar;
# xA0; WindowCaptionFound: bool;
# xA0; ClassNameFound: bool;
kezdődik
# xA0; GetMem (lpBuffer, 255);
# xA0; Eredmény: = Igaz;
# xA0; WindowCaptionFound: = hamis;
# xA0; ClassNameFound: = hamis;

# xA0; próbáld ki
# xA0; # xA0; ha GetWindowText (hWindow, lpBuffer, 255)> 0 akkor
# xA0; # xA0; # xA0, ha a Pos (PFindWindowStruct (lParam) .Caption, StrPas (lpBuffer))> 0 majd
# xA0; # xA0; # xA0; # xA0; WindowCaptionFound: = igaz;

# xA0; # xA0; ha PFindWindowStruct (lParam) .ClassName = "" akkor
# xA0; # xA0; # xA0; ClassNameFound: = Igaz
# xA0; # xA0; egyébként
# xA0; # xA0; ha GetClassName (hWindow, lpBuffer, 255)> 0 akkor
# xA0; # xA0; # xA0, ha a Pos (PFindWindowStruct (lParam) .ClassName, StrPas (lpBuffer))> 0 majd
# xA0; # xA0; # xA0; # xA0; ClassNameFound: = Igaz;

# xA0; # xA0; ha (WindowCaptionFound és ClassNameFound), akkor
# xA0; # xA0; kezdődik
# xA0; # xA0; # xA0; PFindWindowStruct (lParam) .WindowHandle: = hWindow;
# xA0; # xA0; # xA0; Eredmény: = hamis;
# xA0; # xA0; vége;

# xA0, végül
# xA0; # xA0; FreeMem (lpBuffer, sizeof (lpBuffer ^));
# xA0; vége;
végén;

FindAWindow funkció (Caption string, ClassName. string). THandle;
var
# xA0; WindowInfo. TFindWindowStruct;
kezdődik
# xA0; a WindowInfo-val kezdődik
# xA0; # xA0; Caption: = Felirat;
# xA0; # xA0; ClassName: = ClassName;
# xA0; # xA0; WindowHandle: = 0;
# xA0; # xA0; EnumWindows (@EnumWindowsProc, LongInt (@WindowInfo));
# xA0; # xA0; FindAWindow: = WindowHandle;
# xA0; vége;
végén;
// -----------------

eljárás TForm1.close_start (Feladó: TObject);
var
# xA0; # xA0; h: THANDLE;
# xA0; # xA0; TheWindowHandle. THandle;
kezdődik
AWindowHandle: = FindAWindow ("Delphi 7 -", "");
# xA0; ha a TheWindowHandle = 0, akkor
# xA0; # xA0; ShowMessage ("Ablak nem található!")
# xA0; egyébként
# xA0; # xA0; BringWindowToTop (TheWindowHandle);

Nem akarsz túl sokat?


Nem akarsz túl sokat?

A láng ... lényegében semmi.

Lényegében azt akarod?

Kérjük, kérjen egy msdn.microsoft.com kérelmet a key.phase "EnumWindows" segítségével.

Vagy nem a cár üzlet?

Most, lényegében.
Nos, a fenti kód miért nem fog működni?

Az EnumWindows megmenti az orosz demokrácia atyját. Részletek a segítségben.

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

Számomra ez a kód működik.

eljárás TForm1.Button1Kattintson (Feladó: TObject);
kezdődik
ListBox1.Clear;
EnumWindows (@EnumProc, 0);
végén;

A helyzet a legegyszerűbb módja annak, hogy az adott osztály szerint ablakot keresjek.
Az ablakosztály neve gyakran nem függ a fejlécétől.
Vagy ha lehetetlen keresni az osztály szerint, akkor vegye be a rendszer összes ablakának listáját,
akkor vegye külön az egyes ablakok fejlécét, és hasonlítsa össze az állapotot.
Például:

funkció GetWndList: TStrings;
kezdődik
// Vegyünk egy listát az összes ablakról és tegyük őket egy string tömbbe
végén;

ListBox1.Items.Clear;
ListBox1.Items: = GetWndList;
az i: = 0 a ListBox1.Items.Count -1 do
# xA0; # xA0; # xA0; ha a pos ("Delphi 7", a ListBox1.Items.Strings [i]) = 1, akkor // A műveleteket végrehajtó ablak

Homlokát tett. Ie csak tárolja az ablakot a lezárt fájlban. Felvehet és törölhet rekordokat. Még általánosabban kiderült, hogy nem csak az 1C ablakokat lehet bezárni, hanem szinte minden. Bár az érdeklődésért szeretnék foglalkozni ezzel a kérdéssel.

Memória: 0,74 MB
Időzítés: 0.065 mp