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

IEのサイトとメモ帳とエクセルを開いている状態で特定のキーを押す事で特定の処理をさせる方法 / ゆう
下記のコードで文字をコピーしてNを押すとエクセルの最終行に貼付け、NキーでB列の最終行に貼付け、SHIFTを押すとIEのタイトルバークリック、ALTキーを押すとクリップボードに文字がなければ、メモ帳をクリック、クリップボードに文字があればコピーしたのを貼付けという処理をしたいのですが、クリップボードに文字がある状態でALTキーを押してメモ帳に貼付けした後、SHIFTを押してもIEのタイトルバーをクックする処理にならず反応がなく、クリップボードに文字がない状態でALTキーを押してメモ帳をクリックする処理にならず反応がありません。

スクリプト起動後、クリップボードに文字がある状態でALTキーを押さず、SHIFTキーやALTキーでのメモ帳クリックとかも問題なくできています。
エクセルの最終行貼付けは、問題なくできています。したい処理がクリップボードに文字がある状態でALTキーを押した後であっても、SHIFTキーやALTキーの処理させたいのですができません。
どこが間違っているのでしょうか?


excel2 = GETACTIVEOLEOBJ("Excel.Application")
o_sheet = excel2.ActiveSheet

yA = sub_getBlankRowNumber1a(o_sheet, 1)  //A列の現在行(空欄行)
yB = sub_getBlankRowNumber1a(o_sheet, 2)  //B列の現在行(空欄行)


while True
  sleep(0.2)
  
  ifb getkeystate(VK_N) then //VK_ADD
    x = 1
  elseif getkeystate(VK_M) then //VK_MULTIPLY
    x = 2
  elseif getkeystate(VK_SHIFT) then //メモ帳移動
sethotkey(VK_SHIFT, MOD_SHIFT, "proc2z")

  elseif getkeystate(VK_ALT) then //VK_MULTIPLY
  x = 3
sethotkey(VK_ALT, MOD_ALT, "proc1z")

  else
    continue  
  endif
  
      
 ss = GETSTR(0)
  ifb (ss <> "")  //クリップボードにある場合のみ処理する
    ifb (1 = x) then
      y = yA
    Excel2.ActiveSheet.Cells[y, x].Value = ss
    y = y + 1
      yA = y
    elseif (2 = x) then
      y = yB
      Excel2.ActiveSheet.Cells[y, x].Value = ss
      yy = y + 1
      yB = y
    elseif (3 = x) then
    SENDSTR(0, "") // クリップボードをクリア
else
continue
    endif
        
  endif
wend



procedure proc1z

a=getstr(0)
a=length(a)

if a=0 then
nID =GETID("無題 - メモ帳","Notepad")//ウィンドウ指定

MMV(STATUS(nID, ST_CLX)+STATUS(nID, ST_CLWIDTH)/2, STATUS(nID, ST_CLY)+STATUS(nID, ST_CLHEIGHT)/2)
else
ida = GETID("メモ帳")

MOUSEORG(GETCTLHND(ida,"edit"), 2)
tesa = GETSTR(0)
SENDSTR(ida,tesa+"<#CR>")
endif

fend

procedure proc2z

id1=getid("Internet Explorer")
x1 = status(id1, ST_x) + status(id1, ST_WIDTH) / 2
y1 = status(id1, ST_Y) + 10
btn(LEFT, CLICK, x1, y1)
fend


//下から上に探して最初の空欄がある行番号を返す
function sub_getBlankRowNumber1a(oSheet, iColumnNumber)
  dim i_bottomRow = oSheet.Rows.Count
  dim o_range   = oSheet.Cells(i_bottomRow, iColumnNumber)
  
  dim xlUp = -4162
  o_range = o_range.End(xlUp)     //Ctrl + ↑ と同じ操作
  
  ifb (empty <> o_range.Value) then  //空欄でなければ
    o_range = o_range.Offset(1, 0)  //一つ下のセル
  endif
  
  result = o_range.Row
fend

No.4346 2017/08/22(Tue) 23:37:45

Re: IEのサイトとメモ帳とエクセルを開いている状態で特定のキーを押す事で特定の処理をさせる方法 / miles
MOUSEORGを外したらどうですか?
SENDSTR(文字列の送信)だけなら、MOUSEORG(メモ帳に直接送る)はいらないでしょう。
その後のクリックも正常になると思う。

 ida = GETID("メモ帳")
// MOUSEORG(GETCTLHND(ida,"edit"), 2)
 tesa = GETSTR(0)
 SENDSTR(ida,tesa+"<#CR>")

No.4363 2017/08/25(Fri) 11:10:45

Re: IEのサイトとメモ帳とエクセルを開いている状態で特定のキーを押す事で特定の処理をさせる方法 / ゆう
miles様、MOUSEORG外したら希望通りの処理ができました。
難しく考えすぎていたようです。
ありがとうございます、助かりました。

No.4366 2017/08/25(Fri) 12:37:22
UWSC Pro版のEXE化のエラーについて / pokotan
UWSC Pro版の体験版でライセンス購入前にexe化で動作確認をしようとしてみたのですが、
-------------------------------------------------------
CREATEFORM/CHKIMG関数にて以下の取込みが出来ませんでした
CREATEFORM(CHARPATH + CHARACTER[INDEX] + ".html"
-------------------------------------------------------
と表示されました。
処理的にはマクロ自身でhtmlファイルを生成し、それを表示するというものです
これはexe化による仕様的なものでしょうか?

No.4362 2017/08/25(Fri) 10:29:21

Re: UWSC Pro版のEXE化のエラーについて / pokotan
もしかしてexe化は対象htmlとかも含めて内包しているのでしょうか…?
htmlを表示するだけのソースを作って動作を確認してみましたが、どうもcreateform呼び出し時に添付フォルダに該当htmlをexeから吐き出しているようなのでそうではないのかと

No.4364 2017/08/25(Fri) 11:12:41

Re: UWSC Pro版のEXE化のエラーについて / pokotan
過去ログ検索したら同様のやり取りがありました。お手数おかけしました
やはりセキュリティ的なものでしょうか?悪意あるサイトに飛ばしたり出来るとかで
次の更新でcreateformやchkimgをEXE化した時に変数による参照は出来ない等の旨を書いて貰えると有り難いです

ログ見てたらabout:blankで直接書き込む方法ならいけそうな気がするのでそちらでやってみます

No.4365 2017/08/25(Fri) 11:54:23
クイズ / 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


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


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