[ 掲示板に戻る ]

過去ログ閲覧モード

クイズ / satocha
クイズです。

下のスクリプトを実行すると何が表示されるでしょうか。実行せずに考えて、そのあと答え合わせしてみてください。

※エラーになって動かないと思った方、鋭いですが不正解です。

fukidasi("Quiz 1")
dim $abc[]="a","b","c"
for abc in $abc
 msgbox( abc )
next

fukidasi("Quiz 2")
dim abcd[]="a","b","c","d"
for $abcd in abcd
 msgbox( $abcd )
next

No.4352 2017/08/24(Thu) 16:06:45

Re: クイズ / stuncloud
ははー、なるほど
$defだといいけど$ghiじゃだめなやつですね

2は正解しましたが1は不正解でした
forinのときだけ配列として展開されるんですね、謎い…
// msgbox($abc) だと$abcが表示される
2のほうは
dim 1 = 2
と同じような感じですかね
面白いけどシンタックスエラーで落として欲しいかな


以下ぼくが以前見つけた配列ネタ

dim [] = "x", "y", "z"

for item in []
 print item
next

for i = 0 to length([]) - 1
 print [i]
next

No.4353 2017/08/24(Thu) 16:40:57

Re: クイズ / miles
最近気づいたこと
//UWSCサンプル
// IE にてファイルのダウンロード処理  #N58
id = GETID("名前を付けて保存", "#32770", 5)
if id < then Exit

これって エラーにならないし、then にもならないよね?

No.4354 2017/08/24(Thu) 17:30:49

Re: クイズ / しゅん
おおお。
PowerShellをよく使っててうっかりやりがちな話ですね。
Quiz1/2ともにヒントがあったので正解しました。

そういえば、3年ほど前にこんなクイズを掲示板に出して遊んでました。
http://d.hatena.ne.jp/junjun777/20140623/uwsc_bad_know_how_quiz

No.4356 2017/08/24(Thu) 18:56:41

Re: クイズ / stuncloud
> これって エラーにならないし、then にもならないよね?
右辺空はEMPTYで評価されるやつだ!
if id < EMPTY then
と同じ動作になります
どのみち(書いてないけど)elseに行きますね

# EMPTYが0と評価されてれば通ってけど別にそういう意図じゃなく単に書き漏れなんでしょうね…

No.4357 2017/08/24(Thu) 18:58:41

Re: クイズ / umiumi
エラーになるよう対処します。
No.4359 2017/08/25(Fri) 01:23:21

Re: クイズ / satocha
stuncloudさんのdim [] にはびっくりです。

しゅんさんのブログ、楽しく拝読しています(と、更新をおねだり)。
Q3は難しくて、苦闘中です。大勢の方が、正解されていて驚きました。

milesさんのif文右辺値省略も知りませんでした。

皆さん、使い込んでますね。

作者様の回答はどちらの話でしょうか。いずれにせよ、次の更新を楽しみにしています。

>面白いけどシンタックスエラーで落として欲しいかな
> これって エラーにならないし、then にもならないよね?

No.4360 2017/08/25(Fri) 05:23:45
整理したい / kuma
これを
井上 1
小川 1
下村 3
西村 1
西村 1
小川 3
小川 1

こうしたいです
小川 5
下村 3
西村 2
井上 1

よろしくお願いします

No.4348 2017/08/24(Thu) 04:14:32

Re: 整理したい /  
足せばいい。
No.4350 2017/08/24(Thu) 08:17:23

Re: 整理したい / satocha
足しただけではダメで並び替えないと。

数字が2ケタ以上のとき、数値順に並んでいることが確認できるように、データの数字を変更しました。

hashtbl h_data
for line in split( data, "<#CR>" )
 name =token(" ",line)
 point =val(line)
 h_data[ name ]=val(h_data[ name ] + point)
next

str=""
for ky in h_data
str =str+"<#CR>" + h_data[ky] + "," + ky + " " + h_data[ky]
next
ary =split(trim(str), "<#CR>" )
qsort( ary, qsrt_naturald )
str =""
for line in ary
 token(",",line)
 str =str+line+"<#CR>"
next
msgbox( trim( str ) )

textblock data
井上 100
小川 1
下村 83
西村 1
西村 1
小川 3
小川 1
endtextblock

UWSCは結構な行数になるけど、powershellでやるとかなりコンパクトになります。

msgbox( powershell( ps ) )
textblock ps
$data=@"
井上 100
小川 1
下村 83
西村 1
西村 1
小川 3
小川 1
"@|convertFrom-CSV -header "name","value" -delimiter " "
$sum=@{};$data|%{$sum.($_.name)+=($_.value-0)}
$sum.GetEnumerator()|sort Value -descending
endtextblock

No.4351 2017/08/24(Thu) 09:08:21

Re: 整理したい / kuma
ありがとうございます。
処理速度的に長い方にしました。

No.4355 2017/08/24(Thu) 17:58:45
LINEのメッセージを取得したい! / ano
まったくの初心者です。
PC用のLINEアプリから新しく着たメッセージを取得したいのですが、何かいい方法はないでしょうか?
ご教授いただけましたら幸いです。

No.4349 2017/08/24(Thu) 08:13:50
CREATEFORM()かstatus()のいずれかで、大きさが間違っていると思われます。 / 森
下記スクリプトを実行した際、段々とウインドウが小さくなっていきますので、
・CREATEFORM()した時に指定よりも小さくなっている
・status()で取得した値が実際よりも小さい
のいずれかになっていると思います。
------------------------------------------
W = 300
H = 300
for i = 1 to 10
 CREATEFORM("about:blank", "TEST" , TRUE ,, W, H)
 id = getId(GET_FORM_WIN)
 W = status(id , ST_WIDTH)  // フォームウィンドウの幅
 H = status(id , ST_HEIGHT) // フォームウィンドウの高さ
 sleep(1)
next
------------------------------------------
UWSC Pro Ver 5.3.0.2
Windows10です。

No.4344 2017/08/22(Tue) 17:49:40

Re: CREATEFORM()かstatus()のいずれかで、大きさが間違っていると思われます。 / umiumi
対処します。
No.4347 2017/08/24(Thu) 00:29:03
IEのタイトルバーをクリックする方法 / ゆう
IEのタイトルバーをクリックする方法ないでしょうか?
clkitemでできるような気がするのですがいまいち使い方が分かりません。
btn関数で直接、座標を指定してやるのも考えたのですがそれよりも精度の高いやり方ないでしょうか?

No.4340 2017/08/22(Tue) 15:31:42

Re: IEのタイトルバーをクリックする方法 / stuncloud
> clkitemでできるような気がするのですがいまいち使い方が分かりません。
ちょっとダメな気がします

> btn関数で直接、座標を指定してやる
しかないでしょう
タイトルバーのサイズってそうそう変わらないのでstatus(id, ST_X)とstatus(id, ST_Y)に少し数値を足してやれば精度は十分なんじゃないでしょうか
以下でだいたいタイトルバーのまんなかをクリックします

x = status(id, ST_x) + status(id, ST_WIDTH) / 2
y = status(id, ST_Y) + 10
// mmv(x, y) // ポインタで座標確認
btn(LEFT, CLICK, x, y)

# しかしなぜタイトルバーをクリックしたいんでしょうか…?

No.4342 2017/08/22(Tue) 16:18:45

Re: IEのタイトルバーをクリックする方法 / ゆう
stuncloud様、希望通りの処理ができました、ありがとうございます。
IEのタイトルバーをクリックする事でページの下にスクロールしたいからです。
タイトルバーよりも下だとリンクがあった場合リンク先に飛んでしまいますので、タイトルバーなんです。ctrlwinでアクティブしてもうまくいかなかったので、タイトルバークリックがベストです。

No.4345 2017/08/22(Tue) 20:23:48
Firefoxでリンクの表示から取得したい / MTDT
Firefoxの最新版でサイトを開いて、ページのリンクの上にマウスカーソルを置くと、左下にそのURLが表示されるので、それを取得したいです

POSACC関数の、
全てのモードで
IDは、0 と、GETID("Mozilla Firefox") の 2つ
全部で、20パターンを試してみましたが取得できませんでした

あの表示というのは、特殊なものなのでしょうか

URLは、右クリックから取得できますが
左下に表示されるものを取得したいです

もしくは、IEやChromeでも同じように左下に表示されるので、こちらの2つなら分かる、という方でもお願いします

No.4326 2017/08/19(Sat) 05:22:38

Re: Firefoxでリンクの表示から取得したい / stuncloud
IEならばステータスバーを表示しているのが条件になりますが、getitem(id, ITM_STATUSBAR) すれば ALL_ITEM_LIST[0] がリンクにマウスオーバーで表示されるURLです

// URLが表示されたらprintする
while TRUE
 if getitem(id, ITM_STATUSBAR) then
  if length(ALL_ITEM_LIST[0]) then
   print ALL_ITEM_LIST[0]
   break
  endif
 endif
 sleep(0.1)
wend

No.4343 2017/08/22(Tue) 16:36:07
WEBサイトからファイルのダウンロード動作が不安定 / VBA-IE
EXCEL VBAでWEBサイトからCSVファイルをダウンロード、名前を付けて保存させる処理をさせたいと思っています。
具体的には、?@CSVダウンロードボタンをクリックした後、?Aファイルを開く 保存 キャンセル の表示後、?B保存の右横の▼をクリックし、?C保存、名前を付けて保存、保存して開くを表示後、?D名前を付けて保存をクリックする処理です。
ネットで調べたところ、図の様な通知バー表示以降の処理(前記?A以降)はVBAのみでは実現難しく、UWSCを使う方法を薦めるとの回答を見つけ、UWSCサンプルにあった「IE にてファイルのダウンロード処理  #N58」を参考に下記の通りスクリプトを組んで実行していますが、これでも動作が不安定で困っています。

<問題点>
正常にダウンロードでき保存できる場合と、UWSCの配列オーバエラー(下図)となる場合がある。
PRINT文を挿入しトレースをした結果、おそらくエラーは、UWSCスクリプト7行の
PRINT ClkItem(ieid, "\保存\名前を付けて保存", CLK_BTN)
¥保存¥名前を付けて保存のボタンクリックが出来ていない(False)ものと推定しています。

VBAの処理からUWSCを実行する手前(Sleep7000)、その他の各所にもWait処理(Sleep)を入れて調整していますが、未だ不安定な状況です。特にUWSC実行する手前のWait処理(Sleep7000)をなくすとエラー(ダウンロード失敗、その後UWSCの配列オーバーエラー)になるので、これがヒントにならないでしょうか。

保存、名前を付けて保存のボタンクリックの安定しない原因、およびその対策をお教え願います。

<エラー>
UWSC-DL1.uws
変数:ALL_ITEM_LIST配列をオーバーしてます
47行目:IF POS("ダウンロードが完了"、ALL_ITEM_LIST[N-1])>0

<VBAソース(関連部分のみ>
'CSVダウンロードボタンをクリック
Call tagClick(objIE, "button", "CSVダウンロード")


'ここでobjIEを喪失していると想像
Sleep 2000 '十分な待機時間(例えば2秒)を確保(APIのSleep関数)
Set objIE = 最新画面 '最新のオブジェクトを取得する
If objIE Is Nothing Then MsgBox "異常発生": Exit Sub '念のため
Call ieCheck(objIE) '念のため

'ここで通知バーを表示しているhpをアクティブに
'ウィンドウが最小化されているかのチェック
If Not IsIconic(objIE.hWnd) = 0 Then '0以外:最小化されている
ShowWindowAsync objIE.hWnd, SW_RESTORE
End If
'IEを最前面に表示
SetForegroundWindow (objIE.hWnd)

'
'通知バー内保存−名前を付けて保存ボタンをクリックする処理(UWSC使用)
'
'UWSCとの同期用ファイル初期化(doukiファイル サイズ0に初期化)
Application.DisplayAlerts = False
Shell "C:\Windows\System32\cmd.exe /C Copy c:\TEST\zero.txt c:\TEST\douki.txt"
Application.DisplayAlerts = True

Sleep 7000 'テスト用 7秒待ち

Dim Fname As String
Shell "C:\UWSC\uwsc5302\UWSC.exe c:\TEST\DL1.uws " & DLfile

'UWSC処理完了チェック(同期用ファイルサイズが0でなくなる時)
Dim DF_size As Long
Dim LC As Integer '繰返し回数(回数オーバはタイムアウトエラー)

Sleep 10000 'UWSC処理完了待ち 10秒

LC = 10 '初期化(その後1秒ごと10回超え、合計20秒でタイムアウトとする)

Pro9:
DF_size = FileLen(ThisWorkbook.Path & "\Douki.txt")
If Not DF_size > 0 Then
Sleep 1000 '1秒Wait(1秒毎のファイルサイズチェック、0でなくなれば終了)
LC = LC - 1
If LC = 0 Then
MsgBox "タイムアウトエラー 異常発生"
GoTo E_Pro1:
End If
GoTo Pro9:
End If

<UWSCスクリプト>
// IE(IE9以上) にてダウンロードのページが開いている事(http://www.uwsc.info/download.html)
ieid = GETID("Internet Explorer", "IEFrame")
PRINT (1)
//PRINT (ClkItem(ieid, "保存", CLK_LIST or CLK_SHORT)) // 不要(正常時もエラー時もここはFalse)、保存をクリック、リストボックス、文字省略指定: 部分一致にて検索
PRINT (2)
//sleep(5) // 不要(前の"保存"クリック不要に伴い)、間が必要
PRINT ClkItem(ieid, "\保存\名前を付けて保存", CLK_BTN) // '保存'スプリットボタンの '名前を付けて保存'をクリック
PRINT (3)
setNameFileDlg(PARAM_STR[0], ".csv") // ファイル名 DLfile.cvs (DLfileは変数)にてダウンロード
PRINT (4)
sfid = GETID("名前を付けて保存の確認", "#32770",5) //上書き確認、上書き実行
PRINT (5)
if sfid < then EXIT //通知がないケースは抜ける
PRINT (ClkItem(sfid, "はい" , CLK_SHORT)) //上書き指示
Sleep(1) //デバグ用
closeDlg(ieid) // ダウンロード終了確認
PRINT (6)
//Sleep(20) //デバグ用(ブレーク)
//メイン処理との同期用ファイルに書き込む
ID = FOPEN("c:\Douki.txt", F_WRITE)
FPUT(ID,"正常終了") //正常終了を書込む
FCLOSE(ID)
EXITEXIT //UWSCスクリプト終了
// '名前を付けて保存'ダイアログに名前を設定し保存(fname:保存ファイル名、extens:拡張子)
Function setNameFileDlg(fname, extens)
Result = False
id = GETID("名前を付けて保存", "#32770",5) //#32770はダイアログのクラス名
if id < then Exit
Sleep(1)
pp = -1
for n = 1 to 3 // 検索項目が付加される事がある為Edit順番を確認
ifb Pos(extens, GetStr(id, n))>0
pp = n
break
endif
next
if pp < 0 then Exit
SendStr(id, fname + extens, pp, True)
// Result = ClkItem(id, "保存", CLK_BTN or CLK_MUSMOVE) //戻り値
PRINT (ClkItem(id, "保存", CLK_BTN or CLK_MUSMOVE)) //戻り値
Fend
// ダウンロード終了確認、フォルダーを開く
Procedure closeDlg(ieid)
while True
Sleep(1)
n = GETITEM(ieid, ITM_ACCTXT)
if Pos("ダウンロードが完了", ALL_ITEM_LIST[n-1])>0
// CLKITEM(ieid, "フォルダーを開く", CLK_BTN) //不要(フォルダ開く)
Exit
endif
Wend
Fend

No.4339 2017/08/22(Tue) 15:09:44

Re: WEBサイトからファイルのダウンロード動作が不安定 / stuncloud
> n = GETITEM(ieid, ITM_ACCTXT)
> if Pos("ダウンロードが完了", ALL_ITEM_LIST[n-1])>0


でnが0になった場合にエラーになります (ALL_ITEM_LIST[-1] になって配列の範囲を越える
nが0の場合は処理をスキップする等してください

あとVBAのコードは書かなくていいです

No.4341 2017/08/22(Tue) 16:09:04
(No Subject) / あ
IESETDATAを使ってIE上の入力フォームに入力するとき、変数を含む複数行を入力したいときはどうすればいいですか?
例えば、
data
name
age
のように入力したいです

IESETDATA
IESETDATA
IESETDATA
のように記述すると毎回リセットして入力されてしまいます

No.4338 2017/08/22(Tue) 11:01:02
Excelでソート / あ
uwscを使ってExcelのデータを昇順にしたいです
あらかじめクイックアクセスツールバーに昇順を設定しておりALT+6で昇順になるはずなのですがUWSCでKBD関数を用いて命令しても反応無しです
他に方法はありますでしょうか?

No.4331 2017/08/20(Sun) 09:39:58

Re: Excelでソート / あ
sckey関数も無理でした
No.4332 2017/08/20(Sun) 09:46:34

Re: Excelでソート / あ
EXCEL.Range("A1").Select
SCKEY(EXCEL, VK_ALT, VK_6)

みたいな感じで命令するとエラー音が鳴ります

No.4333 2017/08/20(Sun) 20:38:39

Re: Excelでソート / あ
どうやらUWSC.exeに対してALT+6を送るようになっているみたいです
どうやってExcelに送れますか?

No.4334 2017/08/20(Sun) 20:42:31

Re: Excelでソート / あ
分かる人いませんか?
No.4335 2017/08/20(Sun) 22:40:53

Re: Excelでソート / yanyan
SCKEYは、COMオブジェクトではなく、window-識別IDに対して送ります。

//余計なことですが、下記はCOMを使用したExcelソート例です。

XL = CreateOLEObj("Excel.Application")
XL.Workbooks.Add
XL.Visible = True
XL.Cells[1,1] = "NO"
XL.Cells[1,2] = "value"  
for a= 2 to 100
XL.Cells[a,1] = a
XL.Cells[a,2] = random()
next

xl.Activesheet.Sort.SortFields.Clear
xl.Activesheet.Sort.SortFields.Add( Key:= xl.activesheet.range("B2:B100") , SortOn:= 0 ,Order:=1, DataOption:=1)
With xl.Activesheet.Sort
.SetRange(rng:= xl.activesheet.range("a1:B100"))
.Header = 1
.MatchCase = False
.Orientation = 1
.SortMethod = 1
.Apply
EndWith

No.4336 2017/08/21(Mon) 10:01:05
起動しなくなります / BOSS
エラーが出たらOKボタンを押して起動させますが、1〜2日すると動かなくなります。
「くま.exe」を再起動させても全く動かないですが、同じものの「くま.uws」一度動かすと「くま.exe」が再び動くようになります。
原因はなんでしょうか。



while true

ifb GetID("くま","TUmsgDlg_uwsc") <> -1
clkitem(GetID("くま","TUmsgDlg_uwsc"),"OK",CLK_BTN)
endif

ifb GETID("くま","TUScript") = -1
REPEAT
gettime()
print G_TIME_MM + "/" + G_TIME_DD2+" "+G_TIME_HH + ":" + G_TIME_NN2 +"<#CR>"+"落ちてたから起動するよ"
EXEC("C:\Users\R\Desktop\くま.exe")
sleep(3)
UNTIL GETID("くま","TUScript") <> -1
endif

sleep(10)
wend

No.4329 2017/08/19(Sat) 17:36:59

Re: 起動しなくなります / BOSS
訂正します。

1〜2日すると下に記述の.exeが動かなくなります。
下に記述の.exeを再起動させても全く動かないですが、下に記述の.uws一度動かすと再び動くようになります。
原因はなんでしょうか。


while true

ifb GetID("くま","TUmsgDlg_uwsc") <> -1
clkitem(GetID("くま","TUmsgDlg_uwsc"),"OK",CLK_BTN)
endif

ifb GETID("くま","TUScript") = -1
REPEAT
gettime()
print G_TIME_MM + "/" + G_TIME_DD2+" "+G_TIME_HH + ":" + G_TIME_NN2 +"<#CR>"+"落ちてたから起動するよ"
EXEC("C:\Users\R\Desktop\くま.exe")
sleep(3)
UNTIL GETID("くま","TUScript") <> -1
endif

sleep(10)
wend

No.4330 2017/08/19(Sat) 18:56:19
全1170件 [ ページ : << 1 ... 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 ... 117 >> ]