Process - zewnetrzna aplikacja wewnatrz

0

Witam wszystkich,
Pytanie czy mozliwe.jeśli tak jak to zrobić:

Chcę z poziomu swojej aplikacji (w visual C# express 2008) wywołać zewnetrzną aplikację...niewazne czy to notepad czy moja jakas wlasna ..

Process pr - new Process();
....
..
pr.start();

Bajka :):)

ale otwieramy w ten sposób na "zewnatz te aplikację..a czy mogę zrobić ze np ten"notepad" uruchomi mi się w moim wewnetrznym oknie w tworzonej aplikacji...

Drugie pytanie..wywołując process np . uruchamiając Painta z poziomu naszej App... jak sprawdzić czy dany process juz jest otwarty.. hmm sorki. nie proess tylko aplikacja... typu mam otworzonego notepad.. chce uruchomic z poziomu c# z jakims argumentem ale zeby mi się aktywował tenm juz optwarty (kiedys pzrez kogos pocos) anie jako nowy notepad ?????

Sprawa dla mnei jest wazna bo nie o notepada bedzie chodzic..wiec prosze o wyczerpujące odpowiedzi

0
  1. obawiam sie ze sie nie da. nowy proces bedzie mial calkowicie odrebne uchwyty i nijak go nie zepniesz z oknem juz istniejacego innego procesu. zreszta, musialbys jakos "magicznie" przekonac nowootwierana aplikacje, zeby swoje okno utworzyla w specjalny, inny sposob niz zwykla to dotad czynic. jesli aplikacja nie jest (czytaj: a na pewno nie jest) do tego przystosowana, to w ogole zapomnij ze mogles sadzic ze takie cos mogloby sie dac zrobic [acz w mysl zasady - da sie wszystko. tylko czy chcesz spedzic tyle czasu i grzebac tak nisko?]

  2. da sie sprawdzic, wystarczy np. przejrzec liste procesow.. ale ponownie -- to co ostatecznie chcesz uzyskac, NIE JEST sprawa TWOJEJ aplikacji, tylko tej ktora chcesz wywolac. to ona musi dostarczas taka mozliwosc.. wez np. spojrzyj na ten durny notepad. odpalisz notepada - otworzy sie czysty nowy plik. odpalisz "notepad dupa.txt" - otworzy Ci taki wlasnie plik. teraz wyobraz sobie ze odpalasz notepad, a potem chcialbys ... zeby dzialajacy notepad magicznie nagle sie dowiedzial ze ma otworzyc inny wskazany plik? jak? przeciez chyba nie chcesz mu symulowac klikniecia w menu plik->otworz->i klikidaczka by wybrac plik z listy? takie rzeczy robi sie inaczej.. albo dzialajcy proces musi wystawiac na zewnatrz specjalny interfejs komunikacyjny (patrz np DDE/open, comapi patrz word/excel) albo ... dziala to tak, ze kazde otworzenie pliku faktycznie odpala NOWY program, ale ten nowy program zauwaza ze jego kopia juz jest odpalona, wiec zamiast sie uruchamiac dalej w pelni -- wysyla wiadomosc do swojego poprzednika mowiaca "a wez otworz to" i na tym konczy i sie zamyka..

tak czy owak, jest to do napisania recznego w TYM DRUGIM PROGRAMIE przez autorow TEGO DRUGIEGO PROGRAMU, podobnie jak z w/w oknem 'zagniezdzonym'..

nie wiem jak 1'wsza, ale druga rzecz od biedy mozna zrobic w programie 'wywolujacym', o ile dokladnie znasz program 'docelowy', ale bedzie to dosc upierdliwe nawet jesli ten program reczywiscie udostepnia odpowiedni 'interfejs' od tego.. jesli zas nie udostepnia, albo jesli nie daj boze wyobrazasz sobie ze zrobisz jakies takie cudo, ze ten program moze byc rozny i 'do wyboru' - raz notepad, raz word, raz winmp a raz koziatrabka napisana wczoraj przeze mnie -- to imho zostaje Ci sumulacja klikacznki, a i z tym sie zarzniesz a nie napiszesz dostatecznie poprawnie zeby obslugiwala kazdy program;p

disclaimer: odpowiedz napisana celowo w formie simple.wiki..

0

Co do pierwszego problemu to można by było próbować w WinApi, chociażby poprzez hooki - można by było próbowac np. ustawić okno główne uruchamianej aplikacji jako child dla twojego ze stylem DS_CONTROL (czy to zadziala nie wiem - nie sprawdzalem, ale możliwe że tak).

Z tym, że schodząc tak nisko to najwygodniej by było przygotować natywną dll-kę w C, która robi to wszystko i importować ją do projektu w C# przekazując uchwyt okna programu głównego w C# - tak przynajmniej ja bym to robił

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