参照ファイルのアップロードをしたい

フォームの参照ファイルをアップロードする制御のやり方が分かりません。
関数などありませんか? 

こういうの ↓↓

現状、デフォルトで用意されている専用関数は無いようですが、自作関数で対応出来そうです。

Pro版のrec機能を使いアップロード操作を記録すると、
最終的にダイアログウィンドウを制御できる自作関数が設定されます。

コード例

////編集ポイント
PATH = "C:\Program Files\UWSC\Readme.txt"
URL = "http://canal22.org/qanda/sansyou/" 
NAME = "omoro"
////編集ポイントここまで


IE = CreateOLEObj("InternetExplorer.Application")
IE.Visible = True
IE.Navigate(URL)
BusyWait(IE)

Thread PopupWin("アップロードするファイルの選択","開く(&O)",2,PATH)
IESetData(IE,True,NAME) // FILE 
BusyWait(IE)

Procedure PopupWin(title, btn, no=-1, str="")
  id = Getid(title,"#32770",10)
  Sleep(1)
  if no>=0 then Sendstr(id,str,no,True)
  Clkitem(id,btn)
Fend

Procedure BusyWait(ie)
  Sleep(0.5)  // Wait
  Const TIME_OUT = 90
  tm = Gettime()
  repeat
    Sleep(0.2)
    ifb Gettime() - tm > TIME_OUT
      MsgBox("Time Out:BusyWait")
      ExitExit
    endif
  until (! ie.busy) and (ie.readyState=4)
  Sleep(0.5)
Fend

アンサーで確実に出来ると言い切れないのは、自作の関数ではない点と、GETIDで指定するクラス名:#32770に関する情報を持ちあわせていないからです。
念のため3台のパソコンで試した結果、上記コードは正常に動作していました。
それぞれのPCスペックは、WIN7、WIN7、WIN7PROでIEはVER9です。
他のバージョンのブラウザでは試していません。

重要なポイントは、PopupWin関数を設定することと、プラグラム内でThread 生成して実行している点です。

利用にあたっては、ファイルパスなど適宜変更してご利用ください。
NAMEで指定する文字列は、ファイルをアップロードするフォームのnameを指定します。

タグ

2013年3月27日 | コメントは受け付けていません。 |

カテゴリー:Q&A

UWSCスクリプトのセキュリティ対策

UWSCスクリプトに色々情報が書かれているので、
セキュリティに懸念があります。
誰でもパスワードが読み取れたり、
実行できたりするので、何か対策はありますか。
また、指定のフォルダからのみ実行できるようにすることは可能ですか。
UWSCスクリプトは便利ですが、
スクリプト自体を持ち出されたり、読み取られたり、
他の人でも実行できてしまうケースがあります。
いくつか対策を考えてみましたので下に記して見ます。
※パスワード、ファイルの持ち出し、その他の各セキュリティポリシーはご自身で検討お願いします
※UWSCのスクランブルについても絶対に解読されない事を保障するものでもありません

スクランブルをかけて、解読を困難にする

まずはスクランブルを実施することで、
中身の解読を困難にしてしまう方法があります。
パスワードを埋め込んでいたりする場合は、
ファイルの中から該当情報を取得することが難しくなります。
スクランブルのかけ方については、
コチラの記事の「スクランブル」をご参照ください。

実行時にパスワードを要求する

INPUT関数IF文を組み合わせて、
実行時にパスワードを要求するようにすることができます。
この方法とスクランブルの組み合わせで、
セキュリティを向上させることができます

IFB INPUT("パスワードを入力してください","",TRUE) <> "1234" THEN
  MSGBOX("パスワードが異なるため処理を終了します")
  EXITEXIT
ENDIF

PRINT "処理を実行しました!"

上のスクリプトは、
パスワードに「1234」を入力しないと、
次の処理が実行されずに終了してしまいます。
このスクリプトにスクランブルをかけることで、
実行時パスワードの取得も困難になります。

指定のディレクトリからのみ実行可とする

DOSCMD関数で、
スクリプトの実行位置ディレクトリを知ることができます。 これが指定のディレクトリと異なる場合は実行しないよう制御することができます。

CURDIR = TRIM(DOSCMD("CD"))

IFB CURDIR <> "C:\uwsc" THEN
  MSGBOX("指定位置と異なります")
  EXITEXIT
ENDIF

 PRINT "処理を実行しました!"

*

上記のスクリプトでは、Cドライブ直下にuwscというフォルダを作成し、
そこにあるスクリプトのみ実行できる仕組みになっています。
別のマシンでも同一のフォルダ構成を作成された場合は、
実行可能となる点は注意です。

別のファイルを読み込むようにする

CALLで、
他のスクリプトを呼び出す文を挿入しておけば、
単体での実行は出来なくなります。

 CALL "../required.uws"
 PRINT "処理を実行しました"

*

フォルダ構成は上記のようになっており、
一つ上の階層にrequired.uwsをおく必要があります。
required.uws自体は中身は空でも問題ありません。

外部Webサイトの情報を利用する

指定のページにアクセスし、
ページ内の情報が一致する場合に
次の処理に進むようにしてみます。
Webページの情報を書き換えて
スクリプトの実行可否を制御することができます。

IE = CREATEOLEOBJ("InternetExplorer.Application")
IE.visible = FALSE //バックグラウンドでチェックするため、画面表示しなくてもよい
IE.navigate("http://canal22.org/")
REPEAT
 SLEEP(0.1)
UNTIL !IE.busy AND IE.readyState = 4
TITLE = IE.document.title
IE.QUIT
IFB TITLE <> "UWSC コバヤシ式" THEN
  MSGBOX("認証できません。処理を終了します")
  EXITEXIT
ENDIF

上のスクリプトはcanal22.orgへアクセスし、
そのページのタイトルを照合しています。
バックグラウンドでチェックが進めば良いので、
visibleのプロパティはFALSEにしています。

上記全ての方法を組み合わせてみる

さて、何種類か方法を挙げてみましたので、
全てを組み合わせたスクリプトを作ってみます。
処理の順番は・・・
現在位置(ディレクトリ)の確認

外部スクリプトの確認

パスワード入力

外部サイトの確認
となります。
最後に任意でスクランブルをかけ、
解読を困難にすることも可能です。
スクリプトは下記のとおりです。

この投稿の続きを読む »

タグ

2013年3月16日 | コメントは受け付けていません。 |

カテゴリー:Q&A

複数のEXCELファイルを制御したい

ひとつのスクリプトで複数のExcelファイルからデータを取得したいのですが、 うまくいきません。 スクリプトは下記の通りです。
// A1には『りんご』 A2 には『ごりら』

PT1 = "C:\Users\UWSC\Desktop\TEST1.xls"
PT2 = "C:\Users\UWSC\Desktop\TEST2.xls"

Excel = XLOPEN(PT1)
PRINT XLGETDATA( Excel,"A1") //結果:りんご

Excel = XLOPEN(PT2)
PRINT XLGETDATA( Excel,"A2") //結果:ごりら
PRINT XLGETDATA( Excel,"A1") //結果は空になる

対策を教えて下さい。

COMオブジェクトの認識の問題ですね。

エクセルの操作はExcel = XLOPEN(ファイル名)と考えがちですが、
実際は戻値 = XLOPEN(ファイル名)です。
なので、戻値のCOMオブジェクトを適切に設定すれば、解決します。

修正コード

PT1 = "C:\Users\UWSC\Desktop\TEST1.xls"
PT2 = "C:\Users\UWSC\Desktop\TEST2.xls"

Excel = XLOPEN(PT1)
PRINT XLGETDATA( Excel,"A1") //結果:りんご

Excel2 = XLOPEN(PT2)
PRINT XLGETDATA( Excel2,"A2") //結果:ごりら
PRINT XLGETDATA( Excel,"A1")  //結果はりんご

ちなみに、COMオブジェクトをクリアーしないで、質問のコードを連続して走らせると、
『空』→『ごりら』→『空』になります。

タグ

2013年3月6日 | コメントは受け付けていません。 |

カテゴリー:Q&A

数分後に自動でシャットダウンしてくれる簡易なスクリプトを書きたい

数分後に自動でシャットダウンしてくれる簡易なスクリプトを書きたい

30分後にシャットダウンする、1時間後にシャットダウンするというスクリプトをUWSCで作ろうとしています。毎回時間をスクリプトに記入して保存するのが煩雑です。

予定時間、条件を元にPCをシャットダウンしてくれるツール、方法はたくさんあります。
もちろんUWSCにもシャットダウンするためのPOFF(P_POWEROFF)という関数があり利用可能です。

場面としては、長時間のファイルダウンロード、動画変換、その他自動処理中など、長時間PCに張り付いていたくない、だけどもある程度時間がたったらシャットダウンしたいという光景が浮かびます

お悩みの方は毎回、スクリプトに時間を記入しているそうなので、
そこはスクリプトが立ち上がるたびに値入力のウィンドウが出るようにしましょう。
また、単純にSLEEP(指定秒数)とした後にPOFF関数を実行するのも問題ありませんが、 それだと後どのくらい経過すればシャットダウンするかが分からず、少し不親切かもしれません。

SCD = INPUT("何分後にシャットダウンしますか?") * 60
SLEEP(SCD)
POFF(P_POWEROFF)

上のようなスクリプトを少し改善して、
何分後にシャットダウンされるのか可視化してあげましょう。
スクリプトは以下のようになります。

//値を整えて、秒数を取得
MNT = INT( TRIM( INPUT("何分後にシャットダウンしますか?") ) ) 
FOR A = MNT TO 1 STEP -1
 FUKIDASI(MNT + "分後にシャットダウン")
 SLEEP(60)
NEXT
POFF(P_POWEROFF)

タグ

2013年3月1日 | コメントは受け付けていません。 |

カテゴリー:Q&A

このページの先頭へ