Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

FindWindow() C++


Rekomendowane odpowiedzi

Opublikowano

Piszę pewien program i mam problem z poniższym kodem:

HWND Find = FindWindow(0, "nazwagry");
if (Find)
    {
        _sleep(500);
        ShowWindow(Find, SW_SHOWMAXIMIZED );
        SetCursorPos(400, 30);
        mouse_event(MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP,0,0,0,0);
        cout << "znaleziono";
     }

else {
        cout <<"Nie znaleziono";
    }

Nie ma problemu np. z otworzeniem okna google chrome i wykonaniem kodu. Kiedy to samo chce zrobić z grą, to wyświetla "znaleziono", ale okno się nie maksymalizuje :P.

Opublikowano

włącz grę i wejdź w menadżer zadań i sprawdź czy na pewno Twój tytuł się zgadza z tytułem aplikacji.

Lub spróbuj

HWND Find = FindWindow("nazwagry", NULL);

tyle mi się udało wygrzebać z google ;p

 

@Uh, źle przeczytałem, chwilka

Opublikowano

włącz grę i wejdź w menadżer zadań i sprawdź czy na pewno Twój tytuł się zgadza z tytułem aplikacji.

Lub spróbuj

HWND Find = FindWindow("nazwagry", NULL);

tyle mi się udało wygrzebać z google ;p

Właśnie wyświetla "znaleziono", czyli wszystko się zgadza, jednak reszta się nie wykonuje :p.

Opublikowano

Według tego:

http://msdn.microsoft.com/en-us/library/ee499640.aspx

ShowWindow() nie przyjmuje takiego parametru jak 

SW_SHOWMAXIMIZED

spróbuj:

SendMessage(hwnd, WM_SYSCOMMAND, SC_MAXIMIZE, 0);

gdzie hwnd to Twoje Find

 

@Lord DxDxDxD

To może spróbuj breakpointa walnąć i zobaczyć co się pod tym wszystkim kryje

Opublikowano

A co, twój kompilator breakpointów ani debugu nie obsługuje?

Breakpoint to taki punkt w programie przy wykonywaniu którego środowisko zatrzymuje wykonywanie i pokazuje zrzut pamięci (zawartość zmiennych), stos, i tak dalej. Przydatna sprawa. Zakładasz go którymśtam F'em (spróbuj F5) albo w opcjach debugowania.

 

Radzę też poczytać w MSDN o tych funkcjach.

846331404756772371599.jpeg
Opublikowano

A co, twój kompilator breakpointów ani debugu nie obsługuje?

Breakpoint to taki punkt w programie przy wykonywaniu którego środowisko zatrzymuje wykonywanie i pokazuje zrzut pamięci (zawartość zmiennych), stos, i tak dalej. Przydatna sprawa. Zakładasz go którymśtam F'em (spróbuj F5) albo w opcjach debugowania.

 

Radzę też poczytać w MSDN o tych funkcjach.

Dodałem te okno z breakpointami, ale tam nic się nie wyświetla xD.

A co konkretnie w kodzie jest złe, skoro działa do przeglądarki, a do gry w połowie? (wyświetla "znaleziono" :p)

Opublikowano

W takim razie musisz coś robić źle, w gierkach zabezpieczonych xTrap'em czy GameGuard'em śmiga bez problemu..

W tym przypadku nie ma gameguarda.

 

 

 

A co na pokazanie okna? Nie chcę maksymalizacji tylko pokazanie okna :P.

Opublikowano

Zakładam, że korzystasz z windows vista lub 7? Z tego co na necie znalazłem najprawdopodobniej jest to spowodowane wbudowanymi zabezpieczeniami w tych systemach przed kradnięciem focusa innym oknom. Niestety nie znalazłem na to żadnego skutecznego sposobu, chociaż jak niektórzy piszą, można coś popróbować z odpalaniem programu z prawami administratora.

Ogólnie okno Nostale jest dość upierdliwe - w windows xp np. po użyciu funkcji ShowWindow z jakimkolwiek parametrem okno przestaje reagować na próby zminimalizowania (jedynie windows+d zrzuca go do paska, ale każde inne okno po przywróceniu przywraca też okno nostale). Wywołanie ShowWindow z parametrem SW_Minimize nie zrzuca go na pasek, ale w lewy dolny róg pulpitu z minimalnymi możliwymi rozmiarami - też nie doszedłem jak ten problem obejść.

 

Wracając do głównego pytania: problem leży w funkcjach przerzucających focus okna w windows vista i 7 - może będziesz miał więcej szczęścia ( albo cierpliwości :P ) w szukaniu

Opublikowano

Zakładam, że korzystasz z windows vista lub 7? Z tego co na necie znalazłem najprawdopodobniej jest to spowodowane wbudowanymi zabezpieczeniami w tych systemach przed kradnięciem focusa innym oknom. Niestety nie znalazłem na to żadnego skutecznego sposobu, chociaż jak niektórzy piszą, można coś popróbować z odpalaniem programu z prawami administratora.

Ogólnie okno Nostale jest dość upierdliwe - w windows xp np. po użyciu funkcji ShowWindow z jakimkolwiek parametrem okno przestaje reagować na próby zminimalizowania (jedynie windows+d zrzuca go do paska, ale każde inne okno po przywróceniu przywraca też okno nostale). Wywołanie ShowWindow z parametrem SW_Minimize nie zrzuca go na pasek, ale w lewy dolny róg pulpitu z minimalnymi możliwymi rozmiarami - też nie doszedłem jak ten problem obejść.

 

Wracając do głównego pytania: problem leży w funkcjach przerzucających focus okna w windows vista i 7 - może będziesz miał więcej szczęścia ( albo cierpliwości :P ) w szukaniu

Mam Windowsa 8.1 :p.

Opublikowano

Nie wiem czy ten problem nie występuje również w tym systemie - to logiczne, że system ma być "hacker unfriendly" :P

W każdym razie jeśli ShowWindow nie działa z rożnymi parametrami to albo system uważa że masz za małe uprawnienia, albo watro poszukać czegoś o tym blokowaniu zmiany focusa okna. Windowsa 8 akurat nie mam to nie sprawdzę czy działa.. ale na 7 wiem że nie działa na pewno.

Można spróbować jeszcze funkcji:

BringWindowToTop

OpenIcon

SetForegroundWindow

SwitchToThisWindow

 

ogólne poszukać ciekawych rzeczy na stronie msdn

Opublikowano

Nie wiem czy ten problem nie występuje również w tym systemie - to logiczne, że system ma być "hacker unfriendly" :P

W każdym razie jeśli ShowWindow nie działa z rożnymi parametrami to albo system uważa że masz za małe uprawnienia, albo watro poszukać czegoś o tym blokowaniu zmiany focusa okna. Windowsa 8 akurat nie mam to nie sprawdzę czy działa.. ale na 7 wiem że nie działa na pewno.

Można spróbować jeszcze funkcji:

BringWindowToTop

OpenIcon

SetForegroundWindow

SwitchToThisWindow

 

ogólne poszukać ciekawych rzeczy na stronie msdn

Właśnie problem chyba tkwi w NosTale, bo ten program zadziałał na przeglądarkę :p.

Opublikowano

Całkiem możliwe. Pozostaje wypróbować wszystkie opcje ustawiania okna z biblioteki msdn - może którejś się uda.

Wypisane wg. funkcji: http://msdn.microsoft.com/en-us/library/windows/desktop/ms632599%28v=vs.85%29.aspx#foreground

 

Edit:

Chyba wiem co tu jest przeszkodą - przynajmniej na windows7 i na xp rozwiązało moje problemy: To widoczne okno Nostale nie jest głównym oknem gry. Nad nim jest niewidoczne okno rodzic i do niego trzeba złapać uchwyt, żeby swobodnie manewrować całą aplikacją. Minimalizowanie i maksymalizowanie na uchwycie rodzica, reszta operacji na uchwycie widocznego okna gry.

Robiłem to za pomocą funkcji: uchwyt rodzica = GetWindow(uchwyt widocznego okna,GW_OWNER). Co prawda ShowWindow nadal nie chciało działać w windows7 ale za to zadziałało: SendMessage(Uchwyt,WM_SYSCOMMAND,SC_RESTORE,0) - lepiej używać restore zamiast maximize bo nie zmienia rozdzielczości na systemową tylko pozostawia ustawioną w grze i jest pewność, że pozycja np kliknięcia nam się nie zmieni.

 

Z tego co znalazłem w necie to takie ukryte okna są dość częstą praktyką w różnych grach. Podobno ma to jakiś związek z upakowaniem programu w jedną ikonę na pasku zadań. Najlepiej zawsze sobie poszukać uchwytu do okna nadrzędnego i porównać z tym co już mamy.

 

Mam nadzieję że na windows 8 też się to rozwiązanie sprawdzi, albo pomoże chociaż trochę :)

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...