Pokaż wyniki od 1 do 5 z 5

Temat: [C++] Wykrywanie okna

  1. #1

    Domyślnie [C++] Wykrywanie okna

    Witam,

    Ma ktoś jakiś pomysł na temat wykrywania nowo otwartego okna? (programu) W sensie:

    Kod:
    // pseudo kod
    do
    {
    ReadString('opis');
    }while(foundNewWindow("Gadu-Gadu"));
    Podejrzewam, że można użyć funkcji "FindWindowEx(...)" - tylko jak zrobić, żeby automatycznie wykrywało nowe okno, a nie te co już było wcześniej otwarte?

    p.s. mam nadzieje, że ktoś to zrozumie, ale piszę to na mega kacu...

    Pozdrawiam, Czepek!

  2. #2
    Dawni Moderatorzy
    Dołączył
    15-02-2011
    Posty
    260

    Domyślnie

    Sprawdzanie okna 'wybranego' odpada?
    Pobierasz okno, które jest zaznaczone i sprawdzasz czy nie było wcześniej.

  3. #3

    Domyślnie

    http://msdn.microsoft.com/en-us/libr...(v=VS.85).aspx

    Jest tam wszystko czego potrzebujesz. Sprawdź funkcję IsWindow.

  4. #4

    Domyślnie

    Cytat Napisał 0wn3r Zobacz post
    http://msdn.microsoft.com/en-us/libr...(v=VS.85).aspx

    Jest tam wszystko czego potrzebujesz. Sprawdź funkcję IsWindow.
    Przecież ta funkcja IsWindow to jest to samo co "FindWindow() != NULL". Może jeszcze raz wytłumaczę.
    Odpalam swój program, który działa w pętli sprawdzając, czy po jakimś czasie jest włączony kolejny program (np. Gadu-Gadu), jeżeli jest odczytuje z niego jakąś tam wartość, po czym zapisuję tą wartość w jakiejś tam zmiennej - i tak w kółko.

    Pozdrawiam, Czepek!

  5. #5

    Domyślnie

    Kod:
    struct windowHandler
    {
    	HWND gameHWND;
    	DWORD gamePID;
    	HANDLE gameHandle;
    };
    
    std::list<windowHandler> list;
    
    int main(int argc, char *argv[])
    {	
    	while(true)
    	{
    		HWND hWnd = FindWindow("Jakieś tam Twoje Okno", NULL);
    		if(hWnd)
    		{
    			windowHandler h;
    			h.gameHWND = hWnd;
    			GetWindowThreadProcessId(hWnd, &h.gamePID);
    			h.gameHandle = OpenProcess(PROCESS_ALL_ACCESS, FALSE, h.gamePID);
    			list.push_back(h);
       		 }
        
    		std::list<windowHandler>::iterator it;
    		for(it = list.begin(); it != list.end(); it++)
    		{
    			if(it->gameHWND == hWnd)
    			{
    				printf("okno istnieje już\n");
    			}
    			else
    			{
    				printf("okno nie istnieje\n");
    			}
    		}
    	}
    }
    Nie wiem, czy jest jakaś inna metoda, ale zostałem zmuszony do korzystania z tej wyżej wymienionej.

    Pozdrawiam, Czepek!

Uprawnienia

  • Nie możesz zakładać nowych tematów
  • Nie możesz pisać wiadomości
  • Nie możesz dodawać załączników
  • Nie możesz edytować swoich postów
  •