logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[C++] Otwieranie innych aplikacji w Borland C++ Builder.

Prymulka 24 Lut 2005 21:36 4641 6
REKLAMA
  • #1 1262580
    Prymulka
    Poziom 18  
    Posty: 378
    Pomógł: 9
    Ocena: 8
    W moim programie po wykonaniu zdarzenia MouseDown chcę żeby uruchomił się inny program: umieszczony w data\\cw1.exe. Tyle że program musi sprawdzić czy cw1.exe nie jest już otwarte, a dopiero wtedy je otworzyć. Jak to zrobić? Z góry dzięki za pomoc.

    Moderowany przez Marek_Skalski:

    Poprawiłem temat. Zamykam.

  • REKLAMA
  • #2 1262747
    trivial1
    Poziom 20  
    Posty: 274
    Pomógł: 36
    Ocena: 61
    Ja Ci moge podpowiedziec bys uzyl do tego funkcji API: CreateMutex lub CreateFileMapping (obie sprawdzaja czy jest program uruchomiony), a odpalenie innego proga: ShellExecute. Niestety nie napisze Ci gotowych procedur, poniewaz nie pisze w c++, tylko w Delphi i Masm. A w Masm robilem takie cos.
    Pozdro...8)
    edit:
    A bo bym zapomnial, te funkcje mozesz oblukac w helpie: Win32 Programmers Reference, powinien byc dolaczony do buildera. A jak nie ma, to szukaj na msdn.com opisu tych funkcji.
  • REKLAMA
  • #3 1262750
    MirekCz
    Poziom 35  
    Posty: 2220
    Pomógł: 330
    Ocena: 62
    przeszukaj otwarte programy czy juz nie ma tego podanego przez ciebie uruchomionego

    nie pamietam w tej chwili jaka byla nazwa procedury ktory zwracala dane o wszystkich otwartych aplikacjach, musisz spojrzec do msdn czy jakiegos innego spisu funkcji pod windowsa.
  • #4 1268582
    Prymulka
    Poziom 18  
    Posty: 378
    Pomógł: 9
    Ocena: 8
    W helpie znalazłem tylko funkcję ShellExecute, niestety wiele się z niego nie dowiedziałem. Niema także wogóle opisanych funkcji CreateMutex i CreateFileMapping. Znacie inny sposób żeby sprawdzić czy plik jest otwarty?
  • REKLAMA
  • Pomocny post
    #5 1269418
    trivial1
    Poziom 20  
    Posty: 274
    Pomógł: 36
    Ocena: 61
    A co to za help ?? :/ Ja Ci dam opis tych funkcji, Ty musisz radzic sobie dalej...
    
    HANDLE CreateMutex(
    
        LPSECURITY_ATTRIBUTES lpMutexAttributes,	// pointer to security attributes 
        BOOL bInitialOwner,	// flag for initial ownership 
        LPCTSTR lpName 	// pointer to mutex-object name  
       );
    

    --------------
    
    HANDLE CreateFileMapping(
    
        HANDLE hFile,	// handle to file to map 
        LPSECURITY_ATTRIBUTES lpFileMappingAttributes,	// optional security attributes 
        DWORD flProtect,	// protection for mapping object 
        DWORD dwMaximumSizeHigh,	// high-order 32 bits of object size  
        DWORD dwMaximumSizeLow,	// low-order 32 bits of object size  
        LPCTSTR lpName 	// name of file-mapping object 
       );
    

    ---------------
    
    HINSTANCE ShellExecute(
    
        HWND hwnd,	// handle to parent window
        LPCTSTR lpOperation,	// pointer to string that specifies operation to perform
        LPCTSTR lpFile,	// pointer to filename or folder name string
        LPCTSTR lpParameters,	// pointer to string that specifies executable-file parameters 
        LPCTSTR lpDirectory,	// pointer to string that specifies default directory
        INT nShowCmd 	// whether file is shown when opened
       );
    

    Piszesz tylko nazwe funkcji, bez tych HANDLE i HINSTANCE i dajesz odpowiednie parametry.
    Masz znalazlem jakis link, zjedz nizej i tam jest przyklad: [ www ]
  • REKLAMA
  • #6 1271434
    Prymulka
    Poziom 18  
    Posty: 378
    Pomógł: 9
    Ocena: 8
    Dziwna sprawa z tą funkcją ShellExecute. Ja to zapisałem tak:
    ShellExecute(NULL, NULL, "data\\cw1.exe", NULL, NULL, SW_SHOW);
    czyli plik, który chcę uruchomić "cw1.exe"znajduje się w podkatalogu "data". W tym samym podkatalogu znajdują się też obrazki, które uruchamiają się w cw1.exe. Mo i jak uruchomię program to wyskakują błędy, że nie może znaleźć plików jpg. Gdy wszystkie pliki wrzucę do jednego katalogu i uruchomię odrazu "cw1.exe" to wszystko jest w porządku. Jak to zrobić by działało jak ja chcę?
  • #7 1271672
    trivial1
    Poziom 20  
    Posty: 274
    Pomógł: 36
    Ocena: 61
    A sprobuj napisac tak:
    ShellExecute( NULL, "open", "tu sciezka do programu", NULL, NULL, SW_SHOW);

    lub
    
    ShellExecute( NULL, "open", "tu sciezka do progra", NULL, "C:\\", SW_SHOW);

    lub 3 metoda:
    
    WinExec("sciezka", SW_SHOW);

    ..kombinuj :P
    Pozdro...8)

Podsumowanie tematu

✨ W dyskusji poruszono problem uruchamiania z poziomu Borland C++ Builder innej aplikacji (datacw1.exe) po zdarzeniu MouseDown, z jednoczesnym sprawdzeniem, czy program nie jest już uruchomiony. Zaproponowano użycie funkcji WinAPI takich jak CreateMutex lub CreateFileMapping do wykrywania uruchomionych instancji aplikacji oraz ShellExecute do jej uruchomienia. Podkreślono, że dokumentacja tych funkcji może nie być dostępna w standardowym helpie Buildera i zasugerowano korzystanie z MSDN. Wątpliwości dotyczyły również poprawnego ustawienia ścieżki roboczej przy wywołaniu ShellExecute, aby program mógł znaleźć potrzebne pliki (np. obrazy jpg) w podkatalogu. Zaproponowano eksperymentowanie z parametrami ShellExecute, w tym ustawienie operacji na "open" oraz wskazanie katalogu roboczego, a także alternatywne użycie funkcji WinExec. Dyskusja skupia się na praktycznych aspektach integracji i kontroli uruchamiania zewnętrznych aplikacji w środowisku Windows z poziomu Borland C++ Builder.
Wygenerowane przez model językowy.
REKLAMA