2011-05-26 124 views
0

我編寫了我的applescript應用程序來隱藏我的無線網卡的窗口。 我遇到了一些問題,如果檢查窗口是可見或不可見(避免命令+ H按鍵沒有影響),所以我決定用delay 15使(不是全部)確認窗口彈出。如果我從編輯器運行腳本或雙擊應用程序文件,它可以工作,但如果我將它設置爲從用戶登錄開始(在設置>帳戶>登錄元素下),它不起作用! 我試圖改變複選框中Save as...頁的AppleScript編輯:我嘗試都設置爲only execute,但任何變化。 與start screen選項實際上它的工作原理,但它問我一個確認,我不希望它(我會優先按cmd + h代替)。 任何人都可以解釋爲什麼我有這個問題?Applescript在OSX啓動時無法運行

tell application "System Events" 
set progList to (name of every process) 
set cond to false 
repeat while cond is false 
    if (progList contains "WirelessUtilityCardbusPCI") is true then 
     delay 5 
     activate application "WirelessUtilityCardbusPCI.app" 
     tell application "System Events" to keystroke "h" using [command down] 
     set cond to true 
    else 
     delay 5 
     set progList to (name of every process) 
    end if 
end repeat 
end tell 

編輯:現在它似乎工作!我忘了重新編號set progList to (name of every process)。現在代碼是正確的。

+0

需要看到的代碼。 – regulus6633 2011-05-26 16:26:19

+0

對不起,但我不認爲代碼可以改變一些東西。 – Paciotti 2011-05-27 09:09:01

回答

2

我看到你的代碼正在工作。那很棒。不過,我發佈這個來幫助你學習。我發現你的代碼有一些小問題。例如在你的重複循環中,你告訴系統事件按鍵「h」。沒有必要告訴系統事件在那條線上做,因爲你已經在系統事件中告訴代碼塊,所以系統事件已經知道要這樣做。

這是我會怎麼寫你的代碼。這不需要擊鍵,這總是一件好事,而且效率更高一些。它的工作原理是,如果進程不存在,則將「設置進程」設置爲行錯誤,然後代碼進入「錯誤」部分以延遲5,然後重複循環嘗試再次找到進程。如果找到該進程,則它設置其隱藏它的可見屬性。

它也有一個超時機制來防止腳本運行下去。如果你喜歡,請使用這個。祝你好運。

set processName to "WirelessUtilityCardbusPCI" 
set maxTime to 180 -- we only check for 3 minutes, then end 

set inTime to current date 
repeat 
    try 
     tell application "System Events" 
      set theProcess to first process whose name is processName 
      set visible of theProcess to false 
     end tell 
     exit repeat 
    on error 
     if (current date) - inTime is greater than maxTime then 
      tell me 
       activate 
       display dialog "The process " & processName & " could not be found!" buttons {"OK"} default button 1 with icon 0 
      end tell 
      exit repeat 
     end if 
     delay 5 
    end try 
end repeat 

編輯:我已經檢查使用TextEdit應用程序上面的代碼,它工作正常。要檢查它與您的應用程序運行以下。確保運行此代碼時應用程序正在運行。如果有錯誤,將顯示它。如果沒有錯誤,將顯示2個對話框顯示進度。報告你發現的內容。

set processName to "WirelessUtilityCardbusPCI" 

try 
    tell application "System Events" 
     set theProcess to first process whose name is processName 
     display dialog "I have found the process" 
     set visible of theProcess to false 
     display dialog "I just performed the \"set visible\" code" 
    end tell 
on error theError number errorNumber 
    tell me 
     activate 
     display dialog "There was an error: " & (errorNumber as text) & return & return & theError buttons {"OK"} default button 1 with icon stop 
     return 
    end tell 
end try 
+0

到底什麼是「第一」呢?你的代碼是非常有趣的,但它不起作用:它沒有錯誤對話框終止,也沒有隱藏應用程序。我認爲這個過程對於「設置可見」有一些問題,但是這次它不會給我任何錯誤(不像我以前的嘗試)! – Paciotti 2011-05-31 18:45:48

+0

我在上面的編輯部分添加了一些代碼,以幫助您找到問題。嘗試一下並回報。 – regulus6633 2011-05-31 19:56:13

+0

我不知道爲什麼,但「設置可見」不適用於我的應用程序!第二個對話框出現,但應用程序仍然可見。 我還有另外一個問題:如果我查找過程,有時我的應用程序在窗口未繪製時運行。通過這種方式,cmd + h按鍵在沒有任何操作的情況下執行,並且腳本終止無效。 – Paciotti 2011-05-31 21:17:23

0

我已經使用登錄項目在成功登錄時啓動AppleScript小程序,所以我的第一個建議是確保它的不是正在運行。讓它顯示一個自定義對話框或嘟嘟聲或類似的東西來確認它是否正在運行。

除此之外,我不知道要提供什麼建議,除非你想發佈你的腳本執行代碼。