2016-05-13 6 views
0

Ich stieß auf ein Problem, wenn ich dieses AppleScript ausführen. Der Zweck dieses AppleScript ist, wenn Sie auf eine Datei einzeln klicken und dieses Skript ausführen, wird diese Datei automatisch auf ein Gerät auf dem Bluetooth namens "David" übertragen. Aber ich stieß auf ein Problem in der Linie der Underdashed. Das Ergebnis zeigt:Bluetooth AppleScript Auto Dateiübertragung

"Fehler" Systemereignisse erhalten einen Fehler: Scrollbereich \ "Bluetooth Devices \" des Fensters 1 des Prozesses \ "Bluetooth File Exchange \" kann nicht abgerufen werden. "Nummer -1728 vom Bildlaufbereich" Bluetooth-Geräte "von Fenster 1 des Prozesses" Bluetooth File Exchange ""

und ich weiß nicht warum. Ich bin komplett ein Noob zu AppleScript, das ist ein Skript von jemand anderem geschrieben, und ich habe nur geändert und fügen Sie ein wenig dazu. Kann mir bitte jemand helfen?

property device : "david" 
tell application "Finder" to set fileAlias to selection as alias 
set fileToSend to fileAlias 
tell application "Finder" to open fileToSend using application file id "com.apple.BluetoothFileExchange" 
activate application "Bluetooth File Exchange" 
tell application "System Events" 
    tell process "Bluetooth File Exchange" 
    repeat until exists window 1 
    end repeat 
    select (1st row of table of scroll area "Bluetooth Devices" of window 1 whose value of text field 1 is device) 
    click button "Send" of window 1 
    end tell 
end tell 

Das Problem ist jetzt gelöst, dank "pbell" im Code den Tippfehler Hinweis.

Der folgende Code ist eine modifizierte Version, die für Bluetooth 4.4.4

property device : "vivo X5Pro D" 
tell application "Finder" to set fileAlias to selection as alias 
set fileToSend to fileAlias 
tell application "Finder" to open fileToSend using application file id "com.apple.BluetoothFileExchange" 
activate application "Bluetooth File Exchange" 
tell application "System Events" 
    tell process "Bluetooth File Exchange" 
     repeat until exists window 1 
     end repeat 
     select ((row 1 of table 1 of scroll area 1 of window 1) whose value of UI element 2 of UI element 1 is device) 
     click button "Send" of window 1 
    end tell 
end tell 

Die Probleme dieses Codes
1) arbeitet zu langsam läuft es.
2) Der Code beinhaltet GUI, so dass ein Systemupdate mit geänderter Position mehrerer Bereiche diesen Code in Mist verwandelt. (Danke an pbell)

Gibt es also eine alternative Möglichkeit, die GUI und Befehle direkt zu umgehen? Ich denke, das wird die Laufzeit verringern. :)

+0

können einen Blick von meinem Skript –

Antwort

0

Sie haben wahrscheinlich 2 Ausgaben in Ihrem aktuellen Skript:

1) ein Wert "1" in der Zeile .... Zeile der Tabelle von Scroll-Bereich "Bluetooth-Geräte" ... fehlt

Sie haben es wahrscheinlich versehentlich gelöscht. Es sollte sein: .... Zeile der Tabelle 1 des Bildlaufbereichs "Bluetooth Devices" ....

2) Dieses Skript verwendet GUI-Skripting. Es simuliert die Benutzeraktionen mit der Maus. Diese Aktionen sind in der Tat streng abhängig von der Anwendungsoberfläche (dem Design des Fensters, den Schaltflächen, ...). All diese Elemente werden als UI-Elemente bezeichnet (UI = User Interface). Wenn Sie Ihre Anwendung aktualisieren und die Anzeigen der neuen Version nicht identisch sind, funktioniert sie nicht mehr.

Bluetooth-Anwendung wird mit OS-Updates aktualisiert. Ich weiß nicht, welche Systemversion Sie haben, aber auf El Capitain sind die im Bluetooth-Austausch verwendeten UI-Elemente nicht die in Ihrem Skript verwendeten.

Um beispielsweise den Gerätenamen in der Liste zu kennen, handelt es sich um den statischen Text 1 des Oberflächenelements 1 der Zeile. In Ihrem aktuellen Skript suchen Sie nach dem Textfeld 1 der Zeile. Da der Gerätename keine Eigenschaft der Zeile mehr ist (dies ist keine Eigenschaft des UI-Elements 1 der Zeile), funktioniert Ihre Syntax nicht mehr.

Welche Bluetooth-Exchange-Version verwenden Sie? (Mine ist 4.4.4)

+0

Vielen Dank für die gemeinsame Nutzung der Einsicht ein wenig Zeit in Anspruch nehmen jemand verbringen! In der Tat wird # 2, die Sie erwähnt haben, bei jeder Aktualisierung des Systems viel Ärger verursachen.Also, gibt es auf jeden Fall die Möglichkeit, die GUI zu verwenden und einen Befehl direkt zu verwenden, um das Ziel unabhängig von der Systemaktualisierung zu erreichen? By the way ist der Code jetzt behoben und ich kann es jetzt auf Bluetooth Austausch verwenden 4.4.4 –

+0

Ich weiß nicht, wie man sie auf Kommentare posten, also poste ich sie unter meiner ursprünglichen Frage unter geänderter Version :) –

+0

Ja Es gibt eine Möglichkeit, GUI-Scripting für Bluetooth zu vermeiden, aber ich habe es nie getestet. Hier ist Vorschlag mit nur 2 Zeilen des Skripts: Zeile 1: "set myFile, um Datei zu wählen" und Zeile 2 "Tell-Anwendung" Bluetooth File Exchange ", Datei POSIX-Pfad von myFile als Zeichenfolge an Gerät" xxxxx "senden. Es scheint, dass xxxxx muss die Bluetooth-Adresse Ihres Geräts sein (etwa 6 Hex-Paare, die Sie sehen können, indem Sie im Bluetooth-Einstellungsfeld rechts auf Ihr Gerät klicken. Ich kann nicht testen, da ich kein Bluetooth-Gerät habe, das eine Datei empfangen kann! – pbell