2008-09-02 9 views

Antwort

3

Qt enthält eine Beispiel-Screenshot-App in examples \ desktop \ screenshot. Qt funktioniert auf einer Reihe von Plattformen, einschließlich MacOSX.

http://trolltech.com/products/qt/

13

Zwei interessante Optionen, die ich gesehen habe, aber noch professionell zu verwenden, sind das screencapture-Dienstprogramm und eine MacFuse-Demo.

Das screencapture-Dienstprogramm gibt es seit 10.2, nach der man-Seite, und konnte mithilfe von NSTask mit einer Cocoa-Anwendung verknüpft werden.

Die MacFuse-Demo funktionierte, indem jedes Mal ein neuer Screenshot erstellt wurde, wenn ein Ordner geöffnet wurde oder so ähnlich. Sie könnten ein schnelles Skript schreiben, um auf das Bild zuzugreifen, wenn Sie es benötigen, ohne dass das Skript tatsächlich auf diesem Computer ausgeführt werden muss.

Aber im Ernst, Apple hat einen anderen Beispielcode namens "Son of Grab", der die neue CGWindow API verwendet, die ziemlich genial ist.

http://developer.apple.com/samplecode/SonOfGrab/

1

Die folgende könnte hilfreich sein, wenn Sie dies versuchen zu erreichen, mit C++ oder Python. Außerdem wäre dies noch hilfreicher für den Fall, dass Ihre programmatische Methode plattformübergreifend portabel sein soll. (Windows, Linux, Mac OSX und sogar darüber hinaus)

Eine frühere Antwort erwähnt QT.

In der gleichen Weise, wie QT Ihnen erlauben wird, einen Screenshot zu erfassen und zu speichern, tut dies auch ein anderes "konkurrierendes" Framework, nämlich wxWidgets. wxWidgets ist ein C++ - Framework, bietet aber auch Python-Bindungen über wxPython.

Um mehr Verwenden Sie den folgenden Link, suchen das Buch für wxScreenDC und wählen „Seite 139“ aus der Liste der Seiten, die den Suchkriterien entsprechen zu lesen:

http://books.google.com/books?id=CyMsvtgnq0QC&vq="accessing+the+screen+with+wxScreendc"

+1

Vielen Dank!Hier ist der Code: wxBitmap GetScreenShot() { wxSize screenSize = wxGetDisplaySize(); wxBitmap-Bitmap (screenSize.x, screenSize.y); wxScreenDC dc; wxMemoryDC memDC; memDC.SelectObject (Bitmap); memDC.Bit (0, 0, screenSize.x, screenSize.y, & dc, 0, 0); memDC.SelectObject (wxNullBitmap); Rückgabebitmap; } –

9

Ein Weg geht über dabei würde NSTask in Verbindung mit dem Kommandozeilenbefehl 'screencapture' verwendet werden.

Zum Beispiel:

NSTask *theProcess; 
theProcess = [[NSTask alloc] init]; 

[theProcess setLaunchPath:@"/usr/sbin/screencapture"]; 
// use arguments to set save location 
[theProcess setArguments:@"blahblah"]; 
[theProcess launch]; 

Die Sie die Datei öffnen konnten, wo immer Sie ihm gesagt, es gespeichert, verarbeitet werden, und es dann bei Bedarf löschen. Offensichtlich Notlösung, aber es würde funktionieren.

8

Wenn Sie mit Leopard-Kompatibilität arbeiten, gibt es eine sehr leistungsfähige neue CGWindow-API, mit der Sie Screenshots, Fensteraufnahmen oder Composites aus verschiedenen Fensterschichten aufnehmen können.

http://developer.apple.com/samplecode/SonOfGrab/

+0

Ausgezeichnet, danke, dass Sie darauf hingewiesen haben! –