Aktuelle Zeit: 30.05.2020 23:24

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]




Ein neues Thema erstellen Auf das Thema antworten  [ 5 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Ergebnis aus AppleScript
BeitragVerfasst: 05.12.2019 12:21 
Offline

Registriert: 29.08.2004 11:05
Wohnort: Berlin
Um AppleScript im Programm auszuführen nutze ich die Procedure

Code:
Procedure.s AppleScript(Script.s)
    Protected retVal.s, strVal, numItems, i
    Protected aScript = CocoaMessage(0, CocoaMessage(0, CocoaMessage(0, 0, "NSAppleScript alloc"), "initWithSource:$", @Script), "autorelease")
    Protected eventDesc = CocoaMessage(0, aScript, "executeAndReturnError:", #nil)
    If eventDesc
      numItems = CocoaMessage(0, eventDesc, "numberOfItems")
      If numItems
        For i = 1 To numItems
          strVal = CocoaMessage(0, CocoaMessage(0, eventDesc, "descriptorAtIndex:", i), "stringValue")
          If strVal
            retVal + PeekS(CocoaMessage(0, strVal, "UTF8String"), -1, #PB_UTF8)
            If i <> numItems : retVal + #LF$ : EndIf
          EndIf
        Next
      Else
        strVal = CocoaMessage(0, eventDesc, "stringValue")
        If strVal : retVal = PeekS(CocoaMessage(0, strVal, "UTF8String"), -1, #PB_UTF8) : EndIf
      EndIf
    EndIf
    ProcedureReturn retVal
  EndProcedure
aus dem englischen Forum.
Funktioniert wunderbar.

Wie bekomme ich jedoch das Ergebnis (Rückmeldung) aus dem AppleScript in eine Variable?

Danke im Voraus.

Ingo


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Ergebnis aus AppleScript
BeitragVerfasst: 05.12.2019 18:55 
Offline

Registriert: 27.11.2016 18:13
Wohnort: Erzgebirge
Hallo IB-Software,

deine Frage ist leicht beantwortet.

So wie bei einer Prozedure mit Rückgabewert üblich.
Bei der Procedure AppleScript wurde hier der Rückgabewert als PureBasic-String-Typ gewählt.

Also z.B. so:

Code:
Procedure.s AppleScript(Script.s)
  Protected retVal.s, strVal, numItems, i
  Protected aScript = CocoaMessage(0, CocoaMessage(0, CocoaMessage(0, 0, "NSAppleScript alloc"), "initWithSource:$", @Script), "autorelease")
  Protected eventDesc = CocoaMessage(0, aScript, "executeAndReturnError:", #nil)
  If eventDesc
    numItems = CocoaMessage(0, eventDesc, "numberOfItems")
    If numItems
      For i = 1 To numItems
        strVal = CocoaMessage(0, CocoaMessage(0, eventDesc, "descriptorAtIndex:", i), "stringValue")
        If strVal
          retVal + PeekS(CocoaMessage(0, strVal, "UTF8String"), -1, #PB_UTF8)
          If i <> numItems : retVal + #LF$ : EndIf
        EndIf
      Next
    Else
      strVal = CocoaMessage(0, eventDesc, "stringValue")
      If strVal : retVal = PeekS(CocoaMessage(0, strVal, "UTF8String"), -1, #PB_UTF8) : EndIf
    EndIf
  EndIf
  ProcedureReturn retVal
EndProcedure

ok.s = AppleScript(~"set lalala to computer name of (system info)")
Debug ok


_________________
Betriebssysteme: MX Linux 19 / Windows 10 / Mac OS 10.15.2 / Android 7.0 ;)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Ergebnis aus AppleScript
BeitragVerfasst: 06.12.2019 00:36 
Offline

Registriert: 29.08.2004 11:05
Wohnort: Berlin
Hallo ccode_new,

erst einmal vielen Dank. Meine Frage war offensichtlich von mir seltsam formuliert, denn natürlich wusste ich wie man den Rückgabewert einer Prozedur einer Variable übergibt. :wink:

Dass bei mir kein Wert zurückgegeben wurde, lag an meinem Script, das mit Start aus der IDE nicht ausgeführt wurde.
Erst innerhalb der als separat ausführbaren kompilierten App funktioniert es.
Das herauszufinden hat ganz schön gedauert und war erst durch Dein einfaches Scriptbeispiel für mich möglich. :allright:

Ingo


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Ergebnis aus AppleScript
BeitragVerfasst: 06.12.2019 22:20 
Offline

Registriert: 27.11.2016 18:13
Wohnort: Erzgebirge
Hallo IB-Software,

du kannst auch AppleScript direkt über PureBasic (auch mit Debugger) ausführen.

Dafür musst du aber PureBasic mehr Rechte geben.

Systemeinstellungen -> Sicherheit -> Datenschutz

Anbei:
Auch bei meinen aktuellen Thema "Bluetooth" muss man sehr stark mit den Sicherheitsframework eines MACs kämpfen.
(Da ist Linux (je nach Distribution) in den Standardeinstellungen teilweise ganz friedlich)

Beim Thema-Bluetooth (Mac):
->Achtung: Firewall per Standard ein und alle eingehenden Dateien werden blockiert.
->Achtung: Die zu verbindenden Bluetoothgeräte müssen sich erst einmal immer gegenseitig authentifizieren. (PIN)
(EIne permanente TRUSTED - Einstellung (wie unter LInux) ist mir noch nicht bekannt.
->Eine Bluetooth-Dateifreigabe muss erteilt sein. (Standardmäßig ist dies nicht der Fall.)
(für OBEX)
->etc.

_________________
Betriebssysteme: MX Linux 19 / Windows 10 / Mac OS 10.15.2 / Android 7.0 ;)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Ergebnis aus AppleScript
BeitragVerfasst: 07.12.2019 16:54 
Offline

Registriert: 29.08.2004 11:05
Wohnort: Berlin
Zitat:
du kannst auch AppleScript direkt über PureBasic (auch mit Debugger) ausführen.
Dafür musst du aber PureBasic mehr Rechte geben.
Systemeinstellungen -> Sicherheit -> Datenschutz

Danke für den Hinweis, hatte ich schon getan.
Das Problem bei mir ist, dass ich die Bibliothek "System Events" nutze und dafür will Catalina eine extra Zustimmung.
Starte ich mein Programm als *.app kommt diese einmalige Nachfrage und alles ist ok. Beim Start aus der IDE heraus leider nicht und daher wird das Script nicht ausgeführt.

Ingo


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 5 Beiträge ] 

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.

Suche nach:
Gehe zu:  

 


Powered by phpBB © 2008 phpBB Group | Deutsche Übersetzung durch phpBB.de
subSilver+ theme by Canver Software, sponsor Sanal Modifiye