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

クラス名を取得する方法 / タカハシ
下記のコードのclass名を全て取得したいのですが良い方法が見つかりません。
正規表現で、class=".+"やtextblockやposを使ってのcopy関数でforで回せばいけるのかな?と漠然とイメージがあるのですが、コードの組み合わせ方が思いつきません。
取得したいのがinfobox、head、rank-mark rank-01、star-mark。
何か良い方法ないでしょうか?

<div class="infobox">
<div class="head">
<div class="rank-mark rank-01">第1位</div>
<div class="star-mark">おすすめ:★★★★★</div>
<dl>
<dt>会社名</dt>
<dd>特徴</dd>
</dl>
</div>
</div>

No.3162 2016/11/17(Thu) 12:15:46

Re: クラス名を取得する方法 / stuncloud
betweenstrで全部取れますね
betweenstrが値を返さなくなるまで繰り返し、連想配列に格納します
classはスペース区切りで複数含まれる場合があるのでそれらはsplitとforinで分割します
対象文字列が含まれた変数をtextとしています

hashtbl ClassnNames
i = 0

repeat
 i = i + 1
 classname = betweenstr(text, "class=<#DBL>", "<#DBL>", i)
 for n in split(classname)
  ClassnNames[n] = n
 next
until classname = EMPTY

for name in ClassnNames
 print name
next

No.3164 2016/11/17(Thu) 13:50:38

Re: クラス名を取得する方法 / タカハシ
stuncloud様、いつもありがとうございます。希望通りのクラス名取得できました。
hashtblとforin、betweenstrでこのような使い方ができるとはすごいです。

No.3165 2016/11/17(Thu) 16:47:10

Re: クラス名を取得する方法 / stuncloud
ちなみに、hashtblのkeyにclass名を格納することで重複分が排除されるという副作用があります

たとえば対象が

> <div class="rank-mark rank-01">第1位</div>
> <div class="star-mark">おすすめ:★★★★★</div>
> <div class="rank-mark rank-02">第2位</div>
> <div class="star-mark">おすすめ:★★★★★</div>


だった場合は rank-mark rank-01 star-mark rank-02 が得られます
(rank-markとstar-markが複数ありますが1個だけになります)

No.3168 2016/11/17(Thu) 17:31:20

Re: クラス名を取得する方法 / タカハシ
重複分が排除されるという副作用、これはすごいありがたいですね。
stuncloudさんのuwscの圧倒的な知識すごいですね。
かなりの実践をこなされていると推察しています。

No.3173 2016/11/17(Thu) 21:53:46
指定ウィンドウのスライダー個数を数え、縦の特定部分にのみ実行したい / たろこ
スライダーというか、スクロールバーなのですが
指定アプリのスクロールバー個数を数えて、
スライダーを動かしたり最大値を取得したりしたいと思っています。

そのアプリ画面での最大スクロール表示は縦横あわせて8個です。
人によって表示方法が違うため、どのスクロールバーが表示されているかも変わります。

全スクロールバーが表示されている段階で、左上からというのであれば
3番目になります。

||」」←ココ
|| 」

こんなウィンドウになっていて、最大縦に4つ、横に4つのスクロールバーがつきます。
調べたいのは一番右上のウィンドウです。

1.GETSLIDERで6個分、縦横を判別する
 IF (GETSLIDER(id,1,SLD_BAR)=1) then
 IF (GETSLIDER(id,2,SLD_BAR)=1) then
 IF (GETSLIDER(id,3,SLD_BAR)=1) then
 IF (GETSLIDER(id,4,SLD_BAR)=1) then
 IF (GETSLIDER(id,5,SLD_BAR)=1) then
 IF (GETSLIDER(id,6,SLD_BAR)=1) then

FOR文で回す…? そしてその値をどうやって保持するか…


2.GETSLIDERで座標位置を特定する
 位置を特定したところでなんだ、って感じですけど…。

3.GETSLIDERを使わず、他の方法を探る
 画面認識を使い、座標位置を得る。
 これは最終手段にしたいです。

良い方法があれば教えて下さい。よろしくお願いいたします。

No.3161 2016/11/16(Wed) 13:10:31

Re: 指定ウィンドウのスライダー個数を数え、縦の特定部分にのみ実行したい / stuncloud
一番右上にあるスクロールバーの位置はx座標がもっとも大きく、かつy座標がもっとも小さいものなので、例えば以下のようにして調べられます

tmp = ""
n = 0
max_x = -999999
min_y = 999999

for i = 1 to 8
 x = getslider(id, i, SLD_X)
 if x = -999999 then break
 if x > max_x then
  max_x = x
  tmp = tmp + " " + i
 endif
next
// x座標が一番大きいものの中からy座標がもっとも小さいものを探す
for i in split(tmp, " ", TRUE, TRUE)
 y = getslider(id, i, SLD_Y)
 if y < min_y then
  min_y = y
  n = i
 endif
next

msgbox("一番右上のスクロールバーは" + n + "番です")
setslider(id, 100, n) // スライドさせてみる


SLD_BARで縦横の確認もするようにすれば、希望通りにできるのではないでしょうか

No.3163 2016/11/17(Thu) 12:30:56

Re: 指定ウィンドウのスライダー個数を数え、縦の特定部分にのみ実行したい / たろこ
回答ありがとうございます。

実行してみたところ「一番右上のスクロールバーは1番です」と表示されました。
しかし、スクロールバーは動きませんでした…
縦横確認していないかもしれません。
実際、右上のスクロールバーは2番でした。

実際に1番目のアイテムから順番にスライダーを動かすよう組み
スクロールバーの表示個数を変えて確認してみました。

やはり、その位置は2番目でした。
もしかしたら2番固定なのかもしれません!

教えて頂いた方法を参考に、まずはプログラムを修正してみます。
ありがとうございました^^

No.3166 2016/11/17(Thu) 17:01:00

Re: 指定ウィンドウのスライダー個数を数え、縦の特定部分にのみ実行したい / stuncloud
> 縦横確認していないかもしれません。
はい、サンプルだと縦のものと横のものは区別してません
縦のものと横のもののそれぞれで座標を比較して、希望する位置を探すようにすると良いかと思います
それと、実はSLD_XやSLD_Yがスクロールバーのどの辺りの座標を返してるかをちゃんと検証してないので(思いつきで書いただけなので…すいません)、サンプルのコードだと想定通りにいかないという可能性があります
そのあたりはしっかり検証していただいて、いい感じに仕上げてください!

No.3167 2016/11/17(Thu) 17:19:46
BetweenStrの返す文字列について / にしの
お世話になります。
下記のようにBetweenStrで文字を切り分けたときは
a2a が2番目だと思っていたのですが取り出せないのでしょうか

w = "a1a2a3a4a5a"
msgbox(BetweenStr(w,"a","a",1)) // 返す文字 1
msgbox(BetweenStr(w,"a","a",2)) // 返す文字 3

No.3151 2016/11/14(Mon) 22:14:50

Re: BetweenStrの返す文字列について / 俄プログラマー
a〜a間を考えれば2番目は3ですね。その次は5
そのデータの並びなら私はSPLITを使います。

w = "a1a2a3a4a5a"

value = SPLIT(w,"a")
for i=1 to 5
print value[i]
next

No.3152 2016/11/14(Mon) 22:40:18

Re: BetweenStrの返す文字列について / miles
// BETWEENSTR関数の 数え方フラグを
// TRUE(n個目は前文字以降でカウント)にして取り出せますよ。

w = "a1a2a3a4a5a"
msgbox(BetweenStr(w,"a","a",2,True))

// ヘルプファイルのBETWEENSTR関数の例)
// 前文字と後文字が同じ時
// を参考にしてください。

No.3153 2016/11/15(Tue) 09:26:47

Re: BetweenStrの返す文字列について / しろまさ
// 第5引数(数え方フラグ)を使います。
msgbox(BetweenStr(w,"a","a",1)) // 返す文字 1
msgbox(BetweenStr(w,"a","a",2)) // 返す文字 3
msgbox(BetweenStr(w,"a","a",1,TRUE)) // 返す文字 1
msgbox(BetweenStr(w,"a","a",2,TRUE)) // 返す文字 2

// 昔数え方は前か後かで一議論あったんですよね。なつかすぃ^^
//(その議論後に第5引数が出来たのだ!)

No.3154 2016/11/15(Tue) 09:28:47

Re: BetweenStrの返す文字列について / 俄プログラマー
そんな経緯があったんですね。
サンプルも、もうすこし分かり易い例がいいなと思いました。

No.3156 2016/11/15(Tue) 12:10:43

Re: BetweenStrの返す文字列について / にしの
俄プログラマーさん
milesさん
しろまささん

ありがとうございます。
ヘルプに書いてあるのに理解できていなかったです、
前文字以降でカウントって?何?と思ったままにしていました。

SPLITで配列に入れるのもFor in で処理できて便利ですね、早速使わせてもらいます。

No.3159 2016/11/15(Tue) 21:39:15

Re: BetweenStrの返す文字列について / 俄プログラマー
データの読み書きの際にSPLITとJOINは大変便利ですよ。
No.3160 2016/11/15(Tue) 22:01:48
Windowsの「登録されている拡張子は表示しない」の設定でUWSCの動作が異なる。 / 256マン
環境 Windows7
UWSC 5.2.3
エクセル 2016

Acrobat Standard DCでファイル結合→PDFをエクセルに変換をするプログラムで
拡張子を表示する場合のUWSCプログラムは

While True //画像出現待ちループ
ID_5 = GetID("バインダー1.xlsx - Excel", "XLMAIN", -1)
TITLE1 = STATUS(ID_5,ST_TITLE) // タイトル
IFB ID_5 >= 0
CLKITEM(ID_5, "上書き保存", CLK_ACC or CLK_LEFTCLK)
CTRLWIN( ID_5 , close) //閉じる
Break
EndIf
WEnd

でうまく動作しますが、拡張子を表示しないに設定すると、UWSCが停止してしまいます。
そこで、下記のようにすると動作します。

While True //画像出現待ちループ
ID_5 = GetID("バインダー1 - Excel", "XLMAIN", -1)
TITLE1 = STATUS(ID_5,ST_TITLE) // タイトル
IFB ID_5 >= 0
CLKITEM(ID_5, "上書き保存", CLK_ACC or CLK_LEFTCLK)
CTRLWIN( ID_5 , close) //閉じる
Break
EndIf
WEnd

UWSCがエクセル2016と相性が悪いのか? やりたいことは
Acrobat Standard DCで自動で開いたエクセルを
上書き保存して、エクセルを閉じる動作をさせられればいいのですが。

よろしくお願い致します。

No.3155 2016/11/15(Tue) 11:48:41

Re: Windowsの「登録されている拡張子は表示しない」の設定でUWSCの動作が異なる。 / stuncloud
要するに拡張子を表示している場合はExcelのウィンドウタイトルにも拡張子が表示されている、というわけなので以下のような方法が考えられます

案1: タイトルが部分一致するように指定し、どちらでも対応できるようにする

ID_5 = GetID("バインダー1", "XLMAIN", -1)

案2: 「登録されている拡張子は表示しない」の状態によって切り替える
これはレジストリから設定を読みます

ws = createoleobj("WScript.Shell")
HideFileExt = ws.RegRead("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced\HideFileExt")

if HideFileExt = 1 then // 「登録されている拡張子は表示しない」が有効
 ID_5 = GetID("バインダー1 - Excel", "XLMAIN", -1)
else
 ID_5 = GetID("バインダー1.xlsx - Excel", "XLMAIN", -1)
endif

案1が楽でいいんじゃないかと思います

No.3157 2016/11/15(Tue) 12:15:52

Re: Windowsの「登録されている拡張子は表示しない」の設定でUWSCの動作が異なる。 / 256マン
案1で、動作できました。ありがとうございました。助かりました。
No.3158 2016/11/15(Tue) 20:20:21
UWSCフリー版の商用利用について / Masahiro Watanabe
お世話になっております。
現在、UWSCを使い、お客様に納品するアプリケーションの繰り返しテストに利用したいと考えております。
フリーバージョンとプロバージョンのそれぞれで、そうした商用利用についての利用条件を教えていただけませんでしょうか?

No.3148 2016/11/14(Mon) 12:29:36

Re: UWSCフリー版の商用利用について / ぼいじゃ
Readmeに書いてありますよ。
No.3149 2016/11/14(Mon) 13:02:00

Re: UWSCフリー版の商用利用について / Masahiro Watanabe
ありがとうございます。Readmeに書いてあることがすべてということで、理解いたしました。
No.3150 2016/11/14(Mon) 16:41:40
タスクトレイに格納したくない / ぼいじゃ
Ver5.2.3で
・メイン画面の 閉じるボタンにて 終了動作だったのを タスクトレイ格納に変更した
とのことですが、格納せずに終了するよう変更する設定はないんでしょうか?
1つ古いバージョンを使うしかないんでしょうか?

No.3136 2016/11/11(Fri) 15:13:52

Re: タスクトレイに格納したくない / 俄プログラマー
タスクトレイに入っているアイコンを右クリック
タスクトレイから出るをクリック

No.3137 2016/11/11(Fri) 20:11:14

Re: タスクトレイに格納したくない / umiumi
UWSC.INI ファイルの [SET] セクションに 以下を追加してください。
CloseBtn = 1

No.3138 2016/11/12(Sat) 01:41:56

Re: タスクトレイに格納したくない / ぼいじゃ
iniファイルに設定追加出来るんですね。
ありがとうございましたm(_ _)m

No.3147 2016/11/14(Mon) 11:05:06
UScrCall:System Error. Code:8. のエラー内容がわかりません。 / マキロン
UWSC利用歴2年の初心者です。
いつも迷った際に、掲示板とてもお世話になっています。


とあるソフトをループでコントロールさせるマクロを実行していたのですが
数日動作させっぱなしだと、以下のようなエラーが発生したのですが
エラーコードの内容がわからず解決方法が調べれずに困っています。

どなたかご存知の方、ご教授いただけませんのでしょうか。


<表示されたエラーメッセージ>
UScrCall:System Error. Code:8.
このコマンドを実行するのに十分な記憶域がありません。

※エラー画像のcap
https://gyazo.com/ca6b01d230c1d66077fdcbd9b8f9cc2a



このエラーの記憶域はどこを指しているのでしょうか?
HDD、メモリーともに領域は空いているのですが、、、



ご存知の方がいらっしゃいましたら、何卒ご教授お願いいたします。

No.3141 2016/11/13(Sun) 20:54:02

Re: UScrCall:System Error. Code:8. のエラー内容がわかりません。 / 俄プログラマー
>このエラーの記憶域はどこを指しているのでしょうか?
>HDD、メモリーともに領域は空いているのですが、、、


確認時は空いていても一時的にでもオーバーするとエラーが出ますよ。
十分な記憶域がありません 原因
などで調べてみてください。
断定は出来ませんが特定のプログラムがメモリ開放していない可能性が高いと思います。

No.3146 2016/11/13(Sun) 23:10:15
EXCELのマクロが実行できない / トランプショック
Windows10 Office2016の環境、UWSC523を使用しています。
Sub aa()
Msgbox "こんにちは"
End Sub
のある aaa.xlsm で
aaa.xlsm は立ち上がるものの、下部のコード(ネットで調べた)で次のようなエラーメッセイジが出るので困惑しています。
どなたか解決方法を教えてください。

🐈エラーメッセイジ
COM_Error:名前が不明です。
6行目:EXCEL/Run "aa"

🐈UWSCコード
path="C:\Users\Owner\Desktop\aaa.xlsm"
EXCEL = CREATEOLEOBJ("Excel.Application")
EXCEL.Visible = True
EXCEL.Workbooks.Open(FileName:=path)
sleep(2)
EXCEL.Run "aa"

No.3139 2016/11/13(Sun) 15:39:20

Re: EXCELのマクロが実行できない / 俄プログラマー
この辺と同じかな?
http://q.hatena.ne.jp/1466775022

No.3140 2016/11/13(Sun) 19:34:07

Re: EXCELのマクロが実行できない / トランプショック
 ご指摘の通りコードはほぼ一緒です。

今回の問い合わせは、このコードで前記エラーが出てしまうので、解決方法を教えて頂きたいというものです。

No.3142 2016/11/13(Sun) 21:22:45

Re: EXCELのマクロが実行できない / Nagatani
EXCEL.Run("aa")ではだめでしょうか?
No.3143 2016/11/13(Sun) 21:42:56

Re: EXCELのマクロが実行できない / トランプショック
 Nagatani さん、有難う御座いました。

 色々品を変えても、エラーが出ていたのに、理由は分かりませんがエラー退治できました。
助かりました。

 感謝します。

No.3144 2016/11/13(Sun) 22:15:00

Re: EXCELのマクロが実行できない / 俄プログラマー
解決方法が書いてあるので貼ったんですけどね。よく読んで頂けなかったようで。
No.3145 2016/11/13(Sun) 22:54:45
マウスカーソルの下ではなく、TAB等で移動したカーソル下の文字の取得 / AMG
お手数かけますが、何か方法はありますでしょうか?

スクロールバーの付いている画面があって、目的の枠に移動するには、マウスでスクロールさせる必要があるのですが、件数などによって、スクロールさせる距離が変わってきて目的の位置にうまく合わせられません。TABキーで回数などを記憶したり、回数分のTAB操作で目的の枠には簡単に移動できますので、TAB等で移動した先のカーソル位置の枠内の文字の取得を実現するには、どうしたら?よいでしょうか?よろしくお願いいたします。

No.3133 2016/11/07(Mon) 19:50:22

Re: マウスカーソルの下ではなく、TAB等で移動したカーソル下の文字の取得 / stuncloud
できないことはないと思いますが、操作対象アプリケーションによって最適解が異なるんじゃないかと思います
Webページの話だったらIEを使えば簡単にできるんじゃないかな?
そうじゃない場合は頑張ればできる可能性があります、何を頑張るかはそのアプリケーション次第なんですが

とりあえず思いついたのは、選択箇所がコピーできる可能性に賭けて以下を実行する

sckey(id, VK_CTRL, VK_C)
print getstr(0)

Ctrl-Cでコピーしてその内容をクリップボードからgetstr(0)で得るというやり方

No.3134 2016/11/08(Tue) 10:20:39

Re: マウスカーソルの下ではなく、TAB等で移動したカーソル下の文字の取得 / AMG
そうですか。もう少し考えてみます。ありがとうございました。
No.3135 2016/11/10(Thu) 20:18:41
CHKIMGの異常検出について / koi
サンプル画像(一週間有効)
http://fast-uploader.com/file/7034041443728/
パスワード  uwsc

テストスクリプト
WHILE TRUE
PRINT GETTIME() _
+ " " + CHKIMG(GET_CUR_DIR + "\Lv75.bmp") _
+ " " + CHKIMG(GET_CUR_DIR + "\Lv75.bmp",1) _
+ " " + CHKIMG(GET_CUR_DIR + "\Lv75.bmp",1,,,,,-1) _
+ " " + CHKIMG(GET_CUR_DIR + "\Lv75.bmp",1,,,,,-1,IMG_MSK_BGR1)
WEND

環境 Win10 64ビット バージョン 1607
   uwsc Ver5.2.3
   使用プログラム  Gimp2(以下Gimp)

上記環境にてサンプル画像をGimpで開き
表示の拡大率を上げていくと1000%を超えたところから
異常な検出が始まります
  拡大率上げると1個2個見つかるとか言ったレベルではなく
   300個以上の検出が行われます

ちなみにWin標準のペイントでは800%までしか
拡大できないため?現象が発生しません
(その他のツールでは未確認)

固有の問題・バグ を含め原因がわからず困っています

No.3128 2016/11/07(Mon) 11:48:33

Re: CHKIMGの異常検出について / しゅん
異常ではないと思います。

画像は、40*14ですね。
ただ、外周1ピクセルは黒なので、実質38*12です。
黒とオレンジの二値かと思います。

第二引数で、1:左上を指定しているため、黒部分は無視されます。
無視なので、、、オレンジでも良い、ということです。
すなわち単純に言って、38*12のオレンジのバーがあるとヒットします。
39*12のオレンジのバーがあると、バーの始点と1ピクセルずれの二点でヒットするのです。

Lや7や5は横長な部分があります。
1200%拡大になると、1ピクセルが12*12になるかと思います。
横に何ピクセルか並ぶと、、、おわかりかと思います。


やりがちな誤りかと思います。
ただ、バグとか異常とか言う単語は感じが悪いのでなるべく使用を避け、とことん自分を疑ってから使うと良いと思います。
(「300以上検出してしまうのですが、何が悪いか教えてください」とかが良かったですね。)

#私も一度、白い文字を背景色無視でCHKIMGして、ブラウザー起動してたら大量に検出しました。
#で、(x座標,y座標)にこの文字ない!どこだよ。スクリーンショットとって拡大、ここ、、、
#白いよ、、、、、、そうだよ、あったよ、、、私が間違ってたよ、ってやりました!
#背景色無視には注意が必要です。

No.3129 2016/11/07(Mon) 17:58:44

Re: CHKIMGの異常検出について / koi
しゅん様

始め理解できなかったのですがちょっと考えていたら
書かれている説明で納得しました

元画像自体も小さいため
確かに拡大していくとL/7/5 等の横線部分で検出することになりますね
そこまで気が回りませんでした

ありがとうございました

No.3132 2016/11/07(Mon) 18:57:21


 過去ログ(〜2016/10/02)・検索ツール


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