C++, maksymalizacja określonego okna

0

Witam
Jestem bardzo początkującym, ale nigdzie nie znalazłem rozwiązania mojego problemu.
Chodzi mi o to, czy (a jeśli, to jak) można (konsola) zmaksymalizować określone okno, wykonać tam pewną akcję, a następnie z powrotem zminimalizować je?
Pozdrawiam

0

Zależy z jakiego GUI to okno korzysta, no chyba że chcesz maksymalizować okno konsoli/jakiegoś zewnętrznego programu, wtedy pozostaje ci API twojego systemu.

0

Chodzi mi o napisanie programu, który maksymalizuje np. Notatnik, wpisuje tam znak i minimalizuje.

0

Zakładając, że piszesz program pod windowsem potrzebujesz wykorzystać WinApi .
Następnie musisz pobrać uchwyt okna, który cie interesuje i teraz na przykład:

  • tutaj masz funkcję, która pewnie może ci pomóc - nie szkodzi, że inny język
  • wykorzystać SendMessage i przesłać coś z tego i tego - przy pomocy tego możesz zrobić i maksymalizacje, i wysłać do niego co tam chcesz.
0

Ok, dzięki, wcześniej próbowałem z tym ShowWindow, ale widzę, że jeszczę muszę się poduczyć :)

0
querion napisał(a):

Ok, dzięki, wcześniej próbowałem z tym ShowWindow, ale widzę, że jeszczę muszę się poduczyć :)

Nie koniecznie potrzebujesz ShowWindow,* możesz to zrobić na różne sposoby - jeśli chcesz tylko odpalić notatnik i wysłać do niego tekst to wystarczy myślę:

    WinExec("notepad.exe", SW_SHOWMAXIMIZED);
    HANDLE okno = FindWindow(L"Notepad", 0);
    okno = GetWindow((HWND__*)okno, GW_CHILD);
    SendMessage((HWND__*)okno, WM_SETTEXT, 0, (LPARAM)(LPCTSTR)L"Coś Tam");

edit:

  • zapomniałem o:
querion napisał(a):

a następnie z powrotem zminimalizować je

0
HANDLE okno = FindWindow(L"Notepad", 0); 

Czy to sprawi, że okno zostanie zmaksymalizowane?

0
querion napisał(a):
HANDLE okno = FindWindow(L"Notepad", 0); 

Czy to sprawi, że okno zostanie zmaksymalizowane?

Nie. Przeczytaj ten kod jeszcze raz dokładnie.

0

Ach, to tylko uchwyt, tak? WinExec uruchamia notatnik zmaksymalizowany?

0

Bez podstawowej wiedzy o WinAPI nie dasz rady napisać tego programu. Znajdź jakiś tutorial i napisz własny program w WinAPI. Musisz dowiedzieć się o co chodzi z tymi uchwytami i komunikatami. Inaczej nie da rady.

0

Ok, dzięki, czytałem trochę na cpp0x, ale nie było tam tego o co mi chodzi, polecasz może jakiś tut do podstaw WinApi?

0

Tak, dokładnie. Wystarczy kilka pierwszych tutoriali pokazujące jak się tworzy okna i ich używa. W tym kursie na http://cpp0x.pl wystarczą ci pierwsze 3 tutoriale. Ja uczyłem się z winapi.org ale widzę, że strona już nie istnieje.

0

Ok, lece czytać ;) Tylko ostatnie pytanie:

HWND hwnd;
 hwnd=FindWindow(0, "Notepad");
int ShowWindow (hwnd, SW_MAXIMIZE );
 getch(); 

Co tu jest źle ;)?

0

O w mordę, to nie wiesz nawet jak się funkcje wywołuje? Aj. Nie int ShowWindow (hwnd, SW_MAXIMIZE ); tylko ShowWindow (hwnd, SW_MAXIMIZE );

0

hahahaha, tak się skupiłem na tym ShowWindow, że o reszcie zapomniałem

0

Zauważ, że pobierasz uchwyt jedynie po przez nazwę okna a ona może się nazywać różnie - "Bez tytułu - Notatnik", "mama.txt - Notatnik" itp.

0

Dlatego właśnie przyda się poznanie podstaw. Czym jest nazwa okna, czym nazwa klasy okna...
Przyda ci się programik spy++ lub podobny. Dzięki niemu możesz podejrzeć w jaki sposób są skonstruowane okna otwartych programów co ci pomoże dobrać się do nich.

0

Ok, dzięki to już ogarnąłem, ale teraz chciałbym wysłać komunikat ( symulacja klaw, myszki) do nieaktywnego okna, próbowałem PostMessage i SendMessage, ale nie działa, jak to zrobić?

0
  1. POKAŻ KOD!
  2. Wyjaśnij co się dzieje gdy go uruchamiasz, a czego oczekujesz.
  3. Jak "klikać" w innej aplikacji opisywano nie raz i nie tylko na 4p. Poszukaj.
  4. Używałeś spy++? Komunikaty muszą trafić do konkretnej kontrolki a nie do głównego okna aplikacji.
0
    HWND okno;
    okno = FindWindow("Notepad",0);
DWORD jed=GetCurrentThreadId();
DWORD nota=GetWindowThreadProcessId(okno, NULL);
AttachThreadInput(jed, nota, true);
        getch();
    Sleep(1000);
    SetActiveWindow(okno);
PostMessage(okno,WM_KEYDOWN,0x57,LPARAM(5));
Sleep(500);
PostMessage(okno,WM_KEYUP,0x57,NULL); 

Tak wygląda kod
Czyli zamiast uchwytu okna muszę zdobyć uchwyt części okna, tego, w które jest wpisywany kod?

1 użytkowników online, w tym zalogowanych: 0, gości: 1