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]

wesoledi
  • Rejestracja:ponad 22 lata
  • Ostatnio:ponad 5 lat
0

nie wiem czy sie da ....

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


+1 post
lofix
  • Rejestracja:około 23 lata
  • Ostatnio:3 dni
  • Lokalizacja:Wdzydze
0

Kontener OLE


Pozdrawiam. Karol
TH
  • Rejestracja:około 23 lata
  • Ostatnio:około 13 lat
0

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

MatroX
  • Rejestracja:około 22 lata
  • Ostatnio:prawie 11 lat
0

A może po prostu zmień rodzica :)
Zadeklaruj zmienną globalną

Kopiuj
var
  NotepadHandle: HWND;

Potem gdzieś w kodzie:

Kopiuj
NotepadHandle := FindWindow('Notepad', nil);
if NotepadHandle > 0 then
    Windows.SetParent(NotepadHandle, Panel.Handle);

Potem w OnClose formy przywróć rodzica:

Kopiuj
if NotepadHandle > 0 then
    Windows.SetParent(NotepadHandle, HWND_DESKTOP);
0

A może po prostu zmień rodzica :)
Zadeklaruj zmienną globalną

Kopiuj
var
  NotepadHandle: HWND;

Potem gdzieś w kodzie:

Kopiuj
NotepadHandle := FindWindow('Notepad', nil);
if NotepadHandle > 0 then
    Windows.SetParent(NotepadHandle, Panel.Handle);

Potem w OnClose formy przywróć rodzica:

Kopiuj
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?

WA
  • Rejestracja:ponad 21 lat
  • Ostatnio:ponad 12 lat
  • Postów:501
0

Jak sam tworzysz proces createProcessem, to w result masz uchwyt

NG
  • Rejestracja:około 21 lat
  • Ostatnio:ponad 18 lat
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 :-(

Darck
  • Rejestracja:ponad 22 lata
  • Ostatnio:6 miesięcy
  • Lokalizacja:Monachium
  • Postów:848
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.

NG
  • Rejestracja:około 21 lat
  • Ostatnio:ponad 18 lat
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. :-)

NG
  • Rejestracja:około 21 lat
  • Ostatnio:ponad 18 lat
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.

MatroX
  • Rejestracja:około 22 lata
  • Ostatnio:prawie 11 lat
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ąć?

Kopiuj
// 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.

CooBek
  • Rejestracja:prawie 22 lata
  • Ostatnio:ponad 12 lat
  • Postów:196
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 [???]

Darck
  • Rejestracja:ponad 22 lata
  • Ostatnio:6 miesięcy
  • Lokalizacja:Monachium
  • Postów:848
0

mozesz pokazac swoj program? Chcialbym zobaczyc jak to dziala.

JU
  • Rejestracja:około 22 lata
  • Ostatnio:2 miesiące
  • Postów:5042
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 ?

NG
  • Rejestracja:około 21 lat
  • Ostatnio:ponad 18 lat
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).

Pawel200x.5
  • Rejestracja:ponad 22 lata
  • Ostatnio:prawie 14 lat
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ą. ;-)

SH
  • Rejestracja:około 21 lat
  • Ostatnio:ponad 13 lat
  • Postów:556
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:

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

MA
  • Rejestracja:ponad 17 lat
  • Ostatnio:prawie 16 lat
  • Postów:501
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?

MA
  • Rejestracja:ponad 17 lat
  • Ostatnio:prawie 16 lat
  • Postów:501
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 ;)

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.