Håndtering af barnevindue i C ++

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg vil gerne få fat i barnevinduet, men det kan jeg ikke.
Jeg vil automatisk indsætte tekst i en Rediger kontrol.
Her er hvad jeg har:


//global var

int id=0;

BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lParam) {
  id = GetDlgCtrlID(hwnd);
  HWND hwnd\_Child;
  hwnd\_Child = GetDlgItem(hwnd, id);
   SendMessage(hwnd\_Child, WM\_SETTEXT, NULL, (LPARAM)"mYtexttttt");
  /* other code */
  // id is always 0, why ?
  // return FALSE; // stop enumerating
  return TRUE; // continue enumeration
}

void MyFunction ()
{
    HWND hwnd\_Parent;

    hwnd\_Parent = FindWindow(NULL,"MyTitle"); if(! hwnd)return;

    EnumChildWindows(hWnd ,(WNDENUMPROC)EnumWindowsProc, NULL);
}


I WinSpy ++ er kontrol ID'erne for alle komponenterne 000000000. Er det muligt, at kontrol ID ikke er defineret?


Hvordan finder jeg barnets håndtag af en bestemt komponent (redigeringsboks), hvis jeg har håndtaget i hovedvinduet, og kontrol-id'et ikke er defineret?


Hovedvinduet er også et spilprogram, der kører med DirectX, tror jeg.
 Jeg vil automatisk indsætte tekst i en Rediger kontrol.

Bedste reference


Hvis WinSpy fortæller dig, at kontrol-id'er er 0, så får du 0 tilbage fra GetDlgCtrlID () er naturligvis det forventede resultat. Du skal gøre noget andet, som at tælle antallet af EnumWindowsProc () opkald og/eller kalde GetClassName (), så du kan se, at det er en redigeringskontrol. Eller GetWindowRect () går efter position.

Andre referencer 1


I din tilbagekaldelsesmetode skal du gøre følgende:


// get the window text
GetWindowText(hWnd, (LPTSTR)windowText, MAX\_PATH);

// get the window info
WINDOWINFO objWinInfo;
GetWindowInfo(hWnd, &objWinInfo) 


Ovenstående skal hjælpe dig med at få barnevinduerne.


Du kan også gøre FindWindowEx for at få barnevinduerne.

Andre referencer 2


Control ids er en nem måde at identificere børnevinduer på; men ikke den eneste måde. Så det er helt muligt, at kontrol id vil blive indstillet til vilkårlig (eller nul) værdier (i så fald henviser modersvinduet kun direkte til deres håndtag.


Fra dit synspunkt, hvis der ikke findes nogen kontrol ids, skal du henvise dem til positionen i fanesekvensen, som skal være konstant og kan gentages gennem.