ďťż

Ładny brzuch

Tak mniej więcej, w jaki sposób sprawdzić, czy program już nie został uruchomiony.
Jeśli byłby już uruchomiony wtedy wczytywałby się plik właśnie w tym programie. (ważne by nie odpalał kolejnego programu).

Tu fragment kodu w OnShow formy:

begin If ((ParamCount>=1) and (FileExists(ParamStr(1))=true)) then begin Form1.SpeedButton1.Click; Rich1.Lines.LoadFromFile(ParamStr(1)); PageControl1.ActivePage.Caption:= ExtractFileName(ParamStr(1)); PageControl2.ActivePage.Caption:= ExtractFilePath(ParamStr(1))+PageControl1.ActivePage.Caption; end;
czyli wybierając ręcznie z dysku: otwórz za pomocą... (i tu mój programik) program tworzy nową zakładkę, następnie wczytuje do niej plik. (reszta kodu nieistotna - caption zakładek zmienia się na nazwę pliku i na ścieżkę z nazwą).

Jakieś drobne porady?



1. Możesz wylistować wszystkie procesy:

http://msdn.microsof...y/ms682629.aspx
http://msdn.microsof...623(VS.85).aspx

Programy w Win32 mogą przesyłać informacje pomiędzy sobą poprzez komunikaty:

http://www.google.pl...e...=Szukaj&lr=
http://www.cryer.co....dow_message.htm

Główne okno procesu znajdziesz listując wszystkie okna i porównując ID procesów:

http://msdn.microsof...497(VS.85).aspx
http://msdn.microsof...e/cc301495.aspx

Listujesz procesy, sprawdzasz czy program już jest uruchomiony, szukasz głównego okna i wysyłasz odpowiedni komunikat.

2. Zamiast listować procesy, możesz od razu znaleźć główne okno korzystając z funkcji FindWindow(NULL, "tytuł_Twojego_programu"). W takim wypadku tytuł musi być zawsze taki sam. Jeśli podczas działania programu zmienisz tytuł (np. dodasz nazwę aktualnie otwartego pliku) nie znajdziesz okna.

3. Rozwiązania są dość zawiłe, ale to jedyny sposób na komunikację pomiędzy dwoma programami (oprócz sieci czy plików). Skoro mowa o plikach, to możesz zapisywać informacje o uruchomionym programie w rejestrze lub pliku. Kopia programu szuka tych informacji, jeśli program jest uruchomiony, to zapisuje parametry (np. nazwę pliku, których chcesz uruchomić), a pierwszy program sprawdza co jakiś czas zmiany. Jeśli pojawi się coś nowego, to wykonuje odpowiednie czynności (np. ładuje nowy plik).
Użytkownik Kozack edytował ten post 31 lipiec 2008, 00:31

Skoro mowa o plikach, to możesz zapisywać informacje o uruchomionym programie w rejestrze lub pliku. Kopia programu szuka tych informacji, jeśli program jest uruchomiony, to zapisuje parametry (np. nazwę pliku, których chcesz uruchomić), a pierwszy program sprawdza co jakiś czas zmiany. Jeśli pojawi się coś nowego, to wykonuje odpowiednie czynności (np. ładuje nowy plik).

Bez obrazy, ale to najbardziej glupie i niebezpieczne rozwiazanie jakie mozna sobie wyobrazic. Wystarczy reset, zeby plik zostal, i program doda do pliku jakies info myslac ze glowny program jest juz otwarty, a on nie bedzie i nie otworzy wpisanego pliku - w efekcie programu nie bedzie sie dalo wlaczyc. Oczywiscie mozna sie przed tym zabezpieczyc, ale moze byc wiele innych sytuacji... po prostu o niebo lepiej uzyc komunikatow.

Przerób sobie ten kod: http://forum.ks-eksp...m...st&p=779913
albo http://forum.ks-eksp...m...st&p=617828



http://groups.google...5dcaf344552d08f

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • zsf.htw.pl
  •