[ 掲示板に戻る ]

過去ログ閲覧モード

配列に入れて文字列加工について / タカハシ
textblockのnamをsplitで配列に入れて、配列の各URLをタグの中に入れたいのですが、できません。
どこが間違っているのでしょうか?エラーは、getvalue:variant or safe array index out of bounds9行目 エラーと出ます。

したい処理が下記です。
<div align="center">https://aaa</div>
<div align="center">https://bbb</div>
<div align="center">http://ccc</div>

[コード]
textblock nam
https://aaa
https://bbb
http://ccc
endtextblock

tes=split(nam)
for i = 0 to length(tes)
print "<div align=<#DBL>center<#DBL>>"+tes[i]+"</div>"
next

No.3187 2016/11/24(Thu) 23:08:43

Re: 配列に入れて文字列加工について / stuncloud
> variant or safe array index out of bounds
iが配列範囲を越えたからです
> for i = 0 to length(tes)
これを
for i = 0 to length(tes) - 1
にします
配列の要素が3つだった場合添字は0〜2になるからです
(length()は配列の要素の数を返します)

あと、textblockの複数行をsplitする場合は区切り文字を<#CR>にします
tes=split(nam, "<#CR>")

こういう場合は配列の添字の心配をする必要のないfor-inがおすすめ

for url in split(nam, "<#CR>")
 print "<div align=<#DBL>center<#DBL>>" + url + "</div>"
next

No.3190 2016/11/25(Fri) 09:42:01

Re: 配列に入れて文字列加工について / タカハシ
stuncloud様、いつもありがとうございます。for i = 0 to length(tes) - 1の-1にずっと気づかなかったです。for-in、こんな便利な関数あったのですね。知らなかったです。
No.3201 2016/11/25(Fri) 20:42:34
アプリが実行中かどうかの判断方法について / にゃんこ
アプリが実行中かどうかの判断をしたいです。

戻値 = CPUUSERATE( ) ではcpu全体の負荷が計測できるようですが
アプリ単体でのcpuの負荷を取ることはできるのでしょうか?

No.3189 2016/11/25(Fri) 09:33:48

Re: アプリが実行中かどうかの判断方法について / stuncloud
> アプリが実行中かどうかの判断をしたいです。
単純に実行されてるかどうかであれば以下のようにします

----------------------------------------------------
// 探したいプロセスの名前
name = "notepad.exe" // メモ帳の場合

// UWSCの機能だけで探す、ただし遅い
counter = 0
for id in getallwin()
 if pos(name, status(id, ST_PATH)) > 0 then
  counter = counter + 1
 endif
next
msgbox(name + " は " + counter + " 個動いてます")

// WMIを使う、早い
locator = createoleobj("WbemScripting.SWbemLocator")
server = locator.ConnectServer()
queryResult = server.ExecQuery("SELECT * FROM Win32_Process WHERE name = '" + name + "'")
msgbox(name + " は " + getoleitem(queryResult) + " 個動いてます")
----------------------------------------------------

> アプリ単体でのcpuの負荷を取ることはできるのでしょうか?
CPU使用率を取得したいということであれば以下の記事を参考にしてください
https://stuncloud.wordpress.com/2013/08/19/uwsc_perfmon/
IEの1秒間のCPU使用率とメモリ使用量を取得するサンプルです

> PdhVbAddCounter(hQuery, "\Process(iexplore)\% Processor Time", counter_iexplore_cpuuserate)
「iexplore」の部分を任意のプロセス名に変更する感じですね
(notepad.exeならnotepadを入れる)

No.3191 2016/11/25(Fri) 10:23:20

Re: アプリが実行中かどうかの判断方法について / にゃんこ
計測したいのはCCleanerなので
> PdhVbAddCounter(hQuery, "\Process(CCleaner)\% Processor Time", counter_iexplore_cpuuserate)
にしてみましたが、cpu利用率が0%のままで習得できていないようです。

修正せずに
> PdhVbAddCounter(hQuery, "\Process(iexplore)\% Processor Time", counter_iexplore_cpuuserate)
を実行しても、cpu利用率が0%のままで習得できていないようです。

windows8.1 ie11です
実行するにあたって何か必要な設定はありますか?

No.3192 2016/11/25(Fri) 11:16:39

Re: アプリが実行中かどうかの判断方法について / しろまさ
// WMIで個別ならこれでいけそうですが、どうでしょう?(タスクマネージャの数字とは異なる)
Dim pid = Status(GetID(" - Internet Explorer"), ST_PROCESS)
Ifb pid > 0
  with CreateOleObj("WbemScripting.SWbemLocator")
    with .ConnectServer
      GetOleItem( .ExecQuery("SELECT * FROM Win32_PerfFormattedData_PerfProc_Process WHERE IDProcess = " + pid) )
      MsgBox(ALL_OLE_ITEM[0].PercentProcessorTime)
    endwith
  endwith
EndIf

No.3193 2016/11/25(Fri) 11:22:52

Re: アプリが実行中かどうかの判断方法について / にゃんこ
ありがとうございました。
解決できました。

No.3194 2016/11/25(Fri) 11:34:31

Re: アプリが実行中かどうかの判断方法について / stuncloud
> 実行するにあたって何か必要な設定はありますか?
なにをされてそうなったのかわからないのでなんとも…

計測期間中にCPUを使っていなければ0%になりますし
round()関数で丸めているのでごくわずかな使用率だと0に丸められてしまうかもしれません
僕の環境で計測開始直前に ie.navigate() をしておいたら 2% となりました
スクリプト自体に問題はありません

計測のタイミングや計測時間に問題があるのではないでしょうか
例えばアプリを10秒間動かしてその間のCPU使用率を得たいのであればアプリ開始から計測を初めてアプリ終了までの10秒間計測を続ける必要があります
(応用で、1秒間隔で10回計測すればどの時点で高い数値を出したかがわかります)

あとは、round()関数の丸め桁を負の数で指定して少数も含めた値を出すとか、そもそもround()で丸めないとか

No.3195 2016/11/25(Fri) 12:05:51

Re: アプリが実行中かどうかの判断方法について / stuncloud
しろまささん>
Win32_PerfFormattedData_PerfProc_Process なんてクラスがあったんですね
記事を書いた当時もWMIでできないのかなって探した記憶はあるんですが…当時の自分に教えたい!

No.3196 2016/11/25(Fri) 12:30:42

Re: アプリが実行中かどうかの判断方法について / しろまさ
このクラス、XPの頃には無かった気がするんですけどね。
先ほど検索したらあっさり出てきました^^ WMI久しぶりに触ったw

No.3198 2016/11/25(Fri) 16:19:39
IEのスクロールバーを操作したい / nakanishi
初めてまして。

IEタブ内でFlashオブジェクトの自動操作を行っているのですが、
その際にオブジェクトの左上端をタブ表示領域内の左上端に設定(移動?)できないかと、
スクロールバーを操作しようと思ったのですが、
何れのウィンドウにスクロールバーが存在するのか不明なため、
下記スクリプトで何れのウィンドウにスクロールバーがあるのか調査してみました。


DIM id=GETID("xxx - Windows Internet Explorer")
DIM h=GETCTLHND(id,"MacromediaFlashPlayerActiveX")

PRINT id+":"+h

id=HNDTOID(h)
WHILE id>-1
PRINT STATUS(id,ST_PARENT)+":"+STATUS(id,ST_TITLE)+":"+STATUS(id,ST_CLASS)
PRINT GETSLIDER(id,1,SLD_MAX)
PRINT GETSLIDER(id,2,SLD_MAX)
PRINT
id=HNDTOID(h)
WEND


上記スクリプトを実行したところ、
出力結果は次のとおりとなりました。

1:27331518

3::MacromediaFlashPlayerActiveX
-999999
-999999

4::Internet Explorer_Server
-999999
-999999

5::Shell DocObject View
-999999
-999999

6:xxx - Windows Internet Explorer:TabWindowClass
-999999
-999999

1::Frame Tab
-999999
-999999

-1:xxx - Windows Internet Explorer:IEFrame
-999999
-999999


この結果から、IEのスクロールバーが何れのウィンドウにも存在しないように見受けられるのですが、
これはいったいどういうことなのでしょうか?

当方の、スクロールバーに対する誤認識なのでしょうか?

ご教授いただける方がいらっしゃいましたら、
よろしくお願いします。

No.3183 2016/11/23(Wed) 17:19:04

Re: IEのスクロールバーを操作したい / nakanishi
追記:

対象タブにはスクロールバーが存在しており、
手動ではスクロールできている状態です。


書き忘れてしまい、
すいませんでした。

No.3184 2016/11/23(Wed) 17:21:13

Re: IEのスクロールバーを操作したい / nakanishi
再度、すみません。

ループ内の最後の「id=HNDTOID(h)」は間違いで、
正しくは次のとおりです。

WHILE id>-1
PRINT STATUS(id,ST_PARENT)+":"+STATUS(id,ST_TITLE)+":"+STATUS(id,ST_CLASS)
PRINT GETSLIDER(id,1,SLD_MAX)
PRINT GETSLIDER(id,2,SLD_MAX)
PRINT
//id=HNDTOID(h) ←間違い
id=STATUS(id,ST_PARENT) ←正解
WEND


転載する際に誤りがありました。

No.3185 2016/11/24(Thu) 02:01:40

Re: IEのスクロールバーを操作したい / stuncloud
flash自身ではなくflashのあるページにスクロールバーがあるという話で良いですか?
違う場合は読み飛ばしてください
そうである場合はスクロールバーのあるエレメントのscrollTopを変更することでスクロールバーの操作ができます

例えばこの掲示板ならHTMLエレメントのスクロールバーを操作することで移動させられました

ie = createoleobj("InternetExplorer.Application")
ie.visible = TRUE
ie.navigate("http://www3.rocketbbs.com/13/bbs.cgi?id=umiumi")

with ie.document.documentElement
 msgbox(.tagName + "のスクロールバーの長さは" + .scrollHeight)
 .scrollTop = input("数値を変更してスクロールバーを動かします", .scrollTop)
endwith

スクロールバーがあるのはbodyだったりdivだったり、そのページの作りによります
どこにあるかはF12の開発者ツールで探すと良いでしょう
(エレメントを選んだ状態でコンソールから $0.scrollTop = $0.scrollHeight を実行して一番下までスクロールすれば当たり)

以上は縦向きのスクロールバーの話で、横向きならばscrollLeftを変更します(scrollWidthで長さがわかります)

# ChromeだとbodyなんですけどIEだとHTMLにスクロールバーがついてるんですね…?

No.3186 2016/11/24(Thu) 11:03:04

Re: IEのスクロールバーを操作したい / nakanishi
stuncloudさんへ

ありがとうございました。
無事解決できました。

GETSLIDER|SETSLIDERにこだわってしまってたものですから、
COM経由であっさりできちゃうんですね。

返信遅くなり、
申し訳ございませんでした。

No.3188 2016/11/24(Thu) 23:20:24
エクセル 範囲に名前を付けるには / 藍
いつもお世話になります。

Excel.Range("A1").CurrentRegion.Name = "合計"

セルに名前を付けられるのですが範囲に名前を付けるには

どのようにすればよいか良いのかご教示下さい。

B1〜B10 → "合計範囲"

よろしくお願いします。

No.3178 2016/11/19(Sat) 21:42:11

Re: エクセル 範囲に名前を付けるには / Nagatani
こんな感じでは?
Excel.Range("B1:B10").Name = "合計範囲"

No.3180 2016/11/20(Sun) 11:58:44

Re: エクセル 範囲に名前を付けるには / 藍
ありがとうございます。出来ました感謝です。
No.3182 2016/11/20(Sun) 18:10:02
ネット環境で、画像認識をしなくなる。 / あまみや
全く同じ品番のノートパソコンを5台購入して、A営業所で作成し、他の4台のパソコンに、同じプログラムを導入しました。
A.B.Cの営業所は全く問題なく動作するのですが、D.E営業所は、画像認識のところで、認識出来ずに動作が進みません。D.E営業所のパソコンをA営業所に持ってくると、動作します。
試しに、A営業所のパソコンをD営業所に持って行って試すと、やはり画像認識のところで、認識せずに進みません。ネットの環境で、送られてくる画像が、スピードとかの関係で?くずれるのでしようか?
さっぱり解決策が見つからず、困っています。
動作させてるのは、webページのものでIEです。お分かりの方が居られたら、助言を欲しく投稿しました。よろしくお願いします。

No.3169 2016/11/17(Thu) 20:44:50

Re: ネット環境で、画像認識をしなくなる。 / あまみや
ちなみに、画像はprintscreenでペイントに貼り付け、切り出した物を24ビットで保存したものを使用してます。よろしくお願いします。
No.3171 2016/11/17(Thu) 20:51:52

Re: ネット環境で、画像認識をしなくなる。 / koi
どのように処理してるのかよくわかりませんが
もし一度だけの判定処理で判断しているのでしたら
一定時間判定処理を繰り返すようにしてみてはどうでしょうか

一度だけの判定で済まそうとすると
同じ環境で判定していてもネット速度(その時のPC負荷)によって
検出出来たりできなかったりすることはありますよ

No.3172 2016/11/17(Thu) 21:07:43

Re: ネット環境で、画像認識をしなくなる。 / あまみや
While True

WEnd

を利用して、延々画像が認識するまで繰り返してますが、ヒットしないんですよね。
色々検索してみたら、chkimgxと言う拡張関数があるみたいで、試してみようと思います。ありがとうございます。

No.3174 2016/11/17(Thu) 23:36:26

Re: ネット環境で、画像認識をしなくなる。 / satocha
>printscreenでペイントに貼り付け、切り出した物を24ビットで保存
の作業を全営業所でやってもらってメールなどで送ってもらい、それぞれ画像認識を試みたらいいのではないでしょうか。

No.3175 2016/11/18(Fri) 10:13:46

Re: ネット環境で、画像認識をしなくなる。 / 俄プログラマー
>さっぱり解決策が見つからず、困っています。

解決策その1
認識に色幅を持たせる

解決策その2
見た目は同じ画像でも別名で保存しどちらの画像が出ても処理できるようにする。

他にもありますが先ずはこれを試せばよいと思います。

No.3176 2016/11/18(Fri) 12:11:41

Re: ネット環境で、画像認識をしなくなる。 / あまみや
試しに、Wi-Fiのアクセスポイントを買い換えてみたら、D営業所も問題なく動作するようになりました。マシンごとに画像処理で対処すると、今後の開発プログラムでも同じく複数画像を用意しなくてはならなくなるので、環境を同じものにしたら動作しました。お騒がせしました。E営業所も、Wi-Fiアクセスポイントを買い換えてみようと思います。
No.3177 2016/11/19(Sat) 21:18:40

Re: ネット環境で、画像認識をしなくなる。 / しゅん
そういえば、ソフトバンクは画像圧縮してましたっけ。
そんな罠もあるのですね。
あとは、技術的には、遅いと判明した時点で以降の画像を差し替えることも可能ですね。
参考になります。

No.3181 2016/11/20(Sun) 12:47:02
Name属性がないコントロールの指定方法 / DelhiBerry
すみません。もし詳しい方がいれば教えてください。
UWSCを使い、.NETのアプリケーションのコントロールをしようとトライしています。
Form上のボタンやテキストを見て、フォームのが切り替わったことを判定したいと考えているおり、例えば、Hoge screen上に乗っている、終了ボタンを用いて、下記のようにFormが切り替わったことを検出しようとしています。

ID=GETID("Hoge screen","HwndWrapper[Iroha.Presentation.",-1)
REPEAT
SLEEP(1)
s=CHKBTN(ID,"終了")
UNTIL s <> -1
CLKITEM(ID,"終了",CLK_BTN)

 テキストのラベルがあるボタンの場合は、ボタン名を指定することで、CHKBTNがアクティブになったことを検出できたのですが、Nameがついていない、イメージボタンの場合、うまく検出できず、困っています。
 ラベルテキスト以外の、AutomationIDやLegacyIAccessible.Nameなどの、IDを用いて、コントロールを特定する手段はないでしょうか?
 コントロールの表示検出及び、コントロールのクリック操作がでできればと思います。

よろしくお願いします。

No.3170 2016/11/17(Thu) 20:45:03

Re: Name属性がないコントロールの指定方法 / routa
ラベルが無いのなら空文字指定で順番指定を付けたらどうですか。
s=CHKBTN(ID,"",3)

No.3179 2016/11/19(Sat) 21:58:48
クラス名を取得する方法 / タカハシ
下記のコードの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
全1170件 [ ページ : << 1 ... 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 ... 117 >> ]