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

指定フォルダー内に入っているファイル名の配列にいれて.pngを省いて配列に入れ直す方法 / ジンギスカン
指定フォルダー内に入っているファイル名を配列にいれて.pngを省いて配列に入れ直すのが型が合いませんと表示されます。下記のコードではうまくいきません。何か良い方法ないでしょうか?

foler="C:\Users\"
num=getdir(foler)

res= JOIN(GETDIR_FILES)
res=chgmoj(res,".png","")
GETDIR_FILES= SPLIT(res)-1
GETDIR_FILES= slice(GETDIR_FILES, 0, length(GETDIR_FILES)-1)
print GETDIR_FILES[0]

[C:\Users\内のファイル名]

C:\Users\a画像.png
C:\Users\b画像.png
C:\Users\c画像.png

[したいの処理]

a画像
b画像
c画像

No.3547 2017/02/24(Fri) 15:23:36

Re: 指定フォルダー内に入っているファイル名の配列にいれて.pngを省いて配列に入れ直す方法 / stuncloud
GETDIR_FILESに代入はできません
別の変数に代入しましょう

NewArray = split(res)

No.3548 2017/02/24(Fri) 16:01:54

Re: 指定フォルダー内に入っているファイル名の配列にいれて.pngを省いて配列に入れ直す方法 / しろまさ
// なんでも正規表現

re = DosCmd("Dir /A-D C:\Users")
re = regReplace(re, ".*\d+\s(.+?)\.png(\r\n)|.*\r\n", "$1$2")
MsgBox(Trim(re))

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.3553 2017/02/24(Fri) 18:49:29

Re: 指定フォルダー内に入っているファイル名の配列にいれて.pngを省いて配列に入れ直す方法 / ジンギスカン
stuncloud様、回答ありがとうございます。別の変数に入れたらできました。
No.3557 2017/02/25(Sat) 15:28:07

Re: 指定フォルダー内に入っているファイル名の配列にいれて.pngを省いて配列に入れ直す方法 / ジンギスカン
しろまさ様、回答ありがとうございます。無事できました。
パターンの解釈が自分の実力ではとうていできません。
もっと学んでいきたいと思います。

No.3558 2017/02/25(Sat) 15:28:37
(No Subject) / ランナ
uwscを使ってあるアプリケーションを操作しています。

あるウィンドウの●●というクリックボタンを、マウスの左ボタンでクリックするまで、
スクリプトをスリープさせたい、と考えていますが上手くいかないので教えてください。

それまでは、マウスで左クリックするまでスリープさせることで間に合っていたので

while !(GETKEYSTATE(VK_LBUTTON))
sleep(0.1)
wend

で済んでいました。

しかし●●というクリックボタンまで指定する必要が出てきたので

while !(GETKEYSTATE(VK_LBUTTON(id,"●●",CLK_BTN)))
sleep(0.1)
wend

とやってみましたが、上手くいきません。
「関数:VK_LBUTTONがありません」というエラーメッセージが出てしまいます。

getkeystateの関数では、クリックボタンの指定はできないのでしょうか。
改良点や、それ以外に方法などがあれば教えてください。
よろしくお願いします。

No.3538 2017/02/22(Wed) 16:08:15

Re: / stuncloud
> 「関数:VK_LBUTTONがありません」というエラーメッセージが出てしまいます。
VK_LBUTTONは関数ではないのでそうなります

で、●●ボタンがクリックされるまで待つ、というのはちょっと難しいです
例えば●●ボタンをクリックすると画面上に特定の文字が表示される、ということであればVK_LBUTTON検出後その文字列が表示されてるか確認する、というようにボタンクリックによる変更を検出できるような仕組みを作ることになると思います

No.3545 2017/02/23(Thu) 12:30:16

Re: / ランナ
ありがとうございます。ほかのやり方を試してみたいと思います。
No.3554 2017/02/24(Fri) 18:53:41
saveimgについて / カイ
お世話になります。

saveimgの幅や高さについて伺いたいことがあります。
例えば座標1〜10の範囲でキャプチャする時、幅を9にして1+9=10=右の座標にするのでしょうか。
それとも実際にキャプチャする範囲として幅10を入力するのでしょうか。

細かいことで申し訳ないのですがよろしくお願いします。

No.3541 2017/02/23(Thu) 09:41:05

Re: saveimgについて / stuncloud
幅は幅です
欲しい幅が10ピクセルなら10です
高さも同様

No.3543 2017/02/23(Thu) 12:02:57

Re: saveimgについて / カイ
質問に答えて頂きありがとうございます。
迷った箇所か解決しました。

No.3546 2017/02/23(Thu) 13:39:11
CLK_ITEMコマンドについていくつか / Jun金
お世話になっております。

CLK_ITEMコマンドについていくつか質問があります。

1.CLK_LSTVEWとCLK_ACCの違いは何ですか?
最初の画面上でファイルを実行するときは上記二つのコマンドでClickが可能ですが
NotepadのCtrl+Oを実行してFileを選択するのはCLK_LSTVEWで不可能です。

2.NotepadのCtrl+Oで様々なファイルリスト中見えないファイルを選択することはできないんですか?

以上、よろしくお願いいたします。

No.3542 2017/02/23(Thu) 11:07:09

Re: CLK_ITEMコマンドについていくつか / stuncloud
> 1.CLK_LSTVEWとCLK_ACCの違いは何ですか?
CLK_LSTVEWはリストビューのアイテムをクリックするためのものですね、リストビューというのはエクスプローラの画面のように行と列があるものがだいたいそうです
CLK_ACCは非常に大雑把に言うとクリックできそうなもの全部が対象 (厳密にはそういうことじゃないんですが
それぞれgetitemのITM_LSTVEWとITM_ACCCLKで一覧を取得できます

で、メモ帳のCtrl+oの「開く」画面ですが

id = exec("notepad.exe")
sckey(id, VK_CTRL, VK_O)
sleep(1)
for item in getitem(getid("開く"), ITM_LSTVEW, -1)
 print item
next

としてみましたがひとつも表示されないのでリストビューとして処理できないのかもしれません
なので処理は遅くなりますがCLK_ACCを使うしかないかもです

> 2.NotepadのCtrl+Oで様々なファイルリスト中見えないファイルを選択することはできないんですか?
非表示のものは無理だと思います


それと、メモ帳でファイルを開くのであれば

exec("notepad.exe C:\hoge.txt")

のようにexecでファイルパスを指定するという方法もあります

No.3544 2017/02/23(Thu) 12:17:19
繰り返し動作ができなくなりました。 / ちっき
UWSCproバージョン 5.2.3.0 OSはWindows7UltimateX64
ブラウザはGoogle Chrome 56.0.2924.87 (64-bit)です。

UWSCを使い、エクセルのリストから自動的に携帯番号を選択してコピーし、
mysmsというアプリとの組み合わせでショートメールを繰り返し送信する操作を行って
います。

mysmsへの番号コピー&ペースト、メッセージ本文をメモ帳からコピー&ペースト、送信をする
という動作は正常に作動しているのですが、繰り返し実行を行うために、以下のスクリプトを
使っています。

path = "D:\ホームページ\uwsc523\sapuriCM.UWS"
interval = 5 // 実行間隔

while true
select slctbox(slct_btn, interval, "終了しますか?<#CR>このウィンドウを閉じても終了します", "はい")
case -1, SLCT_1
exitexit
case 0
exec("<#DBL>"+GET_UWSC_DIR+"\UWSC.exe<#DBL> <#DBL>"+path+"<#DBL>", true)
selend
wend

ところが、突然、繰り返し処理ができない状態(一回ずつ実行なら動く)となっていて
困っています。

恐れ入りますが、ご教示頂ければ幸いです。
よろしくお願いいたします。

No.3539 2017/02/22(Wed) 18:31:39

Re: 繰り返し動作ができなくなりました。 / ちっき
自己レスです。解決しました。元々の動作記録を作り直したら、動作するようになりました。
お騒がせしました。

No.3540 2017/02/22(Wed) 18:37:57
2つの上下ウィンドウをそれぞれ指定したキーを押すと少しスクロールバーを下げる方法 / ジンギスカン
2つのIDで上下にウィンドウを並べています。GETKEYSTATEでaキーを押すと上のウィンドウのスクロールバーを
少し下げ、bキーを押すと下のウィンドウのスクロールバーを下げるようにしたいです。常に管理中みたいな形で指定キーを押すとスクロールバーを下げたいです。)
下記のスクリプトで2つのIDで上下にするところまではできているのですが、そこからどうしたらいいかが分かりません。SETSLIDERでスクロールバーの値を設定するとありますが、いまいちこの使い方が分かりません。

id1=getid("Internet Explorer","IEFrame")
id2=GETID(GET_ACTIVE_WIN)

h = G_SCREEN_H / 2
acw(id1, 0, 0, G_SCREEN_W, h)
acw(id2, 0, h, G_SCREEN_W, h)

// 戻値 = SETSLIDER( ID, 値, [番号] )

No.3514 2017/02/20(Mon) 12:01:11

Re: 2つの上下ウィンドウをそれぞれ指定したキーを押すと少しスクロールバーを下げる方法 / stuncloud
> SETSLIDERでスクロールバーの値を設定するとありますが、いまいちこの使い方が分かりません。
現在位置から一定量動かす、という場合はGETSLIDERとの複合技になりますね

current_pos = getslider(id) // 現在の位置
setslider(id, current_pos + 5) // 5の距離分動かす

例なので5としましたが、状況に合わせて値を調整してください
スクロールバーが複数ある場合は「番号」の引数を指定します
2個目のスクロールバーであれば

current_pos = getslider(id, 2)
setslider(id, current_pos + 5, 2)

となります
あとはキーを押したときの動作ですが、こういった場合SETHOTKEYが楽ですね

sethotkey(VK_A, 0, ScrollA) // ここではVK_Aとしましたが必要に応じて操作するキーを指定してください
sethotkey(VK_B, 0, ScrollB)

while status(id1, ST_ISID) and status(id2, ST_ISID) // 対象ウィンドウのどちらかが閉じられるまで待つ
 sleep(0.1)
wend

procedure ScrollA()
 // Aのスクロール処理
fend

procedure ScrollB()
 // Bのスクロール処理
fend

関数内でもid1、id2を使うでしょうからこれらの変数はpublicにすると良いでしょう

No.3520 2017/02/20(Mon) 16:45:35

Re: 2つの上下ウィンドウをそれぞれ指定したキーを押すと少しスクロールバーを下げる方法 / ジンギスカン
stuncloud様、ありがとうございます。stuncloud様のスクリプトを参考にやってみたのですが、うまくいきません。まずは、id1をaキー押す事で、スクロールバーを5下げたいと思ってます。なにか良い方法はないでしょうか?sethotkey自体の組み方がいまいち分かりません。

id=GETID(GET_ACTIVE_WIN)
sethotkey(VK_A, 0, ScrollA(id)) // ここではVK_Aとしましたが必要に応じて操作するキーを指定してください

while status(id, ST_ISID) // 対象ウィンドウのどちらかが閉じられるまで待つ
 sleep(0.1)
wend

procedure ScrollA(id)
current_pos = getslider(id) // 現在の位置
setslider(id, current_pos + 5) // 5の距離分動かす
HOTKEY_VK
fend

No.3523 2017/02/20(Mon) 20:17:23

Re: 2つの上下ウィンドウをそれぞれ指定したキーを押すと少しスクロールバーを下げる方法 / ジンギスカン
上の続きです。
エラーでVK_Aが定義されていませんと表示されます。

No.3524 2017/02/20(Mon) 20:20:52

Re: 2つの上下ウィンドウをそれぞれ指定したキーを押すと少しスクロールバーを下げる方法 / MM
HELPでSETHOTKEYをお調べになりましたでしょうか。
例を見ないとなかなか判らず、見ても判らない言外の部分は実際に試してみる必要があります。
HELPの例を見ると第3項は文字列として与えなくてはならず、書式上引数を指定できませんが、
引数不可は仕様と思われますので、値のやり取りはグローバル変数を介する必要があります。

以下蛇足ですが慣れないと誤解しやすいところとしては、修飾子キーが要らない場合でも第2項の存在自体は必要で、0かEMPTYを指定、またはsethotkey(VK_A, , "引数なし関数名")と書きます。
修飾子キーが複数指定可とありますがその場合、項数を増やすのではなくビット演算のORを行います。ORを使用した定数複数指定は普及している他のプログラミング言語では普通なのですが初学者ですとわかりづらく、HELPではsethotkeyと関係ないところに載っていますが、複数指定可というキーワードでHELPを諦めず探し回るとMsgBoxなどで使われている例が見つかります。検索の仕方は検索TABで検索後、右側の本文の中をクリックしてから[Ctrl]+{F]を押して更に検索する必要があります…

No.3525 2017/02/20(Mon) 22:00:56

Re: 2つの上下ウィンドウをそれぞれ指定したキーを押すと少しスクロールバーを下げる方法 / ジンギスカン
MM様、ありがとうございます。下記をHELPで確認できました。

SETHOTKEYによる キーチェック
for k = VK_A to VK_F
  SETHOTKEY(k, ,"fuckey")     // AからFまでキー登録
next
SETHOTKEY( ,MOD_CONTROL, "fucx")  // CTRLキー の登録
SETHOTKEY(VK_A, MOD_SHIFT, "fucx") // Shift + A の登録
Sleep(100)
for k = VK_A to VK_F
  SETHOTKEY(k)          // 解除
next
// End
Procedure fuckey()
  print CHR(HOTKEY_VK) + "が押された"
Fend
Procedure fucx()
  if HOTKEY_MOD=MOD_CONTROL then print "CTRLが押された"
  if (HOTKEY_VK=VK_A) and (HOTKEY_MOD=MOD_SHIFT) then print "Shift + Aが押された"
Fend


それを参考にしてやってみると確かに、私のやっていた事、間違ってました。
できたスクリプトが下記になります。

public id
id=GETID(GET_ACTIVE_WIN)
sethotkey(VK_A, ,"ScrollA") // ここではVK_Aとしましたが必要に応じて操作するキーを指定してください

while status(id, ST_ISID) // 対象ウィンドウのどちらかが閉じられるまで待つ
 sleep(0.1)
wend

procedure ScrollA(id)
print CHR(HOTKEY_VK) + "が押された"
current_pos = getslider(id) // 現在の位置
setslider(id, current_pos + 5) // 5の距離分動かす
fend

これで1つのウィンドウでの処理ができたので後は、2つ目のウィンドウも同じようできるか引き続き
作成していこうと思います。

ありがとうございます、助言助かりました。

No.3526 2017/02/21(Tue) 00:28:56

Re: 2つの上下ウィンドウをそれぞれ指定したキーを押すと少しスクロールバーを下げる方法 / stuncloud
> HELPの例を見ると第3項は文字列として与えなくてはならず、
ここは僕の例のミスですね…申し訳ないです

最初の例ではふたつの関数を作りそれぞれの処理をさせる方法でしたが
HOTKEY_VKを使ってひとつの関数で複数の処理に分けることもできます

public id1, id2 // これらには適宜ウィンドウのIDを代入してください
sethotkey(VK_A, 0, "Scroll")
sethotkey(VK_B, 0, "Scroll")

procedure Scroll()
 select HOTKEY_VK
  case VK_A
   id = id1 // Aが押されたらid1を処理
  case VK_B
   id = id2 // Bが押されたらid2を処理
 selend
 current_pos = getslider(id)
 setslider(id, current_pos + 5)
fend

No.3527 2017/02/21(Tue) 09:50:40

Re: 2つの上下ウィンドウをそれぞれ指定したキーを押すと少しスクロールバーを下げる方法 / ジンギスカン
IEでのサイト上では希望通りのスクロールバーを下げる事ができたのですが、サブライムエディターでのスクロールバーではまったく反応しません。また、Googlechrome上でも反応しません。何かよいお知恵拝借できないでしょうか?id=GETID(GET_ACTIVE_WIN)でやっているので、いけると思ったですが・・・。引き続き色々試してみます。
No.3528 2017/02/21(Tue) 12:45:24

Re: 2つの上下ウィンドウをそれぞれ指定したキーを押すと少しスクロールバーを下げる方法 / ジンギスカン
CTRLで押すとスクロールバーを下げる処理を試してみましたが、うまくいきません。
helpを読み替えてやったのでいけそうなんですが、希望通りの処理をしてくれません。
どこが間違っているのでしょうか?

public id
id=GETID(GET_ACTIVE_WIN)
SETHOTKEY( ,MOD_CONTROL, "fucx")  // CTRLキー の登録

while status(id, ST_ISID) // 対象ウィンドウのどちらかが閉じられるまで待つ
 sleep(0.1)
wend

Procedure fucx()
  if HOTKEY_MOD=MOD_CONTROL then print "CTRLが押された"
current_pos = getslider(id) // 現在の位置
setslider(id, current_pos + 3) // 3の距離分動かす
Fend

No.3529 2017/02/21(Tue) 13:23:55

Re: 2つの上下ウィンドウをそれぞれ指定したキーを押すと少しスクロールバーを下げる方法 / ジンギスカン
引き続き試してスクリプト。これをうまくいきません。

public id
id=GETID(GET_ACTIVE_WIN)
SETHOTKEY(MOD_CONTROL, ,"fucx")  // CTRLキー の登録

while status(id, ST_ISID) // 対象ウィンドウのどちらかが閉じられるまで待つ
 sleep(0.1)
wend

Procedure fucx(id)
  if HOTKEY_MOD=MOD_CONTROL then print "CTRLが押された"
current_pos = getslider(id) // 現在の位置
setslider(id, current_pos + 3) // 3の距離分動かす
Fend

No.3530 2017/02/21(Tue) 13:28:53

Re: 2つの上下ウィンドウをそれぞれ指定したキーを押すと少しスクロールバーを下げる方法 / stuncloud
・スクリプト実行時のアクティブウィンドウが操作対象でない可能性がある
タイトルを指定してIDを取るようにしましょう
・スクロールバーが複数あって操作したいものが操作されていない可能性がある
番号を指定してみましょう
・SETSLIDERでは操作できないスクロールバー
この場合はどうしようもないですね

※以下追記 13:53

> サブライムエディター
Sublime Textでしょうか?
手元のSublime Text 3で試したところ
スクロールバーを動かすことは可能、ただしフォーカスの合っているペインのみ
サイドバーを表示していたり、複数レイアウトにしていた場合でそれぞれにスクロールバーがある場合、フォーカスがある(操作中、編集中である)部分のスクロールバーしか動かせないようです

No.3531 2017/02/21(Tue) 13:39:39

Re: 2つの上下ウィンドウをそれぞれ指定したキーを押すと少しスクロールバーを下げる方法 / miles
> サブライムエディターでのスクロールバーではまったく反応しません。
setslider関数の戻値で(TRUE:正常, FALSE:処理不能)を判断してください。
SETHOTKEY関数も念のため、戻値を見た方がいいですよ。
同じプログラムを動かした場合、HOTKEYの重複設定できませんから。

> Googlechrome上でも反応しません。
Googlechromeなら下記でスクロールはできました。
サブライムエディターはないので…

ret = setslider(id, current_pos + 5) // 5の距離分動かす
if ret = false then sckey(id,VK_DOWN,VK_DOWN,VK_DOWN,VK_DOWN,VK_DOWN)

No.3532 2017/02/21(Tue) 14:02:23

Re: 2つの上下ウィンドウをそれぞれ指定したキーを押すと少しスクロールバーを下げる方法 / ジンギスカン
stuncloud様、返信ありがとうございます。
>タイトルを指定してID
タイトルIDやSublime Textで試しています。

>Sublime Textでしょうか?
はい。Sublime Text最新版です。

>スクロールバー
1つにしています。

>フォーカスの合っているペイン
入力画面にしています。

>サイドバーを表示
サイドバーを非表示にしています。

下記のスクリプトで試しています。

public id
id=getid("C:Desktop\1.txt (uwsプロジェクト) - Sublime Text (UNREGISTERED)","PX_WINDOW_CLASS")
sethotkey(VK_A, ,"ScrollA") // ここではVK_Aとしましたが必要に応じて操作するキーを指定してください

while status(id, ST_ISID) // 対象ウィンドウのどちらかが閉じられるまで待つ
 sleep(0.1)
wend

procedure ScrollA(id)
print CHR(HOTKEY_VK) + "が押された"
current_pos = getslider(id) // 現在の位置
setslider(id, current_pos + 3) // 3の距離分動かす
fend

No.3533 2017/02/21(Tue) 14:45:27

Re: 2つの上下ウィンドウをそれぞれ指定したキーを押すと少しスクロールバーを下げる方法 / ジンギスカン
mile様、返信ありがとうございます。下記のスクリプトでしてもサブライムエディターまったく反応がありません。GoogleChromeはできました。

>setslider関数の戻値で(TRUE:正常, FALSE:処理不能)を判断してください。
setslider関数の戻値はRUEと表示されています。

>SETHOTKEY関数も念のため、戻値を見た方がいいですよ。
Aが押されたと表示されます。

>ret = setslider(id, current_pos + 5) // 5の距離分動かす
if ret = false then sckey(id,VK_DOWN,VK_DOWN,VK_DOWN,VK_DOWN,VK_DOWN)

Googlechromeで無事できました、これで一つできる事が増えましたありがとうございます。

下記のスクリプトで試しましたが、サブライムエディターまったくスクロールバー反応しません。
プラグインの可能性ですかね。うーんなかなか難しいです。

public id
id=getid("Sublime Text")
sethotkey(VK_A, ,"ScrollA") // ここではVK_Aとしましたが必要に応じて操作するキーを指定してください

while status(id, ST_ISID) // 対象ウィンドウのどちらかが閉じられるまで待つ
 sleep(0.1)
wend

procedure ScrollA(id)
print CHR(HOTKEY_VK) + "が押された"
current_pos = getslider(id) // 現在の位置
ret = setslider(id, current_pos + 5) // 5の距離分動かす
print "ret="+ret
if ret = false then sckey(id,VK_DOWN,VK_DOWN,VK_DOWN,VK_DOWN,VK_DOWN)
fend

No.3534 2017/02/21(Tue) 15:20:14

Re: 2つの上下ウィンドウをそれぞれ指定したキーを押すと少しスクロールバーを下げる方法 / ジンギスカン
サブライムエディターの画像が下記です。
https://gyazo.com/6fa0e8041345415d5532a158eeceeb2c

No.3535 2017/02/21(Tue) 15:27:54

Re: 2つの上下ウィンドウをそれぞれ指定したキーを押すと少しスクロールバーを下げる方法 / stuncloud
画像を見ると横スクロールバーもありますね
僕の環境だと1が横で2が縦でしたが

スクロールバーが2つになる場合でもどちらが縦か調べて(SLD_BAR)、必ず縦のものを動かすようにします

if getslider(id, 1, SLD_BAR) = 1 then
 n = 1
elseif getslider(id, 2, SLD_BAR) = 1 then
 n = 2
endif
setslider(id, getslider(id, n) + 100, n)

サイドバーなしで一面しか開いてない状態にして
・縦スクロールバーのみ
・縦横どっちもある場合
で動作確認済みです
あと5だと単純に動いた量が小さすぎて気付かないので100動かすようにしてみました

No.3536 2017/02/21(Tue) 15:52:19

Re: 2つの上下ウィンドウをそれぞれ指定したキーを押すと少しスクロールバーを下げる方法 / ジンギスカン
stuncloud様、できました、サブライムエディターで動いた時めっちゃ感動しました。
今回何度も助けて頂きありがとうございました。
自分ひとりでは、絶対にできなかったスクリプトなので、助かりました。

No.3537 2017/02/21(Tue) 17:51:11
フォーム画面の縦スクロールバーの制御 / まるぱ
CreateFormで作ったフォーム画面、
これで縦のスクロールバーが表示されます。

このスクロールバーの位置をGETSLIDERで取得できません。

スクロールバーの位置を読込み、あとでその位置にスクロールさせることをしたいのですが、
いいアイデアありますでしょうか?

よろしくお願い致します

No.3506 2017/02/18(Sat) 22:21:11

Re: フォーム画面の縦スクロールバーの制御 / routa
普通にDHTMLやJavaScriptが使えますよ。
.Document.documentElement.scrollTop
.Document.parentWindow.scrollTo(0, 100)

No.3507 2017/02/19(Sun) 19:25:07

Re: フォーム画面の縦スクロールバーの制御 / まるぱ
routaさん、アドバイスありがとうございます。
試しましたが、取得できるスクロールの位置が0になってしまいます...
何か間違っているんでしょうか、ちょっと考えます。

No.3508 2017/02/19(Sun) 21:00:34

Re: フォーム画面の縦スクロールバーの制御 / routa
こっちかも
.Document.body.scrollTop

No.3509 2017/02/19(Sun) 23:20:30

Re: フォーム画面の縦スクロールバーの制御 / まるぱ
routaさん、
IE6以上は
.Document.documentElement.scrollTop
とのことで、やってみたらできました。
ヒントありがとうございました。

No.3522 2017/02/20(Mon) 18:03:37
正規表現で抜き出した分から、数字のみを抽出する方法 / ゆうい
サイトのソースをinnerhtmlで取得し、正規表現でIDの数字のみを抜き出したいですが、ExecuteからFOR文でMatches.Item(i).Valueで取得し、FPUTでファイルに書き出し、それをfgetで全テキスト取得し、chgmojでいらないIDの前後を削除しています。もっとダイレクトに正規表現のみでIDのみを抜き出す方法ないでしょうか?

【サイトソース】
テキスト1
id="inline_1806">
テキスト2
id="inline_1206">
テキスト3
id="inline_1156">

【正規表現で検索できている分】
id="inline_1806">
id="inline_1206">
id="inline_1156">

【希望処理】
1806
1206
1156

【試してスクリプト】

文字列全体=IE.document.body.innerhtml


Public regvb=CREATEOLEOBJ("VBScript.RegExp")

// fid=""
file = FOPEN("Desktop\wp.txt", F_WRITE)


Pattern="inline_\d{1,4}"
Matches=regvb_Execute(文字列全体, Pattern)

for i = 0 to Matches.count-1
FPUT(file, Matches.Item(i).Value, i+1)
next

zenn=fget(file, F_ALLTEXT)

tesaa=chgmoj(zenn, "id=<#DBL>inline_", "")
tesaa=chgmoj(tesaa, "<#DBL>>", "")
tesaa=chgmoj(zenn, "inline_", "")
FPUT(file, tesaa,F_ALLTEXT)
FPut(file, Join(Split(FGet(file, F_ALLTEXT), "<#CR>"), "<#CR>", TRUE), F_ALLTEXT)

fclose(file)
Function regvb_Execute(str, Pattern, IgnoreCase=TRUE, Global=TRUE)
regvb.IgnoreCase=IgnoreCase
regvb.Global=Global
regvb.Pattern=Pattern
Matches=regvb.Execute(str)
Result=Matches
Fend

No.3511 2017/02/19(Sun) 23:39:24

Re: 正規表現で抜き出した分から、数字のみを抽出する方法 / しき
//SubMatches コレクション
//https://msdn.microsoft.com/ja-jp/library/cc392216.aspx
Pattern="inline_(\d{1,4})"
Matches=regvb_Execute(文字列全体, Pattern)
for i = 0 to Matches.count-1
  print Matches.Item(i).SubMatches(0)
next

No.3512 2017/02/20(Mon) 00:30:15

Re: 正規表現で抜き出した分から、数字のみを抽出する方法 / ゆうい
しき様、ありがとうございます。こんなに便利なやり方あるんですね。
_(\d{1,4})、()でくくってサブマッチさせるやり方とても簡単で使いやすいです。

No.3513 2017/02/20(Mon) 08:54:10

Re: 正規表現で抜き出した分から、数字のみを抽出する方法 / しろまさ
慣れたらreplaceも試して下さい。速くなりますよ。

TextBlock aaa
テキスト1
id="inline_1806">
テキスト2
id="inline_1206">
テキスト3
id="inline_1156">
EndTextBlock

list = regReplace(aaa, ".*inline_(\d+).*|.*\r\n", "$1")
MsgBox(list)

// 正規表現 置換
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.3515 2017/02/20(Mon) 12:19:53

Re: 正規表現で抜き出した分から、数字のみを抽出する方法 / stuncloud
// 正規表現使わんでもいい気がします

for elem in IE.document.querySelectorAll("*[id]") // id属性のあるエレメントを列挙
 n = replace(elem.id, "inline_", "")
 if chknum(n) then
  print n // 数字っぽいのだけprintする
 endif
next

No.3516 2017/02/20(Mon) 12:27:46

Re: 正規表現で抜き出した分から、数字のみを抽出する方法 / ゆうい
しろまさ様、回答ありがとうございます。しろまさ様のスクリプトでもできました。
パターンで、|.*\r\n", "$1"この部分が今の自分の実力では理解ができません。
|が論理和、\r\nの \nが改行にマッチ、\rがキャリッジリターン(行頭復帰)にマッチとなっていますが、なかなか難しいですね。

No.3517 2017/02/20(Mon) 15:37:19

Re: 正規表現で抜き出した分から、数字のみを抽出する方法 / ゆうい
stuncloud様、回答ありがとうございます。以下のスクリプトで試したのですが、このような表示がされできませんでした。intenet explorerは動作を停止しましたと表示、プログラム終了のボタンが表示になります。ワードプレスプレスの管理画面のソースのID取得で試しています。

[試したスクリプト]
URL1="http://b.jp/nan/"
TRY
   IE = CREATEOLEOBJ("InternetExplorer.Application")
  EXCEPT
   EXEC("C:\Program Files\Internet Explorer\iexplore.exe")
   IE = GETACTIVEOLEOBJ("InternetExplorer.Application")
  ENDTRY
IE.visible = true
IE.navigate(URL1)

REPEAT
SLEEP(0.1)
UNTIL !IE.busy AND IE.readystate = 4

for elem in IE.document.querySelectorAll("*[id]") // id属性のあるエレメントを列挙
 n = replace(elem.id, "inline_", "")
 if chknum(n) then
  print n // 数字っぽいのだけprintする
 endif
next

No.3518 2017/02/20(Mon) 15:43:08

Re: 正規表現で抜き出した分から、数字のみを抽出する方法 / stuncloud
あれれ、なんでしょうね…
すいません思いつきで書いたので実際に試してないんですが、IEが停止って大事ですね
理屈の上ではそういう書き方でも抽出できるよ、という例のつもりだったのですが…
もうしわけない、あとで時間取れたら確認してみます

No.3519 2017/02/20(Mon) 16:30:53

Re: 正規表現で抜き出した分から、数字のみを抽出する方法 / stuncloud
> intenet explorerは動作を停止しましたと表示、プログラム終了のボタンが表示になります。
こちらの環境でも再現しました、原因はわかりません
僕の書いたサンプルは使用しないでください

No.3521 2017/02/20(Mon) 17:54:24
2つのフラッシュの操作を自動化したい! / あの
一つのフラッシュで基本操作(4ヶ所クリック)をして、その結果によって、もう一つのフラッシュの3つのボタンのうちのどれかを押すような、比較的単純な作業を自動化したいです。
どなたか、お仕事として(報酬5万円)
チームビューアーなどの画面共有をしながら説明しつつ、作っていただくか、もしくは作り方をレクチャーしていただけないでしょうか?
よろしくお願いします。

No.3510 2017/02/19(Sun) 23:34:48
正規表現でパターン検索した文字列に対して、後ろに指定の文字列を加える方法 / ゆうい
textblockの中の文字列を正規表現のパターンで検索したのが下記。
<img style="width: 600px;" src="//" alt="1" />
<img style="width: 600px;" src="//" alt="2" />

これを下記にする方法について何か良い方法ないでしょうか?

希望処理
<img style="width: 600px;" src="//" alt="1" /><div class=ms2></div>
<img style="width: 600px;" src="//" alt="2" /><div class=ms2></div>

試しているスクリプト
textblock t_Text
テキスト1
<img style="width: 600px;" src="//" alt="1" />
テキスト2
<img style="width: 600px;" src="//" alt="2" />
endtextblock

print (regReplace(t_Text, "<img style=.+", "<img style=.+"+"<div class=<#DBL>ms2<#DBL>></div>"))

// 正規表現 置換
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.3501 2017/02/17(Fri) 21:53:47

Re: 正規表現でパターン検索した文字列に対して、後ろに指定の文字列を加える方法 / しき
//後方参照を使う
s = regReplace(t_Text, "(<img style=[^\r\n]+)", "$1<div class=<#DBL>ms2<#DBL>></div>")
msgbox(s)

No.3502 2017/02/18(Sat) 04:28:46

Re: 正規表現でパターン検索した文字列に対して、後ろに指定の文字列を加える方法 / しろまさ
私は1行にタグが複数あることを前提として最短マッチを使います。
print (regReplace(t_Text, "(<img.+?>)", "$1<div class=<#DBL>ms2<#DBL>></div>"))

No.3503 2017/02/18(Sat) 10:51:15

Re: 正規表現でパターン検索した文字列に対して、後ろに指定の文字列を加える方法 / ゆうい
しき様、ご回答ありがとうございます。希望通りの処理ができました。
後方参照って便利なものがあるなんて知らなかったです。

No.3504 2017/02/18(Sat) 11:29:26

Re: 正規表現でパターン検索した文字列に対して、後ろに指定の文字列を加える方法 / ゆうい
しろまさ様、ご回答ありがとうございます。.+?で最短マッチ勉強になります。
No.3505 2017/02/18(Sat) 11:30:48


 過去ログ(〜2017/03/22)・検索ツール


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