Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

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

24 Lut 2005 21:36 3969 6
  • Poziom 18  
    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.

  • Poziom 12  
    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.
  • Poziom 35  
    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.
  • Poziom 18  
    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?
  • Pomocny post
    Poziom 12  
    A co to za help ?? :/ Ja Ci dam opis tych funkcji, Ty musisz radzic sobie dalej...
    Code:

    HANDLE CreateMutex(

        LPSECURITY_ATTRIBUTES lpMutexAttributes,   // pointer to security attributes
        BOOL bInitialOwner,   // flag for initial ownership
        LPCTSTR lpName    // pointer to mutex-object name 
       );

    --------------
    Code:

    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
       );

    ---------------
    Code:

    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 ]
  • Poziom 18  
    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ę?
  • Poziom 12  
    A sprobuj napisac tak:
    Code:
    ShellExecute( NULL, "open", "tu sciezka do programu", NULL, NULL, SW_SHOW);

    lub
    Code:

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

    lub 3 metoda:
    Code:

    WinExec("sciezka", SW_SHOW);

    ..kombinuj :P
    Pozdro...8)