2009-08-21 13 views
6

Piszę bibliotekę, która korzysta z kilku funkcji z biblioteki windows user32.dll, ale kompiluję ją z Mono, aby zobaczyć, jak to kosztuje na OS X. Niestety nie może znaleźć Biblioteka user32.dll z oczywistych powodów.Odpowiednik user32.dll na OS X

Ale moje pytanie brzmi: czy istnieje podobna biblioteka na OS X, z której mogę korzystać? Szukam szczególnie następujących funkcji.

[DllImport("user32.dll")] 
static extern IntPtr GetForegroundWindow(); 

[DllImport("user32.dll")] 
static extern uint GetWindowThreadProcessId(IntPtr hWnd, out uint lpdwProcessId); 

[DllImport("user32.dll")] 
static extern int GetWindowText(IntPtr hWnd, StringBuilder text, int count); 

[DllImport("user32.dll")] 
static extern bool GetLastInputInfo(ref LASTINPUTINFO plii); 

Myślę, że zainstalowanie WINE pomogłoby, ale wolałbym tego uniknąć, jeśli to możliwe. Czy używanie Ruby Win32 jest również opcją?

+1

Model okna jest zupełnie inny - czy nie można w tym celu użyć czysto Mono? W przeciwnym razie będziesz musiał spojrzeć na jedną z bibliotek Cocoa/Mono – Mark

Odpowiedz

5

Od the Mono website:

Jeśli dzwonisz coś, co jest podany przez platformę (zazwyczaj Win32 API), trzeba będzie znaleźć sposób, aby osiągnąć tę samą funkcjonalność na wszystkich platformach docelowych. Może to oznaczać zastąpienie twojego niezarządzanego połączenia zarządzanym odpowiednikiem, lub może to oznaczać wykrycie, na jakiej platformie pracujesz i wywołanie Win32/* nix/OSX/etc. równowartość.

(http://pinvoke.net czasami może pomóc znaleźć zarządzaną odpowiednik Win32 API).

Jeśli dzwonisz do własnej rodzimej biblioteki, to zależy od możliwości cross-platformowych biblioteki. Jeśli twoja natywna biblioteka działa na wszystkich platformach docelowych, twoja aplikacja powinna być w porządku. Jeśli nie, możesz sprawić, że twoja natywna biblioteka będzie kompatybilna z wieloma platformami, wykonać operację w zarządzanym kodzie lub obejść ją, wykrywając platformę, na której działasz.

Łącza do strony pod adresem Interop with Native Libraries.

Przeglądając pinvoke, jednym rezultatem jest to, że GetForegroundWindow referencje mwinapi - na pierwszy rzut oka, że ​​nie wygląda na przenośne, więc możesz mieć pecha w znalezieniu rozwiązania zarządzanego.

1

Prawdopodobnie nie ma bezpośredniego odwzorowania. W OS X istnieje kilka środowisk Cocoa/Carbon/Java/X11, a każde środowisko ma swoje własne API. Kakao i Java są obiektowymi interfejsami API, natomiast węgiel i X11 są oparte na funkcjach. Apple zaleca używanie Cocoa do nowej aplikacji. Musisz utworzyć instancje obiektów Cocoa i zamknąć dostęp poprzez wywołanie funkcji.