Jak zrobić, aby w obiekcie np. TPanel otworzyć zewnętrzny program np. notatnik?
Program w programie
- Rejestracja: dni
- Ostatnio: dni
otwieranie notepada w panelu nie ma raczej sensu, lepiej polozyc na nim memo, badz richedit i przy stracie wczytac zawartosc pliku, a przy zamknieciu zapisac
milego dnia [diabel]
- Rejestracja: dni
- Ostatnio: dni
nie wiem czy sie da ....
moze sprobuj sie pobawic procesami (createprocess) i jako uchwyt podaj uchwyt panelu
- Rejestracja: dni
- Ostatnio: dni
- Lokalizacja: Wdzydze
Kontener OLE
- Rejestracja: dni
- Ostatnio: dni
A może raczej coś w stylu dokowania okien?
- Rejestracja: dni
- Ostatnio: dni
A może po prostu zmień rodzica :)
Zadeklaruj zmienną globalną
var
NotepadHandle: HWND;
Potem gdzieś w kodzie:
NotepadHandle := FindWindow('Notepad', nil);
if NotepadHandle > 0 then
Windows.SetParent(NotepadHandle, Panel.Handle);
Potem w OnClose formy przywróć rodzica:
if NotepadHandle > 0 then
Windows.SetParent(NotepadHandle, HWND_DESKTOP);
- Rejestracja: dni
- Ostatnio: dni
A może po prostu zmień rodzica :)
Zadeklaruj zmienną globalną
var
NotepadHandle: HWND;
Potem gdzieś w kodzie:
NotepadHandle := FindWindow('Notepad', nil);
if NotepadHandle > 0 then
Windows.SetParent(NotepadHandle, Panel.Handle);
Potem w OnClose formy przywróć rodzica:
if NotepadHandle > 0 then
Windows.SetParent(NotepadHandle, HWND_DESKTOP);
W zasadzie o to chodziło (wielkie dzięki [hurra] ), ale pojawił się nowy problem związany z funckją FindWindow. Skąd ja mam wiedzieć jak się nazywa okno jakiejś aplikacji? W notatniku wystarczyło wpisać 'Notepad' i po sprawie ale jak chce wczytać inny program (dowolny, przypadkowy) to co wtedy?
- Rejestracja: dni
- Ostatnio: dni
- Postów: 501
Jak sam tworzysz proces createProcessem, to w result masz uchwyt
- Rejestracja: dni
- Ostatnio: dni
Jak sam tworzysz proces createProcessem, to w result masz uchwyt
z tym createprocess coś mi nie idzie, przeanalizowałem nawet jakiś kod w faq (http://4programmers.net/view_faq.php?id=464). Aplikacja się nawet wczytuje, ale jak próbuje wczytać do panelu program za pomocą uchwytu hProcessHandle to nic się nie dzieje :-(
- Rejestracja: dni
- Ostatnio: dni
- Lokalizacja: Monachium
- Postów: 848
Jak sam tworzysz proces createProcessem, to w result masz uchwyt
Juz 2 osoba mi o tym pisze. Poszukaj, tu obok jest topic o pobieraniu uchwytu uruchamianego programu, zobaczysz jakie mam problemy, moze znasz rozwiazanie.
Co do autora tego ropicu, na mojej stronie w dziale cracking narzedzia jest prosty programik - hackeye, on pokazuje nazwy programow i ich klasy.
- Rejestracja: dni
- Ostatnio: dni
Jak sam tworzysz proces createProcessem, to w result masz uchwyt
Juz 2 osoba mi o tym pisze. Poszukaj, tu obok jest topic o pobieraniu uchwytu uruchamianego programu, zobaczysz jakie mam problemy, moze znasz rozwiazanie.
Co do autora tego ropicu, na mojej stronie w dziale cracking narzedzia jest prosty programik - hackeye, on pokazuje nazwy programow i ich klasy.
programik bardzo przydatny, rozwiązuje z pewnością częśc moich problemów z uchwytami. Wielkie dzięki. :-)
- Rejestracja: dni
- Ostatnio: dni
No, dobrze. Kontynuując temat programu w programie to wszystko jest git ale wnerwia mnie jeszcze jeden mały element, a mianowicie pasek wczytywanego programu (ten z przyciskami minimalizuj, zamknij). Czy nie można by było go usunąć?
- Rejestracja: dni
- Ostatnio: dni
tego sie nie pozbedziesz, gdyz to jest prezent od twórców systemu i tego nie usuniesz chodz bys im za to zaplacil :P Za to ja dorzuce pytankiem: czy istnieje mozliwosc ustawienia tego Notepada na zMaxymalizowany.
- Rejestracja: dni
- Ostatnio: dni
No, dobrze. Kontynuując temat programu w programie to wszystko jest git ale wnerwia mnie jeszcze jeden mały element, a mianowicie pasek wczytywanego programu (ten z przyciskami minimalizuj, zamknij). Czy nie można by było go usunąć?
// pozbycie się belki tytułowej
SetWindowLong(NotepadHandle, GWL_STYLE, GetWindowLong(NotepadHandle, GWL_STYLE) and not WS_CAPTION);
// odświerzenie, żeby zmiany były widoczne
SetWindowPos(NotepadHandle, HWND_TOP, 0, 0, 0, 0, SWP_NOSIZE or SWP_NOMOVE);
Żeby potem przywrócić normalny wygląd zadeklaruj dodatkową zmienna typu Integer, do ktorej przypiszesz za pomocą GetWindowLong oryginalny styl, a potem go przywrócisz.
- Rejestracja: dni
- Ostatnio: dni
- Postów: 196
Tiaa.. no to może się pomyliłem twierdząc, że nie można się pozbyć tej belki :P Co w takim razie z WindowState okienka [???]
- Rejestracja: dni
- Ostatnio: dni
- Lokalizacja: Monachium
- Postów: 848
mozesz pokazac swoj program? Chcialbym zobaczyc jak to dziala.
- Rejestracja: dni
- Ostatnio: dni
- Postów: 5046
Tiaa.. no to może się pomyliłem twierdząc, że nie można się pozbyć tej belki :P Co w takim razie z WindowState okienka [???]
Może spróbuj wysłać komunikat WM_MAXIMIZE ?
- Rejestracja: dni
- Ostatnio: dni
Czy możliwe jest sterowanie wczytanym program? Chodzi mi o parametry WParam i LParam. Skąd je zdobyć i jak z nich korzystać (zarówno wysyłanie komunikatów, jak i odbieranie).
P.S. Parametry do WinAmp-a mnie nie interesują bo są opisane w artach. Chodzi mi bardziej o zdobycie parametrów do dowolnego programu (np. Notatnik, Paint, Gadu-Gadu, foobar2000).
- Rejestracja: dni
- Ostatnio: dni
Wszytkie (prawie) okienka obsługują standardowe message'i, takie które odpowiadają za zmiane rozmiaru, (także ustawianie tekstu w memo...) etc. Co do reszty, to nie ma zbyt wielu programów, które w ten sposób umożliwiają całkowite sterowanie sobą. ;-)
- Rejestracja: dni
- Ostatnio: dni
- Postów: 556
jak zamiast findwindow
znalezc uchwyt okna znajac jego scr doexeka
np jak wiem ze c:\opera.exe jest wlaczone to jak uzyskac do niejdostep
lub
chodciaz znalezc naliscie procesow ?
- Rejestracja: dni
- Ostatnio: dni
Witajcie
Chciałbym przed wami postawić taki problem, pisze w tym wątku bo zahaczają o siebie. Mam kilka aplikacji, jedna ma być aplikacją bazową która otwiera pozostałe jako aplikacje MDIChild. Te pozostałe aplikacje nie mogą być dll'kami do których przekazuje 'application'. Ktoś z was wie jak to zrobić?
Kombinowałem z tym co już pisaliście w tym temacie ale coś mi nie idzie, próbuje wywołać aplikacje tak:
var
app : HWND;
si: TStartupInfo;
pi: TProcessInformation;
begin
createprocess('prog/prog1.exe',nil,nil,nil,false,0,nil,nil,si,pi);
app := FindWindow('prog1', nil);
if app > 0 then
Windows.SetParent(app, self.Handle);
//aplikacja wywołująca jest typu fsMDIForm a okno główne aplikacji wywoływanej MDIChild
Problem jest taki że aplikacja w ogóle się nie otwiera nie mówiąc o otwarciu się wewnątrz drugiej.
Z góry dziękuje.
- Rejestracja: dni
- Ostatnio: dni
wybacz ale nie rozumiem co masz na myśli, w jaki sposób wyzerować? nie mają one metody zerującej, więc coś podstawić ale co?
- Rejestracja: dni
- Ostatnio: dni
już sobie poradziłem, ale teraz jest taki problem że okno główne tej otwieranej aplikacji nie może być MDIChild bo wyskakuje błąd, a właśnie na tym mi zależy żeby ten program otworzył się wewnątrz otwierającej aplikacji. Są na to jakies sposoby?