GetForegroundWindow i MDI Apps

0

Mam maly problem z aktywnym oknem.
Potrzebuje pobrac uchwyt (hWnd) aktywnego okna... problem w tym ze GetForegroundWindow, pobiera mi uchwyt MDIForm (czyli zewnetrznego okna), a ja potrzebuje MDIChild.

Zeby nie bylo za pieknie, to powiem ze okna ktorych uchwyt potrzebuje nie sa w mojej aplikacji (wiec z CLI sie nie odwolam :P) - zewnetrzna aplikacja.

0

Moze FindWindow by tu pomogl o ile to konkretna jedna aplikacja? Pobaw sie Spy++ z tooli w visualu, bardzo przydatne narzedzie, zwlaszcza przeciagany celownik w Find Window. Tak ja bym za to zaczal sie zabierac :)

0

MDIChild są dziećmi głównego okna, do którego już masz uchwyt, nazwijmy go hParent. Dalej trzeba się posłużyć funkcją GetWindow aby dobrać się do jego dzieci:

IntPtr hChild = GetWindow(hParent, GW_CHILD); //pobierasz pierwsze dziecko formy głównej
while(hChild != IntPtr.Zero)
{
   if(...)//tu trzeba sprawdzić, czy uchwyt dziecka jest oknem mdiclient (np. GetClassName albo GetWindowText)
   {
      //tu możesz się posłużyć uchwytem do mdiclient
   }
   hChild = GetWindow(hChild, GW_HWNDNEXT); //pobierasz uchwyt do następnego dziecka formy głównej 
}

GetClassName (podobnie też GetWindowText) zaimportujesz tak:

static extern int GetClassName(IntPtr hWnd, StringBuilder lpClassName, int nMaxCount);
0

adf88, while ladnie sprawdza i przeglada dzieci... problem ze GetClassName() zwraca zawsze to samo :) bo kilka okiem jest otwartych... nazwa ich moze byc zawsze rozna, wiec jak sprawdzic, ktore z tych okien jest aktywne [???]

0

Pierwsze z nich jest aktywne.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.