UWSC 掲 示 板
投稿時に「証明書が不正です」と出る場合には、JavaScriptをオンにしてください
動作不具合での質問の場合には環境(OS,IEのバージョン等)の表記もしてください
タイトルは質問内容を表したものにしてください
ネットゲーム関係の質問はご遠慮ください

入れ子になった table からのテキストデータ取り出し方法 / リキュール
以下の方法でAAA、BBB、CCC は取り出せますが DDDの取り出し方法が分かりません。

table = IE.document.all.tags("TABLE").item(0)
data = table.rows.item(0).cells.item(0).innerText //AAA
print data
table1 = IE.document.all.tags("TABLE").item(1)
data = table1.rows.item(0).cells.item(0).innerText //BBB
print data
data = table1.rows.item(0).cells.item(1).innerText //CCC
print data

htmlソースの部分
<table class="oDrListGrid">
<tr>
<td>
<a>AAA</a>
</td>
<table class="itemDetailTbl">
<tr>
<td>
<a>BBB</a>
</td>
<td>
<a>CCC</a>
</td>
</tr>
</table>
<td>
<a>DDD</a>
</td>
</tr>
</table>

No.4633 2017/10/31(Tue) 22:23:36

Re: 入れ子になった table からのテキストデータ取り出し方法 / しろまさ
そのまま保存しHTMLに表示させると下記のように修正されます。
 <table class="oDrListGrid"><tbody>
  <tr>
   <td><a>AAA</a></td>
  </tr>
 </tbody></table>
 <table class="itemDetailTbl"><tbody>
  <tr>
   <td><a>BBB</a></td>
   <td><a>CCC</a></td>
  </tr>
 </tbody></table>
 <a>DDD</a>

要はテーブル構造がおかしいのでDDDがテーブルから弾かれているのです。
テーブル内にテーブルを収めたいのであれば、TDに内包する必要があります。

No.4635 2017/11/01(Wed) 08:58:14

Re: 入れ子になった table からのテキストデータ取り出し方法 / リキュール
しろまさ さん、お世話になります。

>要はテーブル構造がおかしいのでDDDがテーブルから弾かれているのです。
そうですね。記載を間違えてしまいました。
別の質問をしたいのですが、全体のtable数の取得は
table = IE.document.all.tags("TABLE").length
で取れるのですが入れ子になっている内側のtable数が複数有り、その個数が変動する場合、内側のtable数の取得は無理でしょうか。

No.4645 2017/11/01(Wed) 19:24:27

Re: 入れ子になった table からのテキストデータ取り出し方法 / しろまさ
上のTABLEエレメントから.getElementsByTagNameで下っていけば取れますし、
.all.tagsからでも大抵はIDやNAMEやClassなどで判断できません?

親テーブルにall.tagsしても取れます。
table = IE.document.all.tags("TABLE").item(0)
MsgBox(table.all.tags("TABLE").item(0).innerText)

 <table class="oDrListGrid"><tbody>
  <tr><td><a>AAA</a></td></tr>
  <tr><td>
   <table class="itemDetailTbl"><tbody>
    <tr><td><a>BBB</a></td></td></tr>
   </table>
  </td></tr>
 </table>

No.4646 2017/11/02(Thu) 08:24:09

Re: 入れ子になった table からのテキストデータ取り出し方法 / stuncloud
なんかDOMの理解が足りない感じしますね
コード書く前に開発者ツール(F12)のコンソールで色々試す習慣をつけることをオススメします
あともうこういった階層構造がどうとかいうのはgetElementsByXXX()使うの止めましょう

tables = ie.document.querySelectorAll("table.oDrListGrid table.itemDetailTbl")

いまはもうquerySelectorAll()が使えないIEなんて存在しないはずなので

> table1.rows.item(0).cells.item(1)
1行目の2つ目の要素がほしいならこんな書き方もアリ
td = ie.document.querySelector("table.oDrListGrid table.itemDetailTbl tr:nth-child(1) td:nth-child(2)")

querySelector/querySelectorAllに渡す引数については「CSSセレクタ」を調べてみてください

No.4647 2017/11/02(Thu) 10:07:09

Re: 入れ子になった table からのテキストデータ取り出し方法 / しろまさ
最近目に余るので、お言葉を返しておきます。

> なんかDOMの理解が足りない感じしますね
こういう嫌味をわざわざ書くのはやめません?
質問しにくい雰囲気を作るだけです。

> getElementsByXXX()使うの止めましょう
否定をするなら明確な理由を書くべきでは?
理解してないから質問するわけで、なぜこれがダメで、なぜこれが良いのか。
相手を納得させられなければ、ただ好みを押し付けられただけと受け取られます。

No.4649 2017/11/02(Thu) 11:13:53

Re: 入れ子になった table からのテキストデータ取り出し方法 / リキュール
stuncloud さん、お世話になります。

おっしゃるとおりです。
当方は高齢なため、今まで使用いていた方法にこだわっていました。
DOMの根本的理解も不足しています。
もう少し勉強してみます。

No.4650 2017/11/02(Thu) 12:06:14

Re: 入れ子になった table からのテキストデータ取り出し方法 / リキュール
しろまさ さん、いつもお世話になります。

もう少しのところで行き詰まっています。
私の理解できるのはHTML,VBA,昔のBASICくらいです。
DOMの根本的理解はできなくても「こうすれば動作する」という方法が知りたいです。
すばらしいUWSCを、もう少し利用拡大したいです。

No.4651 2017/11/02(Thu) 12:21:23

Re: 入れ子になった table からのテキストデータ取り出し方法 / stuncloud
> こういう嫌味をわざわざ書くのはやめません?
嫌味のつもりで言ったわけではなかったのですが、もうしわけないです

ここに訪れる方はUWSCがDOMの入り口になっていると思いますが、そのせいかDOMの学習もすべてUWSC経由になっている節があります
正直UWSCでDOMの学習というのはそれだけでコスト上がりますし、あまり良い方法ではありません
今は優秀な管理ツールがありブラウザだけでDOMがいじり放題なので、それで目一杯いろいろ試してもらうのが一番手っ取り早いです
なのでUWSCであたふたするくらいなら速やかに管理ツールに誘導してあげたいという気持ちがあります

> 明確な理由
最近はマークアップも複雑怪奇になってきていますよね、無数のdivがネストしてたりとか
そういった構造に対するコードを書くとgetElementsByXXX()を繰り返す多重ループになったりするわけです
コードを書くコストが嵩み疲弊してしまいます
それがquerySelectorAll()の1ループで済むのですから、かなりのコストダウンになります

querySelector/querySelectorAllならgetElementsByXXXでできることが全部できてしまいます
同じ学習コストをかけるならquerySelector/querySelectorAllをやったほうが断然いいです
ぜひやってほしい

# しかしUWSCだとセレクタを書く際の<#DBL>問題が付きまとうのでそこが面倒ではある

> ただ好みを押し付けられただけ
僕は同じことを言われたら良いとされているものがどのように秀でているかを調べ、自分で試し、その上で使うかどうかの判断をします
理由が書かれていないとしても、発言者は経験に基づいてそういう発言をしているだろうからだいたい信じる方向に行きますが
知らなかったものを知れるきっかけになるなら文脈もどうでもいいです

…という考えなので、無意識に受け手にもそれを求めしまっていたんですね
それでまた気分を害される方がいるなら重ねて申し訳ない

書き込みの際は熟考するようにします

> こうすれば動作する
今回の件に関しては
最初の質問はDDDがどこにあるべきなのかわからないので回答ができません
あるテーブルの中のテーブルの数がほしいのであれば

tables = ie.document.querySelectorAll("table.oDrListGrid table")
print tables.length

となります
これは、oDrListGridというclassを持つtableの配下のtableのコレクションを得て、lengthでその個数を取得しています

No.4657 2017/11/02(Thu) 15:31:03

Re: 入れ子になった table からのテキストデータ取り出し方法 / しゅん
横ですが、、、
嫌味には見えませんでした。ただ、「理解が足りない」といった否定的な表現は避けた方が良いかな、とは思いました。
「DOMについて理解を深めた方が、結局のところ早道ですよ」とか「理解を深めた方が良さそうですね」とか。

まー、明確な理由を一々書くのは面倒ですし、そこは省略しても良い気がします。

No.4659 2017/11/02(Thu) 15:49:36

Re: 入れ子になった table からのテキストデータ取り出し方法 / しろまさ
> stunさん
嫌味かどうかは受け手の問題ですね。私も心が狭いようで失礼しました。

> 明確な理由
詳しい説明ありがとうございます。何を隠そう、私が一番知りたいだけだったり。。

> しゅんさん
Google検索のみで模索してると情報過多で目的に対する方法が複数見つかります。
プログラムの常識を知らない私としてはどれが効率いいのか一番知りたいとこだったりします。
当然、試行錯誤は怠りませんが経験上、検索では出てこない情報もプロの方はなぜか知ってたりします。
簡単でいいんです。ダメな理由は特に知りたい!

No.4661 2017/11/02(Thu) 16:13:03

Re: 入れ子になった table からのテキストデータ取り出し方法 / 10年来のファン
未だにここの掲示板が正常に機能していることに驚きました。
特にボランティアチューターの方々のなんと親切なこと。
stuncloud様の博識には目から鱗です。しろまさ様には過去に数度お世話になりました。

UWSCと出会い約10年立ちます。
VBAとUWSC(たまにはVBS)を組み合わせて色んな事を可能性を試してきました。
現在ではHPをwordpressで自分で作ったり、JAVA,C#,C++もどうにか理解し簡単なコードなら書けるようになりました。(TCP/IP関係だけは未だに苦手です)

質問者側は、よく調べて熟考し、場合によっては書籍にて独学すべきでしょう。
それでも分からないとき、核心に触れる部分だけ聞くようにすべきです。
「高齢者だから」という免罪符のは老害の何物でもありません。
小学生であろうが70歳であろうが関係ないと思います。
我々質問者側にもある程度のマナーが必要で、それがないと親切に対応してくださるひとがいなくなりますよ。

No.4682 2017/11/08(Wed) 13:46:38

Re: 入れ子になった table からのテキストデータ取り出し方法 / satocha
リキュールさんはこれまでたくさんの初心者の質問に回答なさっていて、掲示板への貢献は少なくないと思います。
また、リキュールさんの質問がきっかけとなり、当掲示板の師匠衆の引き出しの中身を多々勉強させてもらっています。個人的にはこちらもありがたかったりします。

今回、やや気になったとすれば、
>DOMの根本的理解はできなくても「こうすれば動作する」という方法が知りたい
あたりに反応されたのかなという気がします。字面だけみると、理屈はいいから答えだけほしいと読めなくもないですから。

さて、

HTMLは知っているけれどDOMの根本理解はなしにして、力技でどこまでできるか考えてみると、
allstr=IE.Document.body.parentNode.outerHTML
でHTMLをごっそり変数allstrに取り込むことは簡単です。

次に、allstrをタグごとに分解するわけですが、少し考えただけだと正規表現で「<」と英数字を弁別すればなんとかなるような気がします。

でも、注釈や引用符、閉じタグがない場合などを考えていくとそれでは足らずYaccだのBisonだの構文解析プログラムというのが世の中にはあるらしい…みたいな感じで、結局挫折する(私なら)ことになります。

なぜなら、HTMLの構文解析をきちんとやるということは、Webブラウザの機能の何分の一か(何十分の一ではありません)を独力で実装することとイコールだからです。

個人でブラウザを開発された方もいらっしゃいますが、そのブラウザのエンジンはGekkoだったりWebKitだったりと既製品であることがほとんどです。核心部分を独力で開発するのはたぶん、無理です。

でも、ブラウザってHTMLが読めるじゃないですか。じゃ、HTMLの解析、つまり、タグの名前で求める部分を引っ張ってくることはブラウザにお願いしようじゃないか、と。

その方法をブラウザの種類やOSに関係なく共通の手順にまとめたのがDOMです。
もともと、「手抜き」のための手法なので、基本的な考え方は難しくありません。子には必ず親が居る…程度のものです。覚えることは多いけど「根本的理解」は難しくありません。そういうわけで、ぜひ、入門サイトなどをご覧になってください。

No.4684 2017/11/08(Wed) 19:51:30

Re: 入れ子になった table からのテキストデータ取り出し方法 / リキュール
投稿のご忠告を戴いたので、今後の投稿に躊躇してしまいました。
しかし、安易に質問している訳ではなく、長い時間をかけて調べておりますが、理解できないことがあります。
若い時比べて記憶力や理解力がすごく衰えていますが、これ以上悪化しないよう努力しているつもりです。

stuncloudさんには、たびたびお世話になります。
取得したいデータは以下のようなものです。
111AAA
222BBB
222CCC
222DDD
222EEE

以下の(X,Y,Z)を変化させて取得はできました。
table1 = ie.document.querySelectorall("table.oDrListGrid")
data1 = table1.item(X).rows.item(0).cells.item(0).innerText
table2 = ie.document.querySelectorall("table.itemDetailTbl")
data2 = table2.item(Y).rows.item(Z).cells.item(0).innerText
data = data1+data2
print data

しかし、親tableの配下にある子tableの個数取得方法が分からないため整列した取り出しが出来ません。
table2 = ie.document.querySelectorall("table.itemDetailTbl")
では、すべての子table個数が取得されてしまいます。

参考HTML
<table class="oDrListGrid"><!-- 1番目の親テーブル -->
<tr><td><a>111</a></td></tr>
<table class="itemDetailTbl"><!-- 1番目の子テーブル -->
<tr><td><a>AAA</a></td></tr>
</table>
</table>
<table class="oDrListGrid"><!-- 2番目の親テーブル -->
<tr><td><a>222</a></td></tr>
<table class="itemDetailTbl"><!-- 2番目の子テーブル -->
<tr><td><a>BBB</a></td></tr>
<tr><td><a>CCC</a></td></tr>
</table>
<table class="itemDetailTbl"><!-- 3番目の子テーブル -->
<tr><td><a>DDD</a></td></tr>
<tr><td><a>EEE</a></td></tr>
</table>
</table>

No.4705 2017/11/14(Tue) 19:15:08

Re: 入れ子になった table からのテキストデータ取り出し方法 / しゅん
// これ、DOMとしては階層になってませんね。全tableが兄弟関係です。
// ということで、こうなります。
// コレクションっぽいものはlengthプロパティに長さがあるのです。(この辺は経験則)

ie = createoleobj("InternetExplorer.Application")
ie.navigate(GET_CUR_DIR + "\temp.html")
//ie.visible = true
tables = ie.document.querySelectorAll("table")
FOR i = 0 TO tables.length - 1
  SELECT tables.item(i).className
  CASE "oDrListGrid"
    data = TRIM(tables.item(i).innerText)
  CASE "itemDetailTbl"
    FOR j = 0 TO tables.item(i).rows.length - 1
      MSGBOX(data + TRIM(tables.item(i).rows.item(j).innerText))
    NEXT
  SELEND
NEXT
ie.quit()


// 親子関係がちゃんとあるなら、table.oDrListGridからchildNodesで手繰るか、
// いっそtable.itemDetailTblからparentNodeで手繰るのが良いかな
// この辺はパズルを解く訓練による

No.4707 2017/11/15(Wed) 12:04:52

Re: 入れ子になった table からのテキストデータ取り出し方法 / リキュール
しゅん さん、お世話になります。

希望通りのデータが取り出せました。
全体のtable数を取得し、SELECTで"oDrListGrid"、"itemDetailTbl"を振り分ける方法は思いつきませんでした。
これからも理解を深めて行きたいとおもいます。
ありがとうございました。

No.4708 2017/11/15(Wed) 14:52:19
IElink javascriptクリック方法 / Merry
こんにちは

下記のように空欄に文字を入れて、リンクを押すというUWSCスクリプトがあります。
しかし、IELink(IE,"id=check-domain") というRECIEで記録した場所がリンクを押してくれないのです。

IESetData(IE,domainall,"domain") // TEXT
IESetData(IE,domainall,"path") // TEXT
IELink(IE,"id=check-domain") // javascript:checkDomain();  //→ここが動かない


こちらを動かすにはどのようにしたらいいのでしょうか?

No.4700 2017/11/13(Mon) 11:13:18

Re: IElink javascriptクリック方法 / 88
変数名(check-domain)に含まれるハイフンが原因な気がします。
そもそもjavascript自体が正常動作していない可能性もあり。

No.4706 2017/11/15(Wed) 09:37:28
翌月1日まで集計したい / sen
いつもお世話になっております。
集計をしていまして、翌月1日まで集計したいのですが、1日が無い場合は月末まででよく、
うまくいきません。
愚直に1日があるなしで分岐でしょうか?
ご教授頂けましたら、幸いです。

dim 1日のある場合[]="17/11/29","17/11/30","17/11/31","17/12/01","17/12/02"
dim 1日のない場合[]="17/11/29","17/11/30","17/11/31","17/12/02","17/12/03"

GETTIME()
GETTIME(-1, val(G_TIME_YY4 + G_TIME_MM2 + "01") + 100 + (G_TIME_MM = 12) * 8800)
今月 = "/" + G_TIME_MM2 + "/"

i = 0
WHILE pos(今月,1日のある場合[i]) > 0
i=i+1
wend
msgbox(1日のある場合[i])

i = 0
WHILE pos(今月,1日のない場合[i]) > 0
i=i+1
wend
msgbox(1日のない場合[i])

No.4687 2017/11/09(Thu) 22:23:47

Re: 翌月1日まで集計したい / しゅん
// こんな感じでしょうか
dim 1日のある場合[]="17/10/29","17/11/29","17/11/30","17/12/01","17/12/02"
dim 1日のない場合[]="17/10/29","17/11/29","17/11/30","17/12/02","17/12/03"


GETTIME()
翌月1日 = GETTIME(0, val(G_TIME_YY4 + G_TIME_MM2 + "01") + 100 + (G_TIME_MM = 12) * 8800)

i = 0
WHILE GETTIME(0, "20"+1日のある場合[i]) <= 翌月1日
  i=i+1
wend
msgbox(1日のある場合[i])

i = 0
WHILE GETTIME(0, "20"+1日のない場合[i]) <= 翌月1日
  i=i+1
wend
msgbox(1日のない場合[i])



// 当月も見るなら
GETTIME()
当月1日 = GETTIME(0, G_TIME_YY4 + G_TIME_MM2 + "01")

FOR i = 0 TO RESIZE(1日のある場合)
  対象日 = GETTIME(0, "20"+1日のある場合[i])
  IFB 対象日 < 当月1日 THEN
    MSGBOX("skip " + 1日のある場合[i])
  ELSEIF 対象日 > 翌月1日 THEN
    MSGBOX("処理終了 " + 1日のある場合[i])
    BREAK
  ELSE
    MSGBOX("処理対象 " + 1日のある場合[i])
  ENDIF
NEXT

No.4690 2017/11/10(Fri) 12:08:02

Re: 翌月1日まで集計したい / しろまさ
// 正規表現にて(集計の意味を取り違えてるかもしれない。。)
dim ar1[]="17/11/29","17/11/30","17/11/31","17/12/01","17/12/02"
dim ar0[]="17/11/29","17/11/30","17/11/31","17/12/02","17/12/03"

GETTIME(); Dim YMto = G_TIME_YY2+"\/"+G_TIME_MM2+"\/"
GETTIME(31,G_TIME_YY4+G_TIME_MM2+"01"); Dim YMnx = G_TIME_YY2+"\/"+G_TIME_MM2+"\/"

Dim ptn = "(" + YMto + ".*?(" + YMnx + "01 )?)" + YMnx + ".*"
Dim sa1, st1 = Join(ar1); st1 = regReplace(st1, ptn, "$1"); sa1 = Split(st1," ",TRUE)
Dim sa0, st0 = Join(ar0); st0 = regReplace(st0, ptn, "$1"); sa0 = Split(st0," ",TRUE)

MsgBox("ar1=" + Length(sa1) + " " + st1 + "<#CR>ar0=" + Length(sa0) + " " + st0)

Function  regReplace(a_text, a_ptn, a_after)
  Dim reg = CreateOLEObj("VBScript.Regexp"); reg.Global = TRUE; reg.Multiline = TRUE; reg.pattern = a_ptn; Result = reg.Replace(a_text, a_after)
FEnd

No.4692 2017/11/10(Fri) 13:31:54

Re: 翌月1日まで集計したい / sen
うまくできました。

しゅん様、バッチリです。
GETTIMEは、何度教えて頂いても、こんがらがります。

しろまさ様、
これはこれで、貴重なものをおしえて頂いたようです。
なにか、仕事に使えそうなのを探してみます。

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

No.4697 2017/11/12(Sun) 23:03:03
getkeystateで指定キーを1回押したつもりが複数回認識させずに1回だけに認識させる方法 / 荒鷲
getkeystateでaltを押すとテストと入力を1回だけしたいのですが、altを1回軽く押しただけで
10回ほど"テスト"が入力されます。これを1回だけ入力させる方法ないでしょうか?

while true

if getkeystate(VK_ALT) then
print "テスト"
endif

wend

No.4691 2017/11/10(Fri) 13:08:09

Re: getkeystateで指定キーを1回押したつもりが複数回認識させずに1回だけに認識させる方法 / しろまさ
// 少し待機して解除
while true
 if getkeystate(VK_ALT) then
  print "テスト"
 endif
 Sleep(0.5)
 getkeystate(VK_ALT)
wend
Exit

// 押してる間待機
while true
 if getkeystate(VK_ALT) then
  print "テスト"
  while getkeystate(VK_ALT)
   Sleep(0.1)
  wend
 endif
 Sleep(0.1)
wend
Exit

No.4693 2017/11/10(Fri) 13:56:20

Re: getkeystateで指定キーを1回押したつもりが複数回認識させずに1回だけに認識させる方法 / 荒鷲
しろまさ様、回答ありがとうございます。
期待通りの処理ができました。

No.4695 2017/11/11(Sat) 14:21:50
CLKITEMで項目選択後、制御が戻らない / sarasara
初歩的な質問で大変恐縮なのですが、

画面に表示されているリストから"AAA"を選択すると、

CLKITEM(id, "AAA", CLK_TREEVEW or CLK_LEFTCLK)

"Yes"、"No"のボタンが表示された小さいウィンドウが表示されます。

"Yes"ボタンを押すために、

 id = GETID("Yes_or_No", , -1)
SLEEP(1)
CLKITEM(id, "Yes", CLK_BTN)
SLEEP(1)

としてみましたが反応がなく、
カーソルの"←"を押して"Yes"を選択してから"Enter"を押そうと、

KBD(VK_LEFT,CLICK,100)
SLEEP(1)
KBD(VK_RETURN,CLICK,100)
SLEEP(1)

を試してみたり、この小さいウィンドウを画像として認識させたり
しようとしましたがやはり反応がないままでした。

FAQの
”CLKITEM関数のCLK_ACC指定にてダイアログを出すと閉じるまで制御が戻らない”  #N15

と同じ状況なのかと思いましたが、既に"CLK_LEFTCLK" を付加しており、
どうしてよいかわからなくなってしまいました。

解決策がお分かりになりましたら教えていただけないでしょうか?
よろしくお願いいたします。

No.4694 2017/11/10(Fri) 22:06:22
a.uwsの処理が終わったらb.uwsを処理させる方法 / さやか
2つのuwsファイルがあり、a.uwsの処理が終わったらb.uwsを処理させる方法が分かりません。
今の所はMSGBOX("1")を挟んで手動でやっています。考えたのは、最初に印=false
で宣言して置いて、a.uwsのファイル内の最後に印=trueにさせて何かしたらできそうな感じがするのですが、そもそもa.uwsのファイルの処理した後の印がfalseままです。a.uwsをcallで呼び出しても同じですし。何か良い方法ないでしょうか?

印=false
tes="a.uws"
tes2="b.uws"

exec("<#DBL>" + GET_UWSC_DIR + "\uwsc.exe<#DBL> <#DBL>" + tes + "<#DBL>")
print 印 //falseのままになる
exec("<#DBL>" + GET_UWSC_DIR + "\uwsc.exe<#DBL> <#DBL>" + tes2 + "<#DBL>")

-------------------------------------------
a.uws内

処理
印=true
-------------------------------------------

No.4674 2017/11/07(Tue) 12:21:08

Re: a.uwsの処理が終わったらb.uwsを処理させる方法 / しろまさ
exec(path, TRUE) で。(uwsc.chm参照)

execは別プロセス起動なので同じ変数名にしても書き換わりません。

No.4678 2017/11/07(Tue) 15:06:12

Re: a.uwsの処理が終わったらb.uwsを処理させる方法 / さやか
しろまさ様、いつも返信ありがとうございます。
execの引数にそのような便利なものあるとは知りませんでした。
ヘルプを見るようにします。

No.4689 2017/11/10(Fri) 09:49:24
SLCTBOXの戻り値について / ヘッドロココ
SLCTBOXでccccの3番目選択したらaの戻り値が4になるんですが、これは3になるのが正しいのではないでしょうか?

a=SLCTBOX(SLCT_BTN,10,"どれか選んでね","AAAA","BBBB","CCCC")
print a
SELECT a
 CASE SLCT_1
  FUKIDASI("1番目が選ばれました")
 CASE SLCT_2
  FUKIDASI("2番目が選ばれました")
 CASE SLCT_3
  FUKIDASI("3番目が選ばれました")
 CASE 0
  FUKIDASI("タイムアウトしました")
SELEND
Sleep(3)
FUKIDASI()

No.4685 2017/11/08(Wed) 23:13:02

Re: SLCTBOXの戻り値について / しろまさ
複数チェック対応でビットが返るのがデフォルトです。
連番が欲しいなら SLCT_BTN OR SLCT_NUM ですね。

No.4686 2017/11/08(Wed) 23:39:44

Re: SLCTBOXの戻り値について / ヘッドロココ
しろまさ回答ありがとうございます。理解できました。
No.4688 2017/11/10(Fri) 09:47:36
windows10 CHKIMG の動作 / 蒙古
こんにちは。
同じような症状になっている方がいましたら、教えて頂きたいです。

UWSC Pro Ver5.3.0.2
を使用しておりまして、

開発のOSは、windows7で開発をしております。


CHKIMGを使用しており、
windows7ですと、問題なく認識ができます。

しかし、
同じスクリプトをexe化し、
windows10環境のパソコンの方に渡して使用して頂くと、
画像が認識されません。

当然、各パソコンで画像が違うため、
そのwindows10のパソコンで、
SAVEIMG関数を使い、ビットマップ形式で保存し、加工しています。

また、CHKIMGのオプションで、
IMG_MSK_BGR4
を使っていますし、

座標も、0,0,2000,2000 のように、
画面範囲限界まで行っております。

他のwindow7環境ですと問題ないのですが、
windows10環境ですと同じスクリプトが動きません・・・。

何かwindows10独特のセキュリティとかがかかっているのでしょうか?

同じ症状になって解決した方がいらっしゃったら、
ぜひ教えて頂きたいです。

よろしくお願いします。

No.4664 2017/11/03(Fri) 05:31:07

Re: windows10 CHKIMG の動作 / Demzel
こんにちは。

私は半年前あたりにwindows7からwindows10へと移行しましたので、両方の環境で
CHKIMGを確認しております。
現在はWindows10上にてUWSC Ver5.3.0.2を使用しております。

私の場合、ChromeにてCHKIMGをバックグラウンドで利用しようとすると、Windows7
で問題なく動いていたものが、Windows10にて全く認識されなくなってしまいました。

具体的には、MOUSEORG(ID, MORG_DIRECT, MORG_BACK)とした場合、画面がアクティブ
であろうが他の画面に隠れていようが全く認識しません。
MORG_BACK以外の他の引数は問題なく動作します。
また、ハンドル値を使っても同様の結果となりました。

この点に留意しておけば、Windows7の頃の記述で問題なく動作します。

この問題の解決方法をずっと探していましたが、結局見つけることができず
バックグラウンド動作は諦めました。
他のブラウザなどでは動作するかもしれませんが、現状はバックグラウンド動作は
不安定であり、動いたらラッキーと思うくらいがいいかもしれません。

No.4683 2017/11/08(Wed) 19:28:55
VMwareのバックグラウンド操作 / Noir
VMware Workstation 12 Proで起動した仮想マシンに対して、MOUSEORG関数を利用してバックグラウンド操作を行いたいのですが、うまくいきません。

環境
Windows10 Pro x64
VMware Workstation 10 Pro 12.5.7
UWSC Pro 5.3.0.2
ゲストマシン:Windows8.1 x64

現在、
wid=getid("仮想マシン名")
mouseorg(wid,2,morg_back)
で、バックグラウンド入力をしようとしたのですが、CHKIMGはおろかKBD,BTNも動作しません。
どなたか、対応方法をご存知のかたがいらっしゃれば、ご教示ください。

No.4666 2017/11/04(Sat) 16:15:03

Re: VMwareのバックグラウンド操作 / satocha
wid=getid("仮想マシン名")でウインドウIDがきちんと取れていないのでは?
VMwareを持っていないのでどんなウインドウタイトルになるか分からないため、こうすればいいとはお知らせできませんが。

強引にやるなら、全ウインドウを取得して、そのタイトルに仮想マシン名が含まれていればそれがウインドウIDだと見做す手もあります。
VMachineName="仮想マシン名"
wid=-1
for id in GetAllWin()
 if pos(VMachineName,status(id,st_title))
  wid=id
  break
 endif
next
//このあとwidを使って操作

No.4668 2017/11/04(Sat) 22:22:18

Re: VMwareのバックグラウンド操作 / Noir
返信ありがとうございます。

後だしで申し訳ありませんが、
acw関数でウィンドウIDが取れていることは確認しました。
アイテム名からハンドル取得も試しましたが、把握可能なアイテム名でもうまくいきませんでした。

No.4669 2017/11/04(Sat) 23:16:25

Re: VMwareのバックグラウンド操作 / PAC
仮想マシンの中でUWSCを動かせば良いのでは?
No.4670 2017/11/05(Sun) 11:10:10

Re: VMwareのバックグラウンド操作 / Noir
返信ありがとうございます。

Hostでuwscを使用している理由は主に2点あり、
VM内で動かしているソフトウェアが仮想キー入力を受け付けない仕様のようなのでVM外から動かしたい、ということと、
多数(現在12台)からの同時アクセスに対する負荷試験も兼ねており、10~100ms程度の同時性を持った制御をVM内で(ネットワーク経由で)行う術を持ち合わせていないことが理由です。

この2点が解消されればVM内で実行するのですが、特に後者のほうは、当方がネットワーク関連に特に無知であるため、困難です。

No.4672 2017/11/06(Mon) 17:32:39

Re: VMwareのバックグラウンド操作 / stuncloud
vw = getid(" - VMWare WorkStation")
id = -1
hVMUIView = getctlhnd(vw, "VMUIView")
hAtlAxWin90 = getctlhnd(hndtoid(hVMUIView), "AtlAxWin90")
for _id in getallwin(hndtoid(hAtlAxWin90))
 if pos("ATL:", status(_id, ST_CLASS)) then
  id = _id
  break
 endif
next

これで変数idに今開いているタブのコンソール部分のidが入ります (-1だったら失敗です)
このあとだいたい画面の真ん中あたりをbtn()でクリックしてからsckey()によるキー送信を行う、ということをしています
真ん中あたりをクリック、は操作を仮想マシン側に移すためです (なのでCtrl+GでもOK
ログオン画面などコピペができない箇所で任意の文字列を送るというような使い方がメインです
ので、マウス操作やmouseorgeでのバックグラウンド操作に関してはできるかどうかわかりません
上記のコードでidが取れたら試してみてください

No.4681 2017/11/08(Wed) 10:41:25
ユーザーアカウント制御でのクリック / にゃんこ
ユーザーアカウント制御の"次のプログラムにこのコンピューターへの変更を許可しますか?"の画面で、文字列Yの入力をする方法はありますか?
よろしくお願いします。

No.4680 2017/11/08(Wed) 08:22:50


 過去ログ(〜2017/08/24)・検索ツール


以下のフォームに記事No.と投稿時のパスワードを入力すれば
投稿後に記事の編集や削除が行えます。
200/200件 [ ページ : << 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ... 20 >> | 過去ログ ]