2009-05-13 5 views
8

Mam aplikację C++, którą przesyłam z Win32 do OSX. Chciałbym móc uruchamiać dowolne pliki, tak jakby użytkownik je otwierał. Jest to łatwe w przypadku Windows przy użyciu ShellExecute. Jak mogę zrobić to samo na Macu?Odpowiednik OSX dla ShellExecute?

Dzięki!

Odpowiedz

14

Możesz zadzwonić pod numer system(); w dowolnej aplikacji C++. W systemie OSX możesz użyć komendy open, aby uruchamiać rzeczy tak, jakby zostały kliknięte.

Z dokumentacji dla otwartych:

Otwarta polecenie otwiera plik (lub katalog lub adres URL), tak jakby trzeba było dwukrotnie kliknąć ikonę pliku. Jeśli nie zostanie określona żadna nazwa aplikacji, domyślna aplikacja określona przez LaunchServices jest używana do otwierania określonych plików.

Wszystko razem, to będzie wyglądać:

string command = "open " + filePath; 
system(command.c_str()); 
+0

Myślę, że odpowiednik windows to '" start "+ filePath;' – MSalters

9

Kolejna propozycja, jeśli pracujesz z kakao:

[[NSWorkspace sharedWorkspace] openFile:@"pathToFile"]; 

Istnieją inne podobne metody NSWorkspace również. Na przykład, aby otworzyć aplikację lub URL:

[[NSWorkspace sharedWorkspace] launchApplication:@"pathToApplication"]; 
[[NSWorkspace sharedWorkspace] openURL:[NSURL URLWithString:@"URL"]]; 

Praca przez [NSWorkspace sharedWorkspace] może dać nieco więcej kontroli niż standardowe C system() rozmowy.

Edytuj: Pamiętaj, że możesz użyć Objective-C++, aby wymieszać kod C++ z kodem Objective-C i tym samym wywołać metody kakao.

0

Możesz po prostu użyć systemu(); funkcjonować. Na przykład, powiedz, że chcesz umieścić swoją stację dokującą w rogu ekranu.

można po prostu umieścić:

system(defaults write com.apple.dock pinning -string end); 
sleep(1f); 
system(killall Dock); 

To takie proste. Mam nadzieję, że pomogłem :)

+1

Zgadza się, chociaż będziesz musiał dodać cytaty wokół argumentu system(). – cypheon