Social Icons

пятница, 5 июля 2013 г.

Как программно завершить работу, сделать перезагрузку, перевести компьютер в ждущий режим или выйти из системы в OS X?

Одним из простых путей является использование объекта Cocoa NSAppleScript для запуска следующего скрипта:
tell application "Finder" to shut down
И, конечно, ‘to shut down’ может быть заменено на ‘to restart’, ‘to sleep’ или ‘to log out’.

В последних версиях Delphi NSAppleScript (или если быть более точным - его интерфейс) объявлен в модуле Macapi.Foundation. Увы, объявлен он не совсем точно (см. здесь), поэтому его необходимо немного подправить следующим образом:
uses
  Macapi.ObjectiveC, Macapi.CocoaTypes, Macapi.Foundation;
 
type
  NSAppleScript = interface(NSObject)
    ['{0AB1D902-25CE-4F0B-A3BE-C4ABEDEB88BC}']
    function compileAndReturnError(errorInfo: Pointer): Boolean; cdecl;
    function executeAndReturnError(errorInfo: Pointer): Pointer; cdecl;
    function executeAppleEvent(event: NSAppleEventDescriptor; error: Pointer): Pointer; cdecl;
    function initWithContentsOfURL(url: NSURL; error: Pointer): Pointer; cdecl;
    function initWithSource(source: NSString): Pointer; cdecl;
    function isCompiled: Boolean; cdecl;
    function source: NSString; cdecl;
  end;

  TNSAppleScript = class(TOCGenericImport<NSAppleScriptClass, NSAppleScript>)  

end;
 
procedure TForm1.Button1Click(Sender: TObject);
var
  Script: NSAppleScript;
  Error: Pointer;
begin
  Error := nil;
  Script := TNSAppleScript.Wrap(TNSAppleScript.Alloc.initWithSource(
    NSSTR('tell application "Finder" to shut down')));
  try
    if Script.executeAndReturnError(Error) = nil then
      raise EOSError.Create('AppleScript macro failed');
  finally
    Script.release;
  end;
end;
И все работает прекрасно.

Источник: http://delphihaven.wordpress.com/2013/07/04/programmatically-shutting-down-restarting-sleeping-or-logging-off-on-os-x/

Комментариев нет:

Отправить комментарий

Поделитесь с друзьями!

 

Подписчики

Статистика