Strona: [  << <   1   > >>  ]  z  1     
Autor Temat: Druga kopia aplikacji
bisiek




Typ: neutral
Postów: 487
Zarejestrowany: Jul 2003
Druga kopia aplikacji

Witam

Wiem jak sprawdzić czy jest już włączona kopia aplikacji, ale nie wiem jak działa wykrywanie. Czy ktoś wie coś na ten temat, jakie funkcje api są do tego używane? Jeżeli VB używa do tego funkcji z msvbvm, to w jaki sposób jest to zrobione np. w c++ czy w assemlerze?

[Post edytowany dnia 15-11-2004 18:18 przez bisiek]


_____________________________________________
www.mob.abc.pl - moja strona o VB

15-11-2004 18:14
Pokaż profil bisiek  Wyślij email do bisiek   Odwiedź stronę bisiek       3380672
marcin_an
Forumowicz




Typ: neutral
Postów: 1265
Zarejestrowany: Mar 2004

W jaki sposób konkretne programy wykonują tą operację - nie wiem. Natomiast ja mam dwa pomysły:
1) Proces podczas uruchamiania sprawdza, czy nie ma już okna należącego do danej klasy z charaktycznymi danymi. Jeśli nie - kontynuuje uruchamianie i tworzy takie okno, dzięki czemu następny proces już będzie wiedział, że nie może być uruchomiony.
2) Skorzystanie z możliwości, jakie daje WinAPI:
http://msdn.microsoft.com/library/en-us/dllproc/base/synchronization.asp?frame=true
http://msdn.microsoft.com/library/en-us/ipc/base/interprocess_communications.asp?frame=true
Ten punkt jest dośc ogólnikowy, ale można sobie z tego coś wybrać i wykorzystać do wykrycia, czy aplikacja ma już wcześniejszą instancję.


_____________________________________________
Jedzonko dla Google'a:
Forum na temat Visual Basic, C, C++, Pascal, Programowanie, API, PHP, VBA, VB.NET, QBasic, VBScript, Komputery
Moja strona o wszystkim

16-11-2004 10:25
Pokaż profil marcin_an  Wyślij email do marcin_an   Odwiedź stronę marcin_an  
bisiek




Typ: neutral
Postów: 487
Zarejestrowany: Jul 2003

Dzięki, coś z tego kapuję, ale z "Synchronization" to raczej niewiele.


_____________________________________________
www.mob.abc.pl - moja strona o VB

17-11-2004 17:12
Pokaż profil bisiek  Wyślij email do bisiek   Odwiedź stronę bisiek       3380672
marcin_an
Forumowicz




Typ: neutral
Postów: 1265
Zarejestrowany: Mar 2004

Samo "Synchronization" nie służy chyba do wykrywania drugiej insancji aplikacji. Ale dzięki funkcjom tej dziedziny można np. utworzyć tzw. mutex. Jeśli jeden egzemplarz programu go utworzy, to drugi sprawdzi i będzie wiedział, że tamten jest uruchomiony.


_____________________________________________
Jedzonko dla Google'a:
Forum na temat Visual Basic, C, C++, Pascal, Programowanie, API, PHP, VBA, VB.NET, QBasic, VBScript, Komputery
Moja strona o wszystkim

17-11-2004 17:52
Pokaż profil marcin_an  Wyślij email do marcin_an   Odwiedź stronę marcin_an  
bisiek




Typ: neutral
Postów: 487
Zarejestrowany: Jul 2003

Zadałem to pytanie na innym forum i dostałem odpowiedź "po włączeniu programu win32api dostaje on w sród parametrów coś takiego jak hPrevInstance" i niezbyt wiem o jaki parametr chodzi, jak to wykryć?


_____________________________________________
www.mob.abc.pl - moja strona o VB

27-11-2004 14:17
Pokaż profil bisiek  Wyślij email do bisiek   Odwiedź stronę bisiek       3380672
marcin_an
Forumowicz




Typ: neutral
Postów: 1265
Zarejestrowany: Mar 2004

hPrevInstance to uchwyt do poprzedniej instancji tego programu. W VB, jeśli taki dostanie - ustawia na True właściwość PrevInstance w obiekcie App. Natomiast z tego co wiem np. w C++ działa to tylko w Win3 i Win95 (ale nie daję głowy).


_____________________________________________
Jedzonko dla Google'a:
Forum na temat Visual Basic, C, C++, Pascal, Programowanie, API, PHP, VBA, VB.NET, QBasic, VBScript, Komputery
Moja strona o wszystkim

28-11-2004 09:43
Pokaż profil marcin_an  Wyślij email do marcin_an   Odwiedź stronę marcin_an  
bisiek




Typ: neutral
Postów: 487
Zarejestrowany: Jul 2003

Myślę że tak, bo wtedy by chyba nie działało na tych systemach, a działa. Masz może gdzieś przykład C++ z tym wykrywaniem?


_____________________________________________
www.mob.abc.pl - moja strona o VB

28-11-2004 13:11
Pokaż profil bisiek  Wyślij email do bisiek   Odwiedź stronę bisiek       3380672
marcin_an
Forumowicz




Typ: neutral
Postów: 1265
Zarejestrowany: Mar 2004

Kodów nie mam, ale jedna poprawka: w C++ działa... nie może działać w VB, a nie działać w C++. Prawdopodobnie nie działa w któejś z bibliotek dla C++, a nie, że wogóle nie da się tego zrobić w Cpp .


_____________________________________________
Jedzonko dla Google'a:
Forum na temat Visual Basic, C, C++, Pascal, Programowanie, API, PHP, VBA, VB.NET, QBasic, VBScript, Komputery
Moja strona o wszystkim

28-11-2004 17:25
Pokaż profil marcin_an  Wyślij email do marcin_an   Odwiedź stronę marcin_an  
bisiek




Typ: neutral
Postów: 487
Zarejestrowany: Jul 2003

Dzięki, a gdyby np. chcieć założyć haka na coś takiego, to jak to zrobić, na jaką bibliotekę i na jaką funkcję?


_____________________________________________
www.mob.abc.pl - moja strona o VB

29-11-2004 18:31
Pokaż profil bisiek  Wyślij email do bisiek   Odwiedź stronę bisiek       3380672
marcin_an
Forumowicz




Typ: neutral
Postów: 1265
Zarejestrowany: Mar 2004

Teoretycznie najlepiej byłoby zhookować każdą funkcję odpowiedzialną za odpalanie procesów: CreateProcess itp. Ale to wymaga miejsca do składowania informacacji o uruchomieniach (czytaj: programu monitorujaćego). Jeśli już ma się taki program to znowu okazuje się, że łatwiej poprostu kazać włąśnie temu programowi sprawdzać, czy nasz inny program nie jest już odpalony. Ale najefektywniejsza metodą pozostaje według mnie wyszukanie okien (to się robi szybciutko - funkcją FindWindow).


_____________________________________________
Jedzonko dla Google'a:
Forum na temat Visual Basic, C, C++, Pascal, Programowanie, API, PHP, VBA, VB.NET, QBasic, VBScript, Komputery
Moja strona o wszystkim

29-11-2004 18:45
Pokaż profil marcin_an  Wyślij email do marcin_an   Odwiedź stronę marcin_an  
bisiek




Typ: neutral
Postów: 487
Zarejestrowany: Jul 2003

Raczej chodzi mi o to, że zamiast tej funkcji jest użyta moja, przez co aplikacja nie będzie wykrywać że jest drugą kopią.


_____________________________________________
www.mob.abc.pl - moja strona o VB

29-11-2004 19:15
Pokaż profil bisiek  Wyślij email do bisiek   Odwiedź stronę bisiek       3380672
marcin_an
Forumowicz




Typ: neutral
Postów: 1265
Zarejestrowany: Mar 2004

No dobrze - zgaduję. Chcesz zrobić program, który będzie powodował, że druga kopia aplikacji (nie stworzonej do wielokrotnego uruchamiania jendoczesnie) nie będzie wiedziała o pierwszej kopii - tak?
No więc tutaj niestety nie mogę ci pomóc. Nie dlatego, że nie chcę, ale dlatego, że nie mam pomysłu jak to zrobić. Metod mogą być dziesiatki, jesli nie setki i nie da się z góry przewidzieć czego użył autor danego programu. A jeśli już to się będzie wiedziało, to nie zawsze da się to łatwo ominąć.


_____________________________________________
Jedzonko dla Google'a:
Forum na temat Visual Basic, C, C++, Pascal, Programowanie, API, PHP, VBA, VB.NET, QBasic, VBScript, Komputery
Moja strona o wszystkim

29-11-2004 20:19
Pokaż profil marcin_an  Wyślij email do marcin_an   Odwiedź stronę marcin_an  
bisiek




Typ: neutral
Postów: 487
Zarejestrowany: Jul 2003

Dzięki, jeszcze coś popróbuję.


_____________________________________________
www.mob.abc.pl - moja strona o VB

29-11-2004 20:37
Pokaż profil bisiek  Wyślij email do bisiek   Odwiedź stronę bisiek       3380672
Wszystkich odpowiedzi: 12 :: Maxymalnie na stronę: 20
Strona: [  << <   1   > >>  ]  z  1