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
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.
Chodzi mi o napisanie programu, który maksymalizuje np. Notatnik, wpisuje tam znak i minimalizuje.
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:
Ok, dzięki, wcześniej próbowałem z tym ShowWindow, ale widzę, że jeszczę muszę się poduczyć :)
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
HANDLE okno = FindWindow(L"Notepad", 0);
Czy to sprawi, że okno zostanie zmaksymalizowane?
querion napisał(a):
HANDLE okno = FindWindow(L"Notepad", 0);
Czy to sprawi, że okno zostanie zmaksymalizowane?
Nie. Przeczytaj ten kod jeszcze raz dokładnie.
Ach, to tylko uchwyt, tak? WinExec uruchamia notatnik zmaksymalizowany?
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.
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?
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.
Ok, lece czytać ;) Tylko ostatnie pytanie:
HWND hwnd;
hwnd=FindWindow(0, "Notepad");
int ShowWindow (hwnd, SW_MAXIMIZE );
getch();
Co tu jest źle ;)?
O w mordę, to nie wiesz nawet jak się funkcje wywołuje? Aj. Nie int ShowWindow (hwnd, SW_MAXIMIZE );
tylko ShowWindow (hwnd, SW_MAXIMIZE );
hahahaha, tak się skupiłem na tym ShowWindow, że o reszcie zapomniałem
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.
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.
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ć?
- POKAŻ KOD!
- Wyjaśnij co się dzieje gdy go uruchamiasz, a czego oczekujesz.
- Jak "klikać" w innej aplikacji opisywano nie raz i nie tylko na 4p. Poszukaj.
- Używałeś spy++? Komunikaty muszą trafić do konkretnej kontrolki a nie do głównego okna aplikacji.
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?