1

私は登録ユーザーとしてStackoverflowを初めて使用しますが、Cocoaの始まりを学ぶのに大いに役立ちました。しかし、既存のトピックや質問では解決できない問題が1つあるので、ここで自分で質問することにしました。

NSTaskでscreencaptureを使用しようとしていますが、次のコードがアプリで機能します。

NSArray *args = [NSArray arrayWithObjects: @"-c", nil];
[[NSTask launchedTaskWithLaunchPath: @"/usr/sbin/screencapture" arguments: args] waitUntilExit];

スクリーンショットをクリップボードに保存しますが、screencaptureに渡す他のすべての引数は機能しません。同じコードがターミナルでも機能します。

たとえばscreencapture -M mailme.jpg、ターミナルにアクセスすると、新しいメールメッセージが開きます(ルートフォルダまたはデスクトップに保存する場合と同じです)。私のアプリでは、それは機能しません。

次のコード:

NSArray *args = [NSArray arrayWithObjects: @"**-M mailme.jpg**", nil];
[[NSTask launchedTaskWithLaunchPath: @"/usr/sbin/screencapture" arguments: args] waitUntilExit];

結果は次のようになります。

screencapture: illegal option --  
usage: screencapture [-icMPmwsWxSCUtoa] [files]
  -c         force screen capture to go to the clipboard
  -C         capture the cursor as well as the screen. only in non-interactive modes
  -d         display errors to the user graphically
  -i         capture screen interactively, by selection or window
               control key - causes screen shot to go to clipboard
               space key   - toggle between mouse selection and
                             window selection modes
               escape key  - cancels interactive screen shot
  -m         only capture the main monitor, undefined if -i is set
  -M         screen capture output will go to a new Mail message
  -o         in window capture mode, do not capture the shadow of the window
  -P         screen capture output will open in Preview
  -s         only allow mouse selection mode
  -S         in window capture mode, capture the screen not the window
  -t<format> image format to create, default is png (other options include pdf, jpg, tiff and other formats)
  -T<seconds> Take the picture after a delay of <seconds>, default is 5
  -w         only allow window selection mode
  -W         start interaction in window selection mode
  -x         do not play sounds
  -a         do not include windows attached to selected windows
  -r         do not add dpi meta data to image
  -l<windowid> capture this windowsid
  -R<x,y,w,h> capture screen rect
  files   where to save the screen capture, 1 file per screen

引数として使用するtest.pngと、ターミナルと同じ出力が表示されます。

libpng warning: zero length keyword
libpng warning: Empty language field in iTXt chunk

、ただしファイルは保存されません。

これは、権限に問題があることを意味しますか?出力をアプリに保存する必要がありますか?お気に入り:

if ([task terminationStatus] == 0)
 {

 }

私はさまざまなことを試しましたが、この問題が私には見られない非常に単純な解決策を持っていることを願っています。

あなたの時間と助けを事前に感謝します。

フラン

4

1 に答える 1

2

問題は、単一の引数「-Mmailme.jpg」にあると思います。

これを2つの引数に分割すると、機能するはずです。

NSArray *args = [NSArray arrayWithObjects: @"-M", @"mailme.jpg", nil];
于 2012-12-04T13:11:13.190 に答える