[ 掲示板に戻る ]

過去ログ閲覧モード

1分以内のインターバル実行について / horowasan
こんばんは,お騒がせしております。よろしくお願いします。
UWSCのスケジューラーでインターバル実行するとき,最短の時間は1分であるようですが,それ以上短い間隔での定時実行は出来ないものでしょうか?
SLEEP(20) などとして,20秒インターバルを置く事は可能でしょうが,こうすると,実際の実行に要した時間もプラスされて,実際には,20秒以上の間隔をおいての実行になってしまうものと思われます。
EXCELでは,OnTimeなどといったメソッドがありますが,同様のものは無いのでしょうか?また,同様の結果を得る方法は無いものでしょうか?ご回答よろしく願いします。

No.837 2015/02/11(Wed) 21:51:55

Re: 1分以内のインターバル実行について / koi
案として
1.GetTime関数を使って時間をチェックして処理を実行する
2.実行したい処理はスレッドで行い時間監視はメインで行う

深く考えてはいないので行いたい処理というのが20秒以内に終わるというのが前提
試したわけではないので処理内容によってはうまくいかない可能性もあるかも

No.838 2015/02/11(Wed) 23:06:14

Re: 1分以内のインターバル実行について / horowasan
koiさん,ありがとうございました。
THREAD の存在を初めて知りました。並行処理が出来るのですね。なるほど,
これなら,メインで時間監視を行い,プロシージャに処理したい内容を記述しておき,THREADで呼び出すわけですね,まだ試してみませんが,仕組みは理解できました,挑戦してみます。ありがとうございました。

No.843 2015/02/12(Thu) 22:58:06
createformをIEのように使うには? / ある
お世話rになります。Proユーザーです。
createformで作ったフォームから値を取得したり、操作をしたいです。

//-------------------------------------
fff=createform(path,"title",true)
while fff.visible
sleep(1)
wend
//-------------------------------------

ここまでは以前に教えて頂き、またsetformdata、getformdataを使って値を入れ替えたりもできるけれど、ボタンをクリックしたり、ボタンの値(value)を書き換えたりが出来ません。
COM操作で、フォームをIEのように使えばできると見かけた事があるのですが、具体的なやり方がわかりません。ヒントを頂けないでしょうか。
また「何を調べたらそれがわかるか?」などの調べ方も教えて頂けると嬉しいです。

※createoleobjから生成したIEであればボタンクリックやページ移動などはできます。createformから生成した場合にsetformdata、getformdata以外で操作する方法がわからないです。

No.820 2015/02/10(Tue) 00:32:57

Re: createformをIEのように使うには? / ある
補足です。わかりにくかったので。
現状、↑のようにしてからIEのように

print fff.document.forms.length

を入れても空白になりますが、このように書いてフォームの数を取得できるようになれば解決、という状況です。

No.821 2015/02/10(Tue) 00:38:40

Re: createformをIEのように使うには? / ある
連投失礼します。

print fff.document.forms.length

これで数値の取得は出来ているのを見落としていました。submit後に出力されるのですね。
なので、「IEのように扱う」事は出来るようになったのですが、新たな問題が発生しました。
「submit後に操作」だと、フォームが生成されている間にボタンクリックなどの操作が出来ません。
(自動化出来るのはフォームが消えてしまってから)
フォームが見えている段階で

fff.document.forms[0].elements[1].click()

のような形で操作する方法はないでしょうか?

No.822 2015/02/10(Tue) 01:14:27

Re: createformをIEのように使うには? / ある
本当に何度もすいません。
printする位置の問題だったようで、解決しました。
while〜wendの上に書けば良かったのですね。連投、失礼しました。

No.823 2015/02/10(Tue) 01:22:26

Re: createformをIEのように使うには? / stuncloud
今回の件とは直接関係ないかもしれませんが、もしフォーム上でのユーザーによる操作を起点にUWSCで処理を行いたい、ということがあるのでしたらoleeventが使えますよ
以下の例ではフォーム上のボタンがクリックされたときにmsgbox()します

// <button id="test">msgbox</button>
// というボタンがフォーム上にあったとして
fff=createform(path,"title",true)
testButton = fff.document.getElementById("test")
oleevent(testButton, "HTMLButtonElementEvents2", "onclick", "testproc")
while fff.visible
 sleep(1)
wend

procedure testproc()
 msgbox("ボタンが押されました")
fend

No.829 2015/02/10(Tue) 15:52:22

Re: createformをIEのように使うには? / ある
>>stuncloudさん

ありがとうございます。とても参考になります。
この処理はまさしく一番やりたかった事です。
javascriptでローカルファイルへの書き込みや、クリップボードの使用がかなり面倒くさそうだったので、uwscのファイル操作が出来ると助かるなと思っていて、先ほど試したらテストボタンからのファイル書き込みが出来ました。

とても興味深いのですが、この中の"HTMLButtonElementEvents2"とか、"onclick"などの情報はどこを探したら見つかるのでしょう?「ole_イベント」、「oleevent」などで検索をしてみても、だいたい出てくるのはuwscの断片的な使用例で、他の種類が見当たりませんでした。(例えばonclickはjavascriptとは違うものですよね?)

クリック以外にもやれることが把握出来ると色々と広がっていきそうで、とても期待してしまいます。良かったらご教授下さい。

No.831 2015/02/10(Tue) 21:36:59

Re: createformをIEのように使うには? / stuncloud
> "HTMLButtonElementEvents2"とか
僕はいつもここを見ています
https://msdn.microsoft.com/en-us/library/hh801967(v=vs.85).aspx
残念ながら日本語ページはありません
(あと(のせいでちゃんとリンクにならないのでアドレスバーにコピペで開いて下さい)

***Eventsが「インタフェース名」、それらの個別ページにあるon***が「イベント名」ですね
2とか3とか4とかありますが、数値が大きいほうが機能が拡張されてるみたいです

No.835 2015/02/11(Wed) 01:27:07

Re: createformをIEのように使うには? / ある
なるほど、やっぱり英語サイトになりますよね。参考になります。
正直、読んでわかる部分はほとんどないですが、少しずつ訳しながら試していこうと思います。
ご意見頂き、発想の幅が広がりました。ありがとうございます。

No.839 2015/02/12(Thu) 02:41:17
特定の文字列以外を置き換えたい / 台湾から書き込み
お世話になっております。Proユーザーです。
特定文字列以外を

特定文字 ABC...XYZ123456789 (大文字小文字区別せず)

bunshou ="A87687%SASA#"
これを特定文字以外の文字列をスペースに置き換えbunshou2へ

bunshou2が"A87687 SASA "となるようにし、
また同時に特定文字以外の文字列があったかどうかも
調べたいのですがどのようにすればいいでしょうか?

No.811 2015/02/08(Sun) 17:07:02

Re: 特定の文字列以外を置き換えたい / ミリアム
自分だったらこんな感じにします。…絶対もっといい方法があるはず!

--------------------------------------

DIM bunshou ="A87687%SASA#"
DIM bunshou2 = ""
DIM Error = ""

For m In bunshou
 If Val(m) <> ERR_VALUE or (65 <= Asc(m) and Asc(m) <= 90)
  bunshou2 = bunshou2 + m
 Else
  Error = Error + m
  bunshou2 = bunshou2 + " "
 EndIf
Next

MsgBox(bunshou2)
If Length(Error) > 0 Then MsgBox("特定文字以外の文字列<#CR>" + Error)

No.812 2015/02/08(Sun) 19:13:21

Re: 特定の文字列以外を置き換えたい / routa
正規表現 VBScript.RegExpを利用しましょう。
reg = CREATEOLEOBJ("VBScript.RegExp")
reg.global = true
reg.ignoreCase = true
bunshou ="A87687%SAsA#"
reg.pattern="[^a-z0-9]"
bunshou2 = reg.replace(bunshou, " ")

No.813 2015/02/08(Sun) 21:44:02

Re: 特定の文字列以外を置き換えたい / しゅん
ちなみに、あったかどうかも調べるのは、routaさんの回答に続いて、

reg.Test(bunshou)

とすれば、TRUE/FALSEが返ってきます。

No.818 2015/02/09(Mon) 21:59:27

Re: 特定の文字列以外を置き換えたい / 台湾から書き込み
みなさん回答ありがとうございます。
1週間悩んでいた問題が解決できました。
数年も使っているのにまだまだ奥が深いですね。。
みなさんのように使いこなせるように頑張りたいと思います。
今後とも宜しくお願いいたします。

No.825 2015/02/10(Tue) 04:22:18
DLLでポインタ戻しがしたいのですが… / もて
お世話になります。
DEF_DLLで SystemParametersInfoA を呼んで 現在のホイールの移動量を取得したくて手こずっています。

SPI_GETWHEELSCROLLLINES は UINT型(unsigned int型?) のポインタで返るとあったので、
配列にしてみたりしましたがよくわかりません。


DEF_DLL SystemParametersInfoA(Long, Long, String, Long) :Long :User32

Const SPI_SETWHEELSCROLLLINES = 105 //0x0069
Const SPI_GETWHEELSCROLLLINES = 104 //0x0068

DIM num[] = 0,1

SystemParametersInfoA(SPI_GETWHEELSCROLLLINES, num[1] , 0, 0)
MsgBox(num[1])

// num[]を渡すと次元数が違うと怒られ、num[1]を渡したら初期値が返るようです
// 最終的にしたいことは、現在のホイール行数を見て、 3 と -1 でトグル挙動させたいのですが、
// 更新できても取得で難儀してます。



ところで、10進と16進を間違って、
SPI_SETKEYBOARDPREF(0x0045) に 4 を設定してしまったようなのですが、問題ないでしょうか?
ユーザー補助の「アプリケーションにキーボードのヘルプを追加する」を真にする設定らしいのですが、
windows8.1にはそれらしき設定が見当たらなくて…

よろしくお願いします。

No.814 2015/02/09(Mon) 00:51:12

Re: DLLでポインタ戻しがしたいのですが… / Liners
// ポインタが返るのだからvar指定でしょう。それと値の指定位置が変ですよ。

DEF_DLL SystemParametersInfoA(Long, Long, var Long, Long):Long:User32

Const SPI_SETWHEELSCROLLLINES = 105 //0x0069
Const SPI_GETWHEELSCROLLLINES = 104 //0x0068
dim num

SystemParametersInfoA(SPI_GETWHEELSCROLLLINES, 0, num, 0)
MsgBox(num)

num = 3

SystemParametersInfoA(SPI_SETWHEELSCROLLLINES, num, null, 0)
MsgBox(num)

No.816 2015/02/09(Mon) 02:11:04

Re: DLLでポインタ戻しがしたいのですが… / もて
Liners さま
DLLやポインタ関係のところはどうにも理解が追い付かず
資料を探す時点で苦労しており助かりました。
ありがとうございました。

No.819 2015/02/10(Tue) 00:31:55
ディスプレイのサイズを知りたい! / Nagatani
いつもお世話になります!
パソコンが複数台ありディスプレイサイズがことなっています。
今迄は、ドロップダウン等の対応のため別々のスクリプトを書くか
ユーザー名で判断してました。
MONITOR(0,MON_WIDTH)で解像度は取れるのですがディスプレイの
サイズを判断できる同じ様なコマンドは無いでしょうか?
アドバイスよろしくお願いいたします。

No.784 2015/02/04(Wed) 18:12:25

Re: ディスプレイのサイズを知りたい! / しろまさ
ヘルプ uwsc.chm 参照。
スクリプト ⇒ スクリプト関数 ⇒ 特殊変数

No.793 2015/02/06(Fri) 13:19:36

Re: ディスプレイのサイズを知りたい! / Nagatani
ありがとうございます!
確認させていただきます!

No.797 2015/02/06(Fri) 16:58:40

Re: ディスプレイのサイズを知りたい! / Nagatani
お疲れ様です。ドロップダウンするのにパソコンの画面サイズの差と思って、
サイズを調べていましたが、同じパソコンで解像度等も同じなのに動作しない
ことにやっと気がつきました。CLKITEMで対処出来ないため
下記のような場合どの様に対処したら良いでしょうか?

ACW(GETID("xxxxxxxx","Xxxxxxxxxx"),0,0,800,580,0)
BTN(LEFT,CLICK,785,119,300)
SLEEP(0.5)
上記クリックが空振りします。
アドバイスよろしくお願い致します。


No.798 2015/02/06(Fri) 19:41:33

Re: ディスプレイのサイズを知りたい! / Liners
アプリによっては、マウスの動きを監視する事があり、速過ぎて捉えられないかも知れません。
そんな時は、動作を分解して時間を作ることで改善できる可能性があります。

mmv(785,119)
sleep(0.5)
BTN(LEFT,CLICK)

No.801 2015/02/07(Sat) 10:35:30

Re: ディスプレイのサイズを知りたい! / koi
状況がよくわからないので想像なんですが
ひょっとしてDPI設定が異なっているPCが混在しているという事なのでしょうか?
(↑であれば解像度が同じであっても表示座標位置が設定によって変化します)

そうでないのであれば元質問が何言ってるのかはっきり言ってよくわからないです
(初めは接続モニタのインチサイズを知りたいって質問かと思ったー>多分そんなことはできない)

DPI設定だとしてですが
標準関数などでは取得方法はないと思うので私には
レジストリ読んだうえで自分で座標変換するぐらいしか方法が思いつきません

実際の状況が分からないし無理に想像で話を進めてもわけわからなくなると思うので
もう少し環境を明確にしてはどうでしょうか?

No.802 2015/02/07(Sat) 13:15:13

Re: ディスプレイのサイズを知りたい! / Nagatani
ありがとうございます!
月曜日に確認して再度ご連絡を致します!

No.804 2015/02/07(Sat) 18:36:06

Re: ディスプレイのサイズを知りたい! / Nagatani
ありがとうございました。Linersさんの方法で回避できそうです。
今まで、A4サイズのパソコンとB5サイズのパソコンで5mm四方ぐらいのボタンを押すのに
同じスクリプトで使えなかったため、てっきり画面サイズが違うのが原因と思ってユーザー名を
読み分けスクリプトを分けていました。うまく説明できませんがLinersさんに教えていただいた
方法でも最初うまく動作しませんでしたが下記のように変えたところ動作いたしました。

MMV(785,120)
SLEEP(1)
BTN(LEFT,CLICK,785,120,400)

ありがとうございました。

No.817 2015/02/09(Mon) 21:03:13
saveimgでアクリル板画像も保存したい / kb
こんばんは
「アクリル板(acryl Borard)」という動作中のソフトの上から絵を書けるフリーソフトを使っています
アクリル板を使った画面全体保存を手動でキーボードからプリントスクリーンを使うとアクリル板で描いたものを含めて全画面保存出来ました
しかしながら、UWSCのsaveimgで以下のように保存すると、画面は保存出来るのですが、アクリル板のツールバーや描いたものが何故か写りません。
どのようにすれば良いかお願いします。
path = "C:\aaa.jpg"
saveimg(path, 0)  //←ダメでした
saveimg(path, 0,,,,,, 100) //←ダメでした

当方、OS:XP UWSCPRO:5.1

No.815 2015/02/09(Mon) 00:58:04
テキストボックスの入力可能かの確認 / o.t
いつもお世話になっております。
先日、UMSC Proを購入しました初心者ですが、
テキストボックスが入力可能かの確認とテキストボックスへのフォーカス移動は、
どのようにしたら良いでしょうか?
よろしくお願いいたします。

No.803 2015/02/07(Sat) 18:14:39

Re: テキストボックスの入力可能かの確認 / routa
実際に入れてみて確認してみてはどうですか。
場合により第5引数はtrueにしてください。
フォーカスだけの移動なら空文字を入れれば良いと思います。
for x = 1 to 10
sendstr(id, x, x, true, false)
next

No.810 2015/02/08(Sun) 15:53:14
要望 (CHKIMGで探す画像名種類拡大) / 藤原 修
要望です。
画像を元にボタン化している画面がありITEM指定が困難です。そのため、その画面の画像の位置を求めてクリックしたいと考えていますが、CHKIMGで指定できる画像の種類が、BMP形式だけとなっています。このBMP形式以外も拡張していただくわけにはいかないでしょうか。今回、gif形式が検索できればと考えています。

No.778 2015/02/03(Tue) 11:55:51

Re: 要望 (CHKIMGで探す画像名種類拡大) /
BMPのみで十分です。
No.800 2015/02/07(Sat) 02:10:50
EXCEL メソッドの引数の指定について / horowasan
こんばんは,よろしくお願いします。
例を示してお伺いしたいと思います。

EXCEL = CREATEOLEOBJ("Excel.Application")
EXCEL.visible = True
EXCEL.workbooks.open(FileName:=FName, UpdateLinks:=3)

上記の3行目は,既存のファイルを開いて,そのときリンクを更新するという指定です。
問題無く動作します。
ここでひとつ疑問ですが,本来EXCEL VBAでは、メソッドの引数は,括弧で括らずに,下のように
示すことが,HELPに出ています。つまりこういう形です。

EXCEL.workbooks.open FileName:=FName, UpdateLinks:=3

メソッドの引数を指定するときには,UWSCでは,括弧で括らなければならない仕様になっているのでしょうか。ひとつ確認させて下さい。よろしくお願いいたします。

もう1つ,質問があります。1行目の
EXCEL = CREATEOLEOBJ("Excel.Application")
とあるので,EXCELというのは,エクセルVBAで言うところの,Applicationオブジェクト変数であると考えてよろしいのでしょうか?
もしよろしいとしたら,Applicationオブジェクトのメンバーであるメソッドやプロパティが使えると考えてよろしいのでしょうか?前の質問でも述べたとおり,引数に括弧が必要だったりして,若干のUWSC仕様というのがありそうですが・・・。
例えば,Applicationオブジェクトに,Worksheetsプロパティがありますが,VBAのHELPには次のようなコードが載っています。

Worksheets("Sheet1").Move After:=Worksheets("Sheet2")

これを,UWSCに応用すれば,

EXCEL.Worksheets("Sheet1").Move After:=Worksheets("Sheet2")

とすれば,"Sheet1"シートが"Sheet2"シートの後ろに移動しそうですが,これは,SyntaxErrorになります。これは想定内です。引数に括弧がないのですから,そこで,

EXCEL.Worksheets("Sheet1").Move(After:=Worksheets("Sheet2"))

としてみると,「関数WORKSHEETSがありません。」とエラーメッセージが出ます。
当方,初心者ですので,認識不足が言わせたものとお許し願いたいです。しかし,現在私の頭の中は???という感じになっています。どうか,教えて下さい。よろしくお願いいたします。

No.787 2015/02/06(Fri) 01:12:49

Re: EXCEL メソッドの引数の指定について / しろまさ
>括弧で括らなければならない仕様になっているのでしょうか
です。

> Applicationオブジェクト
です。

> EXCEL.Worksheets("Sheet1").Move(After:=Worksheets("Sheet2"))
EXCEL.Worksheets("Sheet1").Move(After:=EXCEL.Worksheets("Sheet2"))

省略は出来ません。省略したい場合はWithを使用して.をつけます。
With EXCEL
  .Worksheets("Sheet1").Move(After:= .Worksheets("Sheet2"))
EndWith

ちょっとしたサンプル↓
http://siromasa.digi2.jp/uwsc/u_term/ExcelApplication.html

No.791 2015/02/06(Fri) 13:12:50

Re: EXCEL メソッドの引数の指定について / horowasan
しろまさ さん
ありがとうございました。
すっきりしました。またよろしくお願いします。
本当にありがとうございました。

No.799 2015/02/06(Fri) 21:02:05
画像ボタンクリック時の操作不可状態について / みみ
FXの自動売買ツール作成中なのですが、決済時の処理で困っています。

以下の仕様でUWSCで操作させているのですが、Bの操作をすると操作が不可な状態となります。
@購入済みのポジションをクリック。
A出てきた入力フォーマットにOCO注文情報を入力。
B入力フォーマットの画像ボタンをクリック。
OCO注文:2つの注文を同時に出しておいて、どちらかが成立したら、どちらかをキャンセルする注文

BのクリックをIESETDATA、BTN、IE.documentのclick()操作で試しましたがどれも操作が不可な状態となります。ただ、@を実際にマウスでクリックしたあとにA、Bと実行するとうまく動くといった状態です。原因がわからないため、調査方法や解決策の案などあれば教えてください。

No.783 2015/02/04(Wed) 14:01:35

Re: 画像ボタンクリック時の操作不可状態について / みみ
原因わかりました。
<Html>の"onclick"で呼ばれる<Javascript>関数の他に"onmouseover"で呼ばれる<Javascript>の関数がいて、その関数内で生成されるものを"onclick"で呼ばれる<Javascript>関数が参照していたためです。
すでに他の事例を参考にして解決しました。

No.796 2015/02/06(Fri) 15:00:58
全1095件 [ ページ : << 1 ... 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 ... 110 >> ]