2012年1月16日月曜日

Softimage Script : Python でショートカット入力

SI の TextureEditer は SDK で用意されてないらしく
スクリプト上からの操作は、むりなようです
※(扱えると言う情報がありましたら下さい〜)

しかし TextureEditer でショートカットキーが
設定してあるものについては
ショートカットをScriptで入力してやればよいと思われます

Pythonを利用し、キー入力の送り方を調査します


Pythonでのキーの送信

#Python
import win32com.client
shell = win32com.client.Dispatch("WScript.shell")
shell.SendKeys("{F6}",0)


この状態でキー入力を行う事が出来ました

参考サイト

しかし、製作中のツールでは反応しませんでした。なんでじゃろ?


修正

myaraさんの指摘で以下を修正しました

Despatch > Dispatch //スペルミス
"F6" > "{F6}" //{}が抜けてました!(なぜか不要と決め付けてました orz)

以上を修正したら、TextureEditerで更新ができるようになりました!!!
バグだしは終わってないですけどスクリプトが動いたー


安定動作したら公開しま~す
そのほか、スクリプトの中でスクリプトを呼び出してますね、
ふむり~、参考になります

myara さん、ありがとうございましたーーー。


備考
myaraさんが、キーをスクリプトで送る件に関して記事を書かれたようですよ!
参考になることばかりです

キーをスクリプトで打つ

しかし、こういうときこそトラックバックとか使うんじゃなかったっけ?
使い方がわからん orz

5 件のコメント:

  1. 初めまして、myaraと申します。

    Pythonのコードにスペルミスがあります。Despatchではなく、Dispatchです。

    あとは、テクスチャエディターを開きたいだけのなら、OpenViewで出来ますよ。

    #Python
    Application.OpenView ("Texture Editor")

    返信削除
  2. 初めまして〜 カキコアリガトウございます。
    そしてスペルミスのご指摘ありがとうございます〜 orz
    早急に修正しておきます

    TextureEditerの操作ですが、開くだけではなく、
    パネル内の、メニュー、ボタン操作を、
    スクリプトで行うのが目的です。

    例えば、画像のリフレッシュは、
    ボタンを押すか "F6" ショートカットを行うのですが、
    このリフレッシュをスクリプトで操作が出来ません。

    従って、"F6" キーを押す という行為をPythonで組み込もうとおもいました。
    現在は、"F6" は反応するのですが、なぜかレイヤーパネルが出てきてますw

    プラグインが TextureEditer の Tools の最下部にメニューが来るため、
    実行時、マウスの位置が TextureEditer パネルから、
    はみ出してしまってるという可能性がありますw
    なかなか難しいですね〜。

    またなにか、お気づきの所がありましたら。
    よろしくお願いします〜

    返信削除
  3. このコメントは投稿者によって削除されました。

    返信削除
  4. やってみて、一応出来たんだけど、あんまり格好良くないです。

    //JScript

    var WshShell = new ActiveXObject("WScript.shell")

    //Texture Editorが開いていたら閉じます
    //開いたままじゃあ、上手く行かないんですね・・・なぜか。
    var views = Application.Desktop.ActiveLayout.Views
    for (var i=0; i< views.count; i++){
    if (views(i).name == "Texture Editor"){
    views(i).state = siClosed;
    }
    }

    //Texture Editorを開く
    OpenView ("Texture Editor")

    //Texture Editor が出てくるまで時間がかかるので
    //予めに用意した「mSleep.vbs」を利用してちょいスリープ。
    WshShell.run("I:\\Scripting\\mSleep.vbs 0.1", 2, 1)

    //キーを打つ
    // "^a" = CTRL + A
    WshShell.SendKeys ("^a")

    //------------

    以下のサイトを参考にすると良い。
    http://www.devguru.com/technologies/wsh/quickref/wshshell_SendKeys.html

    因みにPythonのSleepは上手く行かないけど、Pythonは詳しくないので自分のミスだったかもしれません。

    返信削除
  5. 上記のサイトを見ていただくと分かると思いますが、良い忘れてたことがあります。"F6"キーは{F6}で書かないと、F + 6 と認識されます。だからレイヤーパネル(6)が出てしまいます。

    返信削除