116272
UWSC 仮 掲示板
投稿時に「証明書が不正です」と出る場合には、JavaScriptをオン
動作不具合での質問の場合には環境を表記(OS,バージョン等)
タイトルは内容を表し、内容はネットゲーム関係禁止
自身でコードを書く気の無いナマケモノは特に質問禁止
失敗作でもコードを投稿すること(具体性の無い質問は無視される可能性大)

UWSC掲示板 が復活することを祈り、それまでの繋ぎとして。
環境設定[s7777777]

★ UWSCRのweb操作について / リキュール
UWSCのIE機能が終了予定が近づいてきました。
当日にならないと、現実にどういうことになるかわりませんが。

UWSCRでWEB操作ができる見通しはあるのでしょうか。

Edge、Chrom 等(特にChromで)

No.1478 2022/05/26(Thu) 21:40:19

Re: ★ UWSCRのweb操作について / stuncloud
BrowserControl()という関数が追加されており、それでChromeとMSEdgeの操作が出来ます
WebDriverが不要なのでUWSCRとスクリプトだけでブラウザ操作が可能です

https://github.com/stuncloud/UWSCR/wiki/%E3%83%96%E3%83%A9%E3%82%A6%E3%82%B6%E6%93%8D%E4%BD%9C

まだざっくり実装しただけなので機能的に十分ではないところがあります
ご利用いただいて気付いた点や要望などありましたらgithubやdiscordでご報告いただけると助かります

No.1479 2022/05/26(Thu) 23:34:48

Re: ★ UWSCRのweb操作について / リキュール
早速のお返事、ありがとうございます。

今まで作成したUWSCのプログラムが100個以上あるので、部分修正して利用できそうです。
先日、uwscr-0.6.0-x64.msi をダウンロードして、インストールして見ました。

早速、ブラウザ関係(BrowserControl)を試しましたがうまく動作しません。、
どこが間違っているのでしょうか?

//コマンドプロンプトで:uwscr C:\Users\user\Desktop\uwscr.UWS
//uwscr.UWSの内容
Browser = BrowserControl(BC_CHROME)
sleep(2)

動作環境
OS:Windows10 home 64ビット 21H1
Browser:Chromeバージョン: 101.0.4951.67(Official Build)64 ビット

エラー表示
[HTTPリクエスト エラー] error sending request for url (http://localhost:9222/json/list):
error trying to connect: tcp connect error:
対象のコンピューターによって拒否されたため、接続できませんでした。 (os error 10061)

No.1480 2022/05/28(Sat) 13:53:06

Re: ★ UWSCRのweb操作について / stuncloud
9222ポートが別のプロセスで使われているのかもしれません
PowerShellで
Get-NetTCPConnection -LocalPort 9222 | % {ps -Id $_.OwningProcess}
としてchrome.exeが9222で待ち受けているか確認してみてください

上記コマンドがエラーになった場合は9222ポートが使われていないということになります
> Browser = BrowserControl(BC_CHROME)
この行の処理時にChromeが正常に起動していないかもしれません
Browser = BrowserControl(BC_CHROME, , 9999) // chromeが9999ポートで待ち受け
のようにポート番号を任意のものに変更して起動を試してみてください

9222ポートがchrome.exeであれば本来なら動作するはずなのですが、その場合に動作しない原因を調査する方法を考えてみます

No.1481 2022/05/28(Sat) 15:39:02

Re: ★ UWSCRのweb操作について / リキュール
問題が解決しました。

Chromeが画面裏で動作していたのが原因でした。閉じてから実行したら動作しました。
お騒がせしました。

なお、私はChromeを常に開いており、タブを10個ほど開いております。
開いているChromeを閉じずに、新規のページで browser.navigate 等を行うことは無理でしょうか。

※この問題が解決したら、新規スレッドは discord に移行したいと思います。

No.1483 2022/05/28(Sat) 18:06:04

Re: ★ UWSCRのweb操作について / stuncloud
> 開いているChromeを閉じずに、新規のページで browser.navigate 等を行うことは無理でしょうか。
今のところ無理です
既に起動している状態だとremote-debugging-port有りで新たにchromeを起動する方法が現時点でわかっていないんですよね、あるいはそもそもそういったことができない可能性もあります

あらかじめ
chrome.exe --remote-debugging-port=9222
で起動してあればそのchromeに再接続して操作、は可能です
とは言えそれを常用するのは良くないと思うのでおすすめはできません

windowsのsandboxを使ってその中でやる、といった工夫が必要になるかもです
あるいは自動化はChromeではなくEdgeを使うとか

No.1484 2022/05/28(Sat) 18:55:07

Re: ★ UWSCRのweb操作について / リキュール
UWSC や Python では問題なくできたので残念です。

ブラウザを Edge に変えて実行しましたが、エラーが出ました。
Browser = BrowserControl(BC_MSEDGE,,9222)

前回と同様のエラーで、ポート番号を変えてもダメでした。

Edgeの最新バージョンがダメなのでしょうか。
Browser:Microsoft Edge バージョン 101.0.1210.53 (公式ビルド) (64 ビット)
このブラウザーは、Chromium オープン ソース プロジェクトおよび他のオープン ソース ソフトウェアに基づいて機能します。

No.1485 2022/05/28(Sat) 20:39:35

Re: ★ UWSCRのweb操作について / stuncloud
Edgeはスタートアップブーストという機能が有効になっていると裏で予めEdgeのプロセスが(勝手に)起動されているため、Chromeが起動していると動かせないのと同じような状態になります
スタートアップブーストが必要なければ無効にしておいてください (Edgeの設定内に設定項目があります)

このケースだと勝手に起動されてるのでユーザー側で認識しづらいのが嫌ですね…

No.1486 2022/05/28(Sat) 22:06:29

Re: ★ UWSCRのweb操作について / リキュール
無事に実行することかできました。

ありがとうございました。

UWSC からの移行は、一筋縄では行きそうもありません。長期戦になりそうです。

※、次回からの質問は discord に移行したいと思います。

No.1487 2022/05/28(Sat) 22:51:13
iniファイルとSLCTBOX / sen
いつもお世話になっております。
TextBlockに入れている情報をiniファイルにしたらexeを作り直さなくて便利だと思うのですが、
全く分かりません。
こういう考え方は、iniファイルの使い方として間違っていますか?

ご教授頂けますようお願い致します。

TextBlock パスM
終了,【終了】
D:\データベース\梱包展開.exe,梱包展開(&c)
D:\,D\(&d)
EndTextBlock

hashtbl HTパス,HT表題
dim 表題,仮 = パスM, t
台帳 = Fopen(null, f_write or f_read)
while 仮 <> ""
 fput(台帳,token("<#cr>", 仮))
wend
For 回数 = 1 to fget(台帳, -1)
 t = fget(台帳, 回数,2)
 HT表題[t] = t
 HTパス[t] = fget(台帳, 回数,1)
next

表題 = SLCTBOX(SLCT_BTN or SLCT_STR, 0, "選択", HT表題)
表題 = HT表題[表題]
パス = HTパス[表題]

ifb pos("終了",パス) > 0 then
 exitexit
elseif pos(".exe",パス) > 0 then
 Exec(パス)
else
 Exec("explorer.exe "+パス)
endif

No.1475 2022/05/04(Wed) 08:34:26

Re: iniファイルとSLCTBOX / stuncloud
textblockの内容がcsvなのでcsvファイルを作ってそれをfopenで読み取れば良いのでは?

どうしてもiniを使いたいということなら…
例えば以下のような構成なら

# iniファイル
[パスM]
0=終了,【終了】
1=D:\データベース\梱包展開.exe,梱包展開(&c)
2=D:\,D\(&d)

# スクリプト
台帳 = Fopen(null, f_write or f_read)
i=0
while 1
 行=readini("パスM", i)
 if length(行)=0 then break
 fput(台帳,行)
 i=i+1
wend

といった書き方でやれないことはないです、おすすめはしませんが
(csvファイルをfopenしたほうが断然楽ですね!)

No.1476 2022/05/04(Wed) 10:51:52

Re: iniファイルとSLCTBOX / sen
おっしゃる通りです。
よく分かりました。

> といった書き方でやれないことはないです、おすすめはしませんが
> (csvファイルをfopenしたほうが断然楽ですね!)

No.1477 2022/05/06(Fri) 22:27:19
UWSCのIE機能の終焉時期について / 太田
失礼いたします。
UWSCのIE機能についてお分かりになればお教えください。

ブラウザとしてのIEは本年6月に終了しますが、
「IEコンポーネントについてはWindows OSのサポート終了までサポートが継続される」と聞きました。
(ソースこちらです)
https://atmarkit.itmedia.co.jp/ait/articles/1503/11/news134.html

ということはUWSCの各種IE機能も、Windows OSのサポート終了まで動作すると考えてよいものなのでしょうか?

No.1458 2022/03/07(Mon) 10:56:40

Re: UWSCのIE機能の終焉時期について / しろまさ
それはそうなったときに試してみないと判断できないと思います。
なにせUWSCの作者に聞くことが出来ないのですから。

まあいつまでも使えるとは思えないので、私は今WebDriver版を作りこんでいます。

No.1459 2022/03/07(Mon) 11:02:40

Re: UWSCのIE機能の終焉時期について / satocha
>ということはUWSCの各種IE機能も、Windows OSのサポート終了まで動作すると考えてよいものなのでしょうか?

そう期待していい、それなりの根拠があります。

「IEはサポートしない」+「IEコンポーネントはずっとサポート継続」というMSの発表の意味がいまひとつ、明確ではないですが、
デスクトップブラウザとしてのIEは終了するけどcomやらpowershellコマンドレット(Invoke-Webrequest)で使われるIEの機能は残ると思われます。

というのは、IE非搭載のWin11(Win10からのアップデートでない純11)で次のuwsスクリプトを動かすとちゃんとIE画面が表示されるからです。

with createoleobj("InternetExplorer.application")
.visible=true
endwith

vbsとpowershellでも試しましたが、同様にIE画面が表示されました。

このようにComを介すればIEブラウザ画面にお目にかかれるのですが、
"C:\Program Files (x86)\Internet Explorer\iexplore.exe"
を直叩きすると、IEではなくEdgeが起動します。

6月以降は、純11以外のサポートOSも同じようになるのだと思います。

No.1460 2022/03/14(Mon) 17:11:02

Re: UWSCのIE機能の終焉時期について / 太田
お二方ご回答ありがとうございました。
IEコンポーネントの延命に期待しつつ、私は別の延命策として
会社のメイン環境をWindows Server 2022にしました。
この場合、OSサポート期限までIEのサポートが継続されます。
つまり2031年10月14日までIEが使用可能ということになります。
ま、いつ突然今後変更されるかもしれませんが^^

ちなみにWindows Server 2022上でもUWSCは普通に動くことを確認しました。

No.1474 2022/04/17(Sun) 21:30:07
scriptcontrolメッセージボックスを消す方法 / 妖怪
初めまして
UwscWebDriverにてIEからedge操作の自動化を進めております。

stuncloud様の「アップロードファイルの指定方法」を参考に機関サーバーへcsvのアップロードが成功しました。
しかし、upするcsvデータが大きいのか、下記のメッセージが表示されます。

"The script you are executing is taking longer than expected to run.
Click End to abort the script, or Continue to continue script execution.
[End] or [Continue]"



// スクリプトコントロールダイアログボックスの「continue」をクリックする。
THREAD sc-contineClick()
---------------------------------
procedure sc-contineClick()
Public scid
while true
if getid("Script Control")>0 then
scid = getid("Script Control",,-1)
Break 1
endif
sleep(0.2)
wend
repeat
sleep(0.2)
until !clkitem(scid,"continue",CLK_BTN) //成功するまでWindowsの"OK"クリックを繰り返す
FEnd

クラス名が判らないので省略してコードを記述してみましたが、
やはり「continue」が押せません。

どなたか、よい方法をご存じ方、ご教授いただないでしょうか?
宜しくお願いします。

No.1464 2022/04/10(Sun) 16:52:40

Re: scriptcontrolメッセージボックスを消す方法 / stuncloud
ScriptControlに確認ダイアログを出すまでの時間を設定するTimeoutプロパティがあるらしいので、それを少し長めに取ることで確認ダイアログの表示自体を抑制できるようにしてみます
タイムアウト時間も環境によりけりなのでモジュールから変更できる仕組みも入れようと思います

No.1465 2022/04/10(Sun) 19:08:53

Re: scriptcontrolメッセージボックスを消す方法 / 妖怪
> ScriptControlに確認ダイアログを出すまでの時間を設定するTimeoutプロパティがあるらしいので、それを少し長めに取ることで確認ダイアログの表示自体を抑制できるようにしてみます
> タイムアウト時間も環境によりけりなのでモジュールから変更できる仕組みも入れようと思います


早々のご回答ありがとうごさいます。
宜しくお願いします。

No.1467 2022/04/10(Sun) 20:20:47

Re: scriptcontrolメッセージボックスを消す方法 / stuncloud
https://github.com/stuncloud/UwscWebDriver/releases/tag/0.8.9

タイムアウト時間を5分にしました
これでダイアログが出なくなるかどうか確認してみてください
タイムアウト時間は変更することが可能です

WebDriver.SetScriptControlTimeout(30) // タイムアウトを30秒にする
WebDriver.SetScriptControlTimeout(-1) // タイムアウトしないようにする


それと、ダイアログのContinueが押せない件も調べてみました
clkitemはTRUEを返しているのでUWSC側では押せたという認識のようですが実際は押せていませんでした
また、Continueボタンのニーモニックが&nだったのでsckey()やkbd()でAlt+nを送ってみましたがこれもだめでした
実際のマウスまたはキーボードで操作しないとだめなのかもしれません

あと、ダイアログのクラス名は #32770 でした (通常のダイアログですね)

No.1468 2022/04/11(Mon) 11:23:30

Re: scriptcontrolメッセージボックスを消す方法 / 妖怪
> https://github.com/stuncloud/UwscWebDriver/releases/tag/0.8.9
>
> タイムアウト時間を5分にしました
> これでダイアログが出なくなるかどうか確認してみてください
> タイムアウト時間は変更することが可能です
>
> WebDriver.SetScriptControlTimeout(30) // タイムアウトを30秒にする
> WebDriver.SetScriptControlTimeout(-1) // タイムアウトしないようにする
>
>

stuncloudさま
ご対応ありがとうございました。
本日は、「任意のディレクトリにファイルをダウンロード」を参考に
期間サーバーから指定フォルダにダウンロードすることに成功しました。
まだ、手直しは必要ですか゜・・・

なので、掲示板の確認が遅れて申し訳ありません。
ver0.8.9を持って
明日、出社後、機関サーバーへの対応をし、ご報告いたします。

また、Continueが押せない件の調査についてもありがとうございました。


UwscWebDriverによって、IEからedgeへの変更に灯りが見えてきました。
本当にありがとうございました。

No.1469 2022/04/11(Mon) 21:10:04

Re: scriptcontrolメッセージボックスを消す方法 / 妖怪
> > https://github.com/stuncloud/UwscWebDriver/releases/tag/0.8.9
> >
> > タイムアウト時間を5分にしました
> > これでダイアログが出なくなるかどうか確認してみてください
> > タイムアウト時間は変更することが可能です
> >
> > WebDriver.SetScriptControlTimeout(30) // タイムアウトを30秒にする
> > WebDriver.SetScriptControlTimeout(-1) // タイムアウトしないようにする
> >


無事、ダイアログボックスも出ずに機関サーバーからの「アップロード完了」のメッセージを受け取りました。
タイムアウト時間を2秒に設定もしてみましたが、
アップデータが小さいのか、ダイアログボックスが一瞬出て機関サーバーからの「アップロード完了」となりました。

今後、同サーバーで「ダウンロード」の自動化を進めますが、
SetScriptControlTimeout等で不具合当が発生しましたら、ご報告いたします。

今回は、早々の対応で本当にありがとうございました。

No.1470 2022/04/12(Tue) 12:13:16

Re: scriptcontrolメッセージボックスを消す方法 / stuncloud
> タイムアウト時間を2秒に設定もしてみましたが、
> アップデータが小さいのか、ダイアログボックスが一瞬出て機関サーバーからの「アップロード完了」となりました。

ダイアログが出ても裏では処理が続行しており、処理が完了するとダイアログも消えるという仕様のようです

> SetScriptControlTimeout等で不具合当が発生しましたら、ご報告いたします。
よろしくお願いします

No.1471 2022/04/12(Tue) 12:44:51

Re: scriptcontrolメッセージボックスを消す方法 / 妖怪
> ダイアログが出ても裏では処理が続行しており、処理が完了するとダイアログも消えるという仕様のようです

コマンド(WebDriver.SetScriptControlTimeout(30))は使用せず5分のままで
終日使用してみましたが、何事もなく業務を終了しました。
ありがとうございました。

> > SetScriptControlTimeout等で不具合当が発生しましたら、ご報告いたします。
> よろしくお願いします


了解しました。

現在、「任意のディレクトリにファイルをダウンロード」で一旦は成功しましたが
ダウンロードの保存先が複数あるのでJsonで変数を埋め込む方法を模索中です。
探しきれなかったらHELPをお願いしたいのですが、
今後は、https://discord.com/の方がよいですか?

No.1472 2022/04/12(Tue) 20:02:38

Re: scriptcontrolメッセージボックスを消す方法 / stuncloud
> 今後は、https://discord.com/の方がよいですか?
そうですね

No.1473 2022/04/12(Tue) 20:48:52
IEのタブやお気に入りバーのお気に入りボタンをクッリクする方法 / yy
UWSCでInternet Explorerのタブやお気に入りバーにあるお気に入りボタンをクリックする仕方がよく分からないので教えてください。

(質問1)UWSCでInternet Explorerのあるページのタブ(例えばtestという名前のタブ)をクリックするにはどのようなコードを記述すればよいのでしょうか。

(質問2)UWSCでInternet Explorerのお気に入りバーにあるお気に入りボタン(例えばtestという名前のお気に入りボタン)をクリックするにはどのようなコードを記述すればよいのでしょうか。

よろしくお願いします。

No.1463 2022/04/07(Thu) 20:53:25
THREAD同時処理を最大限で利用したい / YMK
お世話になります。
UWSCで早く処理を済ませるため、THREADで同時処理させ、
尚且つ制限である64スレッドを超えないようにするため以下のコードで実行したのですが、
20秒ほどですんなり終わるときもあれば、5分かかっても終わらないときがあります、、、
どこが悪いのでしょうか?
(説明を簡単にするため、コードは簡素にしています)

PUBLIC スレッド数 = 0
for i = 1 to 250
 THREAD 情報取得(i)
 スレッド数 = スレッド数 +1
 while スレッド数 > 60 //スレッド60以下待ち
  sleep(0.02)
 wend
next

while スレッド数 > 0 ; sleep(0.1) ;wend //全てのスレッド終了待ち

msgbox("完了")

PROCEDURE 情報取得(i)
  sleep(1) //処理の代わり
  スレッド数 = スレッド数 -1
fend

No.1461 2022/03/22(Tue) 21:10:01

Re: THREAD同時処理を最大限で利用したい / stuncloud
問題があるとすればスレッド数が60以下になるまで待つ処理ですかねえ
開始されない処理がそれなりに溜まっているわけで、うっかりスレッド数が60→59→60→59→…なんて遷移してると遅くなるということがある…のかな…?

いっそのこと64スレッドずつプロセスを分けてしまう方がいいかもですね
プロセス1でスレッド1〜64
プロセス2でスレッド65〜128
プロセス3でスレッド129〜192
プロセス4でスレッド193〜250
みたいな感じで
PARAM_STR[]でどこからどこまでやるかを伝えていけば良さそうです

別プロセスの立ち上げは終了を待たない方法ならなんでもいいのでdoscmdでおそらくOK
でもプロセス終了判定が面倒かな…?
用途次第ですがやりっぱなしでいいなら終了判定もいらないですね

No.1462 2022/03/22(Tue) 23:35:42
UwscWebDriver ファイルの選択ボタンと閉じるボタンのクリックの処理がされない / sakamoto
UwscWebDriverを使ったUWSCの記述の仕方を学習していますが、
ボタンをクリックして表示されるウインドウでファイルを選択する
という基本的な操作の記述の仕方がよく分からないので教えてください。

具体的には、

C:\uwsc_testというフォルダに以下の5つのファイルがあります。
・UwscWebDriver.uws
・msedgedriver.exe
・test.html      (リスト1参照)
・test.uws      (リスト2参照)
・test.txt      (とりあえず中身は何でもよい)

test.htmlをMicrosoft Edgeで開くと、
「ファイル選択」というタイトルのページが表示されます。
「ファイルの選択」ボタンをクリックします。
「開く」というタイトルのウインドウが表示されます。
「ファイル名(N):」のボックスに「C:\uwsc_test\test.txt」を入力して、
「開く」ボタンをクリックします。
「開く」のウインドウが閉じて、元の「ファイル選択」のページに戻ります。
「ファイルの選択」の右側に「test.txt」と表示されていることを確認して、
「閉じる」ボタンをクリックして、「ファイル選択」のページを閉じます。

以上の操作をUwscWebDriverを使ってUWSCで操作させたいのですが、

下記のリスト2(test.uws)のようなコードを記述しましたが、
(3)と(5)の部分で「ファイルの選択」ボタンと「閉じる」ボタンの
クリックの処理がうまくいきません。
(3)で「開く」ウインドウが開いて、
(5)で「ファイル選択」ページが閉じるようにするには、
どのように記述すればよいのでしょうか。

---リスト1(test.html)--------------------------------------------------
<HTML xmlns="http://www.w3.org/1999/xhtml">
<HEAD>
<TITLE>ファイル選択</TITLE>
<META content="text/html; charset=utf-8" http-equiv=Content-Type>
</HEAD>
<BODY>
<FORM>
<DIV>
</DIV>
<TABLE cellSpacing=0 cellPadding=2 width=730 align=center border=1>
<TBODY>
<TR>
<TH class=size14 style="WIDTH: 163px" bgColor=#ffffcc height=20 vAlign=middle noWrap align=center>ファイル</TH>
<TD bgColor=#dddddd height=20 vAlign=middle colSpan=2 align=left>
<INPUT style="HEIGHT: 27px; WIDTH: 100%" type=file id="filepath">
</TD>
</TR>
</TBODY>
</TABLE>
<TABLE cellSpacing=0 cellPadding=2 width=730 align=center border=0>
<TBODY>
<TR>
<TD align=right>
<INPUT onclick=window.close(); type=button value=閉じる id="closebtn">
</TD>
</TR>
</TBODY>
</TABLE>
</FORM>
</BODY>
</HTML>
-----------------------------------------------------------------------

---リスト2(test.uws)---------------------------------------------------
CALL UwscWebDriver.uws

//(1)Edgeの起動
driver = WebDriver.ChromiumEdge()

//(2)test.htmlの表示
driver.Navigate("C:\uwsc_test\test.html")
driver.SetRect(835, 270, 10, 10)

sleep(1)

//(3)ファイルの選択ボタンをクリックして開くウインドウを開く
element = driver.FindElement(By.Tag("input") + By.Id("filepath"))
element.Click()

sleep(1)

//(4)開くダイアログでファイルを指定して開くボタンをクリック
id=GETID("開く")
SENDSTR(id, "C:\uwsc_test\test.txt", 1, True)
sleep(2)
CLKITEM(id, "開く", CLK_BTN, True, 1 ) 

sleep(1)

//(5)閉じるボタンをクリックしてファイル選択のページを閉じる
element = driver.FindElement(By.Tag("input") + By.Id("closebtn"))
element.Click()
-----------------------------------------------------------------------

【実行環境】
・OS (Windows10)
・Microsoft Edge   (98.0.1108.56)
・UwscWebDriver.uws  (0.8.2)
・msedgedriver.exe  (ChromiumEdge 98.0.1108.56)

よろしくお願いします。

No.1455 2022/02/26(Sat) 15:50:27

Re: UwscWebDriver ファイルの選択ボタンと閉じるボタンのクリックの処理がされない / stuncloud
UWSCWebDriverの質問に関しては以下をご確認ください
https://www3.rocketbbs.com/601/bbs.cgi?id=siromasa&mode=pickup&no=1425

discordでも同様の質問を受けていたので後でwikiに書きます

追記: 書きました
https://github.com/stuncloud/UwscWebDriver/wiki/%E3%82%A2%E3%83%83%E3%83%97%E3%83%AD%E3%83%BC%E3%83%89%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%AE%E6%8C%87%E5%AE%9A%E6%96%B9%E6%B3%95

No.1456 2022/02/26(Sat) 16:46:38

Re: UwscWebDriver ファイルの選択ボタンと閉じるボタンのクリックの処理がされない / しろまさ
// 使ってる奴。説明無し。使いこなせるならどうぞ。EdgeとChromeの違いは要修正。
// 全角空白2個を水平タブに置換してください 

  Public  fEndDlg = FALSE  //  入力完了フラグ

  WD.FindElement("#updateImportType").Click()
  FileOpenDlgWD(fpXL, "現場 一括取込・更新")

  Procedure  FileOpenDlgWD(_fpXL, _ttlWD)
    Dim #idW, #idD, #Ttl = Ttl(2)
    
    Repeat  //  Chrome idWin取得
      #idW = GetID(_ttlWD , "Chrome_WidgetWin_1", 0.5)
    Until  #idW > 0  //  取得出来たら抜ける
    
    Repeat  //  クリック〜FileOpenDLG待機
      Sleep(0.2)
      ClkItem(#idW, "ファイルを選択")    //  win7?でクリック出来ない
      #idD = GetID(#Ttl, "#32770", 1)    //  2:開く
      Ifb #idD < 1 AND KindOfOS() < 30  //  win7 はメッセージ
        MsgBox("ブラウザの 【 ファイルを選択 】 ボタンをクリック後、OKを押してください。")
        #idD = GetID(#Ttl, "#32770", 1)  //  2:開く
      EndIf
    Until  #idD > 0
    
    Thread  th_InputXLfp(_fpXL, 2)  //  FileOpenDLGの入力・確認(スレッド処理)
    Repeat
      Sleep(0.2)  ;
    Until  fEndDlg  //  ダイアログの終了を待機
    Sleep(2)
  FEnd

  //  ファイルオープンダイアログでXLパスを入力し決定する
  Procedure  th_InputXLfp(_fp, _n = 1)
    fEndDlg = FALSE
    Dim #id, #gtE = gtE_Get(15)
    Repeat
      Repeat
        gtE_Chk(#gtE, TRUE)
        #id = GetID(Ttl(_n), "#32770", 0.5)
      Until  #id > 0
      Sleep(1)
      
      Ifb KindOfOS() >= 30  //  win10以降
        Repeat
          SendStr(#id, "", 1, TRUE)  ; Sleep(0.2)
          SendStr(#id, _fp, 1, TRUE)  ; Sleep(0.2)
        Until  GetStr(#id, 1, STR_EDIT) = _fp
      Else          //  win7
        Repeat
          SendStr(#id, "", 0, TRUE)  ; Sleep(0.3)
          SendStr(#id, _fp, 0, TRUE)  ; Sleep(0.3)
        Until  GetStr(#id) = _fp
      EndIf
      
      ClkItem(#id, "開く(O)", CLK_BTN)
      
      Repeat
        If gtE_Chk(#gtE)  Then Continue 2
        #id = GetID(Ttl(_n), "#32770", 0.2)
      Until  #id < 1
      Sleep(1)
    Until  TRUE
    fEndDlg = TRUE
  FEnd

  Function  Ttl(_n)
    Dim #s
    Select  _n
      Case 1  ; #s = "アップロードするファイルの選択"  //  IE
      Case 2  ; #s = "開く"              //  Chrome
      Default    ; MsgBox(_n +" 未定義の番号です。")  ; ExitExit
    SelEnd
    Result = #s
  FEnd

  //  待機終了管理
  Function  gtE_Get(_secWait = 15)
    Result = GetTime() + _secWait
  FEnd
  Function  gtE_Chk(_gtE, _EndM = FALSE)
    Result = GetTime() > _gtE
    Ifb Result
      MsgBox("待機時間を超過したため終了します。")
      ExitExit
    EndIf
  FEnd

No.1457 2022/02/28(Mon) 11:38:47
clkitem関数に再試行処理追加する方法について考えた時の自分用のメモ書き / 名無し
// with fukidasi
// .testfukidasi = true
// .clearClkfukidasi = false
// .error_stop = false
// .screen_shot = true
// .trytimeout = 30
// .initialwait = true

Class fukidasi
public testfukidasi = false
public clearClkfukidasi = false
public error_stop = false
public screen_shot = false
public trytimeout = 3
public initialwait = 0
Public msg = "", wait = 3//メッセージ消去時間

dim _w,_x,_y,_fuid1,_fuid2

Procedure fukidasi
Thread This._1()
global.fukidasi("a")
_fuid1=getid(get_fukidasi_win)//本家スレッドの吹き出しid
global.fukidasi()
Fend

function clkitem(var id,name,opt=0,on_off=true,no=1)
dim opttxt =""
decodeClkopt(opt,opttxt)

c=0
s="<#dbl>"+name+"<#dbl>の操作"
s0(s)
isid=status(id,ST_isid)
if !(isid) then s=s+"はidが無効"
sleep(initialwait)
while isid
if pos(" CLK_LEFTCLK ",opttxt) then mouser(false)
result=global.clkitem(id,name,opt,on_off,no)
if pos(" CLK_LEFTCLK ",opttxt) then mouser(true)
if result then
if clearClkfukidasi then s() else s0(s+"成功")
exit
endif
c=c+1;
s0(s+c)
if c >= trytimeout then break
sleep(1)
wend
if screen_shot then
doscmd("mkdir 画面ショット")
saveimg(uniqueFilename("画面ショット\処理不能.jpg"),,,,,,,25)
fileid=FOPEN(uniqueFilename("画面ショット\処理不能.txt"), F_WRITE)
FPUT(fileID, s+"で処理不能")
FPUT(fileID, "種別・追加指定 " + opttxt)
fput(fileID,"タイトル " +status(id,ST_title))
fput(fileID,"クラス名 " +status(id,ST_CLASS))
fput(fileID,"X座標 " +status(id,ST_X))
fput(fileID,"Y座標 " +status(id,ST_Y))
fput(fileID,"幅 " +status(id,ST_WIDTH))
fput(fileID,"高さ " +status(id,ST_HEIGHT))
// fput(fileID,"クライアント領域のX座標 " +status(id,ST_CLX))
// fput(fileID,"クライアント領域のY座標 " +status(id,ST_CLY))
// fput(fileID,"クライアント領域の幅 " +status(id,ST_CLWIDTH))
// fput(fileID,"クライアント領域の高さ " +status(id,ST_CLHEIGHT))
fput(fileID,"アイコン状態である " +status(id,ST_ICON))
fput(fileID,"最大化状態である " +status(id,ST_MAXIMIZED))
fput(fileID,"通常の表示状態である " +status(id,ST_VISIBLE))
// fput(fileID,"アクティブ状態である " +status(id,ST_ACTIVE))
// fput(fileID,"ビジー状態である " +status(id,ST_BUSY))
fput(fileID,"EXEのパス " +status(id,ST_PATH))
// fput(fileID,"プロセスID " +status(id,ST_PROCESS))
// fput(fileID,"64bitアプリである " +status(id,ST_WIN64))
fput(fileID,"表示されているモニタ番号 " +status(id,ST_MONITOR))

FCLOSE(fileID)
endif
if error_stop then
if MSGBOX(s+"で処理不能",BTN_IGNORE or BTN_ABORT) = BTN_IGNORE then
else
exitexit
endif
endif
if clearClkfukidasi then s() else s0(s+"で処理不能")
fend

procedure s(msg="",x=-999,y=-999)
if msg="" then
ctrlwin(_fuid2,hide)
exit
endif
if x = -999 and y=-999 Then
if status(_fuid1,st_visible) then
_x= Status(_fuid1,ST_x)
_y= Status(_fuid1,ST_HEIGHT)
else
_x=0;_y=0
endif
else
This._x = zcut(x)
This._y = zcut(y)
endif
This.msg=msg
fend
procedure s0(msg)
if testfukidasi then s(msg)
fend

Procedure _1()
While TRUE
r= This._2()
If r<>"" Then
GLOBAL.Fukidasi(r,_x,_y) // 吹き出し
this._fuid2 = getid(GET_FUKIDASI_WIN)
endif
If This._3() Then GLOBAL.Fukidasi() // 吹き消し
Wend
Fend

Function _2() // メッセージチェックと表示 msg,wait,_w
Result= msg
If msg="" Then Exit
_w= wait
msg= ""
Fend

Function _3() // タイマカウント _w
Result= FALSE
If _w<=0 Then Exit
_w= _w-0.1
Result= _w<=0
Sleep(0.1)
Fend
FUNCTION uniqueFilename(path)
DIM FSO = CREATEOLEOBJ("Scripting.FileSystemObject")
IFB FSO.FileExists(path) THEN
DIM fol = FSO.GetParentFolderName(path)
DIM filename = FSO.GetBaseName(path)
DIM extension = FSO.GetExtensionName(path)
DIM i = 2
WHILE FSO.FileExists(FSO.BuildPath(fol, filename + i + "." + extension))
i = i + 1
WEND
RESULT = FSO.BuildPath(fol, filename + i + "." + extension)
ELSE
RESULT = path
ENDIF
FEND

dim old_gmouse_X,old_gmouse_Y
procedure mouser(flg)
if flg then
lockhardex()
mmv(old_gmouse_X,old_gmouse_Y)
else
old_gmouse_X= G_mouse_X; old_gmouse_Y=G_mouse_Y
lockhardex(0)
endif
fend
procedure btn(p1,p2=click,x=G_mouse_X,y=G_mouse_y,ms=0)
mouser(false)
global.btn(p1,p2,x,y,ms)
mouser(true)
fend
procedure decodeClkopt(opt,var opttxt)
if (opt and CLK_BTN) <> 0 then opttxt=opttxt+"CLK_BTN + "
if (opt and CLK_LIST) <> 0 then opttxt=opttxt+"CLK_LIST + "
if (opt and CLK_TAB) <> 0 then opttxt=opttxt+"CLK_TAB + "
if (opt and CLK_MENU) <> 0 then opttxt=opttxt+"CLK_MENU + "
if (opt and CLK_TREEVIEW) <> 0 then opttxt=opttxt+"CLK_TREEVIEW + "
if (opt and CLK_LISTVIEW) <> 0 then opttxt=opttxt+"CLK_LISTVIEW + "
if (opt and CLK_TOOLBAR) <> 0 then opttxt=opttxt+"CLK_TOOLBAR + "
if (opt and CLK_LINK) <> 0 then opttxt=opttxt+"CLK_LINK + "
if (opt and CLK_ACC) <> 0 then opttxt=opttxt+"CLK_ACC + "
if (opt and CLK_SHORT) <> 0 then opttxt=opttxt+"CLK_SHORT + "
if (opt and CLK_BACK) <> 0 then opttxt=opttxt+"CLK_BACK + "
if (opt and CLK_MUSMOVE) <> 0 then opttxt=opttxt+"CLK_MUSMOVE + "
if (opt and CLK_RIGHTCLK) <> 0 then opttxt=opttxt+"CLK_RIGHTCLK + "
if (opt and CLK_LEFTCLK) <> 0 then opttxt=opttxt+"CLK_LEFTCLK + "
if (opt and CLK_DBLCLK) <> 0 then opttxt=opttxt+"CLK_DBLCLK + "
if (opt and CLK_FROMLAST) <> 0 then opttxt=opttxt+"CLK_FROMLAST + "
if (opt and CLK_API) <> 0 then opttxt=opttxt+"CLK_API + "
if (opt and CLK_UIA) <> 0 then opttxt=opttxt+"CLK_UIA + "
opttxt = copy(opttxt,1,LENGTH(opttxt)-2)

fend
EndClass

No.1453 2022/02/23(Wed) 20:20:50

Re: clkitem関数に再試行処理追加する方法について考えた時の自分用のメモ書き / stuncloud
https://gist.github.com/
No.1454 2022/02/23(Wed) 20:48:58
downup / seen
お世話になります。
記録ボタンでは、クリックと押下と押上の状態をそれぞれ
BTN(LEFT,CLICK,1591,257,109)
BTN(LEFT,DOWN,1591,257,219)
BTN(LEFT,UP,1591,257,593)
と取得できるのですが、マウスホイールの操作は仕様のようで、記録できません。
同じように、GETKEYSTATEでは、クリックがあったことしか知れません、クリックと押下と押上の状態を区別して取得、あるいは、マウスホイールの位置を取得する別の方法をご存知の方はいらっしゃいますでしょうか。

No.1445 2022/02/14(Mon) 12:33:00

Re: downup / stuncloud
メッセージループを書いてGetMessageA等でWM_MOUSEWHEELやWM_KEYDOWN、WM_KEYUPのメッセージが拾えればホイールの移動量やマウスボタンの状態は取れると思います
それをスクリプトにどう組み込むか?はちょっと難しそうですが

No.1446 2022/02/14(Mon) 20:23:29

Re: downup / seen
ありがとうございます、簡単にできないことがわかりました。
同じように、以下、2つのキーを同時押されたことだけであれば取得できたのですが、2つのキーを同時押されたこととそうでないことを区別できませんでしたので、このソフトではこれも区別する方法がなくできないということになりますでしょうか。
  Ifb GETKEYSTATE(VK_CTRL) and GETKEYSTATE(VK_C)
MsgBox("OK")
  elseif GETKEYSTATE(VK_CTRL)
MsgBox("x")
  elseif GETKEYSTATE(VK_C)
MsgBox("x")
endif

No.1447 2022/02/15(Tue) 14:06:08

Re: downup / stuncloud
modキー込みであればsethotkey()を使うという方法があります

sethotkey(VK_C, MOD_CONTROL, "ctrl_c")
sleep(10)
procedure ctrl_c
 msgbox("ctrl+cが押されました")
fend

それと
> GETKEYSTATEでは、クリックがあったことしか知れません、クリックと押下と押上の状態を区別して取得
について確認してみました
例えば左クリックなら、その都度getkeystate(VL_LBUTTON)を呼べば
・TRUEなら押されている
・FALSEなら押されていない
ことがわかります
getkeystate()を使ってください

あとついでに
> メッセージループを書いてGetMessageA等でWM_MOUSEWHEELやWM_KEYDOWN、WM_KEYUPのメッセージが拾えれば
もやってみましたが
・WM_MOUSEWHEELは拾える (ので計算すれば回転量はわかる)
 ・回転検出時のマウス座標や押されていたキー情報なども付随してくる
・WM_KEYDOWN、WM_KEYUPは拾えなかった
という結果になりました
ホイール回転量についてはこちらの方法でなんとかなりそうですね

No.1448 2022/02/15(Tue) 17:13:51

Re: downup / stuncloud
マウスホイールの回転を検出するサンプル

def_dll GetMessageA(var dword[], hwnd, dword, dword):int:user32
def_dll DispatchMessageA(var dword[]):int:user32
const WM_MOUSEWHEEL = $020A

dim msg[6] // hwnd, message, wParam, lParam, time, pt, lPrivate
logprint(true)
id = getid(GET_LOGPRINT_WIN)
while status(id, ST_VISIBLE)
 GetMessageA(msg,0,0,0)
 select msg[1]
  case WM_MOUSEWHEEL
   wparam = msg[2]
   lparam = msg[3]
   print (wparam and $FFFF0000) / $10000 // 回転情報
   print wparam and $FFFF // 一緒に押されたキー
   print
  default
 selend
 DispatchMessageA(msg)
wend
// 詳しくは https://docs.microsoft.com/en-us/windows/win32/inputdev/wm-mousewheel

No.1449 2022/02/15(Tue) 17:25:51

Re: downup / seen
ありがとうございます。
その都度getkeystate(VL_LBUTTON)を呼べば確かに、
・TRUEなら押されている
・FALSEなら押されていない
ことがわかりますが、押さなければ、常にFALSEとなるため、VL_LBUTTONとVL_RBUTTONの区別すらできない、押せばクリックと押下の区別ができないとなってしまいます、こちらのやり方、認識がどこか違っているのかとも思いますがいかがでしょうか。

No.1450 2022/02/15(Tue) 23:49:44

Re: downup / stuncloud
右ボタンの判定なら
getkeystate(VK_RBUTTON)
呼べばいいだけの話ですよね?

クリックか押し込みの判定も例えば一秒の間に複数回getkeystateを呼んで
・すべてTRUEなら押し込み
・FALSEになったらクリック
みたいに判定すればいいんじゃないですか?

> こちらのやり方、認識がどこか違っているのかとも思いますがいかがでしょうか。
えええ…?まあそれだとなんもかんも間違ってるんじゃないですかね…?
とりあえず手段をいろいろ提示はしたのであとは実際に手を動かして試してもらうしかないと思います
やってるうちにわかってくることもあるでしょう
正直そちらの目的がわからんので何が正解かはこちらではわかんないですよ…

No.1451 2022/02/16(Wed) 01:14:56

Re: downup / seen
すべてTRUEなら、FALSEになったらということも簡単にできず、ご迷惑をおかけしているようなので諦めます、お付き合いいただきありがとうございました。
No.1452 2022/02/16(Wed) 12:10:21
Edgeで名前をつけて保存ダウンロード / Utopian
お世話になります。
ブラウザ操作をIEからEdgeへの移行の最中なのですが、
名前をつけてダウンロード保存のやり方がわかりません。
以前は公式のQ&Aのスクリプトをそのまま利用していましたが、UWSCWebdriverでEgde操作して名前をつけてダウンロード保存のスクリプトを教えていただけると大変助かります。
ダウンロードしたい場所はボタンになっていて、ファイル名は毎回違います。宜しく願いいたします。

No.1439 2022/01/20(Thu) 16:26:01

Re: Edgeで名前をつけて保存ダウンロード / Utopian
ダウンロードはボタンを押すとすぐに始まります。ファイルは主にtxtかcsvファイルです
Edgeの設定→ダウンロード設定→ダウンロード時の動作を毎回確認する。でダイアログボックスを表示させて操作しようとしてもedgeの名前をつけて保存が操作できませんでした。contextclickが使えれば早いと思ったのですが、UWSCwebdriverには無いようで困っております。

No.1440 2022/01/20(Thu) 17:46:37

Re: Edgeで名前をつけて保存ダウンロード / stuncloud
クレクレはダメだよ


でも一応書いた
ダウンロード先のフォルダ変更なら以下でできます
ファイル名まで変更したい場合はダウンロード後に自分でやる
https://github.com/stuncloud/UwscWebDriver/wiki/%E4%BB%BB%E6%84%8F%E3%81%AE%E3%83%87%E3%82%A3%E3%83%AC%E3%82%AF%E3%83%88%E3%83%AA%E3%81%AB%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%92%E3%83%80%E3%82%A6%E3%83%B3%E3%83%AD%E3%83%BC%E3%83%89
こちらに対する質問は受け付けないのでわからないようならわかるようにがんばるか、諦めてください

No.1441 2022/01/20(Thu) 17:51:05

Re: Edgeで名前をつけて保存ダウンロード / stuncloud
今後もUWSCWebDriver関連でのサポートを希望する場合、正式な窓口は以下になります
https://github.com/stuncloud/UwscWebDriver/discussions

No.1442 2022/01/20(Thu) 17:56:21

Re: Edgeで名前をつけて保存ダウンロード / Utopian
返信ありがとうございます。初心者ながら以前作ったuwsファイルをwikiを見ながらedge仕様に改修しているのですが、ダウンロード周りの情報があまり発見できなかったためレベルの低い質問をしてしまい申し訳ありません。

ファイルのダウンロードを一日に何度も実行するため、すべてのファイルに名前を付け管理したいのです。UWSCwebdriverの場合はダウンロード前に名前を変更してからダウンロードすることができないのでしょうか?(名前を付けて保存ダイヤログから保存ができればディレクトリごと指定できるので楽だったのですが)

ファイル名の変更をダウンロード後に実行するやり方は試してなかったのでちょっと試してみます。ありがとうございました。

No.1443 2022/01/20(Thu) 18:36:43

Re: Edgeで名前をつけて保存ダウンロード / stuncloud
> UWSCwebdriverの場合はダウンロード前に名前を変更してからダウンロードすることができないのでしょうか?
できません
そういった操作はUWSCの機能(clkitem等)でやってもらう想定だったからです
でもChromium系はそのへんが思いの外困難なんですね

リンクを右クリックする、がSeleniumだとできるようなので同じような実装ができるかもしれないのですが、今はこちらに注力する余裕がないんですよ
逆に言えば余力があればやれないこともないのでgithubに要望を上げておいてもらうといいかも

右クリックでコンテキストメニューが出せればsckey等でファイル保存ダイアログを表示させるのも可能っぽい気がしますよね

No.1444 2022/01/20(Thu) 21:12:39

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

- HOME - お知らせ(3/8) - 記事検索 - 携帯用URL - フィード - ヘルプ - メール - 環境設定 -

- Skin: Modern v2.0 - Author: ロケットBBS -

Rocket Board Type-X (Free) Rocket BBS