Program w programie

0

Jak zrobić, aby w obiekcie np. TPanel otworzyć zewnętrzny program np. notatnik?

0

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]

0

nie wiem czy sie da ....

moze sprobuj sie pobawic procesami (createprocess) i jako uchwyt podaj uchwyt panelu

0

Kontener OLE

0

A może raczej coś w stylu dokowania okien?

0

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);
0

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?

0

Jak sam tworzysz proces createProcessem, to w result masz uchwyt

0

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 :-(

0

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.

0

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. :-)

0

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ąć?

0

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.

0

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.

0

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 [???]

0

mozesz pokazac swoj program? Chcialbym zobaczyc jak to dziala.

0

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 ?

0

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).

0

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ą. ;-)

0

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 ?

0

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.

0

Wyzeruj zmienne si i pi.

0

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?

0

Poczytaj o funkcji ZeroMemory.

0

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?

0

A może dało by się to zrobić od strony aplikacji otwieranej, że przed stworzeniem formy albo jakoś w trakcie jej tworzenia ustawić rodzica jako aplikacje o znanym uchwycie, co wy na to? Mozę jakies wskazówki ;)

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