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

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

ITM_EDITで取得できる項目の選択 / セシール
getitem(id,ITM_EDIT)で取得できる項目を番号で指定するなりしてクリック(選択)したいのですが、方法がわかりません…。
MMVとBTNの低レベル関数では可能とは思いますが、他に方法はあるのでしょうか?

No.1240 2021/03/07(Sun) 09:16:32

Re: ITM_EDITで取得できる項目の選択 / セシール
一応今も以下で思った通りの動作はできているのですが、

getitem(id, ITM_EDIT)

for i = 0 to length(ALL_ITEM_LIST) -1
if ALL_ITEM_LIST[i] = "選択したい文字列" then
getstr(id, i, STR_EDIT, TRUE)
btn(left, click)
endif
next

btnが何とも気持ち悪くお伺いさせていただきました。

No.1241 2021/03/07(Sun) 09:45:54

Re: ITM_EDITで取得できる項目の選択 / stuncloud
任意の値を持つエディットコントロールをフォーカスする関数を書いてみました
思ったよりでかくなった…

・使い方

id = getid("対象ウィンドウ")
print FocusEdit(id, "選択したい文字列") // TRUEなら成功
print FocusEdit(id, "選択したい文字列", 2) // 複数ある場合は順番を指定

// 空のエディットコントロールなら順番指定でうまいことやってください
// ただし順番指定はエディットコントロール全体ではなく
// 該当する値を持つエディットコントロールのみが対象です

print FocusEdit(id, "", n)

// [   ] nが1ならここが選ばれる
// [あ  ]
// [   ] 2ならここ
// [   ] 3ならここ

// 実装
// def_dllは関数の外に書いても大丈夫です
function FocusEdit(parent, text = "", count = 1)
 def_dll SendMessageA(hwnd, long, long, var string):long:user32
 def_dll SetFocus(hwnd):hwnd:user32.dll
 def_dll GetWindowThreadProcessId(hwnd, dword):dword:user32.dll
 def_dll AttachThreadInput(dword, dword, bool):dword:user32.dll
 
 result = FALSE
 for id in getallwin(parent)
  if status(id, ST_CLASS) = "Edit" then
   buffer = format(chr(0), 1024)
   h = idtohnd(id)
   SendMessageA(h, $000D, lengthb(buffer), buffer)
   if buffer = text then
    count = count - 1
    if count = 0 then
     edit = GetWindowThreadProcessId(idtohnd(parent), 0)
     self = GetWindowThreadProcessId(idtohnd(getid(GET_THISUWSC_WIN)), 0)
     AttachThreadInput(edit, self, TRUE)
     result = SetFocus(h) = h
     AttachThreadInput(edit, self, FALSE)
     break
    endif
   endif
  endif
 next
fend

No.1242 2021/03/07(Sun) 15:51:37

Re: ITM_EDITで取得できる項目の選択 / しろまさ
// こんな方法もあります

id = exec("notepad")
SendStr(id, "class位置テスト")
ScKey(id, VK_CTRL, VK_H) // 置換ウィンドウ呼出

idDlg = GetID("置換", "#32770", 2)
hdEdt = GetCtlHND(idDlg, "Edit", 2) // class指定でハンドル取得
idEdt = HNDtoID(hdEdt)
// オブジェクトのDlg内座標(相対座標)を作成
xEdt = Status(idEdt, ST_X) - Status(idDlg, ST_CLX)
yEdt = Status(idEdt, ST_Y) - Status(idDlg, ST_CLY)
MouseOrg(idDlg, 1)
 BTN(LEFT, CLICK, xEdt +7, yEdt +7) // 相対座標クリック
MouseOrg(0)

No.1243 2021/03/08(Mon) 10:44:49
(No Subject) / ななし
初めまして。自動化ソフトを探していてたどり着いたものなのですが、このソフトをVirusTotal無料オンライン スキャナーにかけたところ「Jiangmin Backdoor.Nhopro.i VBA32 TScope.Trojan.Delf」とでまして、バックドアが検出れましたが、感染は大丈夫なのでしょうか?

VectorからDLさせていただいたファイルはuwsc5302.zipです。
作者様が亡くなられているとも書かれていたので作った方には聞くこともできず、ソフトを使用されている方にお尋ねすればわかるかと思い書き込ませていただきました。

ウィルス感染の危険はないのでしょうか?

No.1230 2021/02/28(Sun) 16:57:44

Re: / stuncloud
ひとまず手元の無料版UWSC最終版の各ファイルでハッシュ値等を取ってみました
リリース当時に公式サイトからダウンロードしたもので、かつずっと使っていたのでウィルスの危険はないはずです
ダウンロードしたファイルと比較してみてください
一致していればひとまず安全だと言えるかと思います

Name : RecUws.dll
Version : 5.3.0.0
LastWriteTime : 2017/04/14 10:28:44
SHA256 : C2A3A54131FC0FE5ECD649F54E26BFA7285BA954551317C2078B96D30F23330A
MD5 : DBCAE6150B58C77E039F65CC15020DA9

Name : uwsc.chm
Version :
LastWriteTime : 2017/04/14 10:24:18
SHA256 : 232E5688818BFFD9EBCDFDFC99252A8BBC894E6C584017B8E81F057BE6D23A63
MD5 : 2AD28A29CF2F610797ED123361D94649

Name : UWSC.exe
Version : 5.3.0.2
LastWriteTime : 2017/04/18 12:45:00
SHA256 : 239EB98C44D5E0B8C19CE6ED3CC833196F35AE3AC644687634C8F87A1B168F00
MD5 : C6AD6EF474B01C9E99767C30EB81562A


UWSCは機能の性質上ウィルスのような動きもできる (そういうスクリプトを書けばそうなる) ので
場合によってはウィルス扱いされてもしかたがないのかもしれません

どうしても不安であればzipを展開せず破棄することをおすすめします

No.1232 2021/02/28(Sun) 17:17:13

Re: / ななし
stuncloud様
詳しい内容をありがとうございます。

ええと、自分がDLしてきたファイルの内容はこうでした。

Basic properties
MD5: 4cfd64dcf82368b43022c204d3543fd5
SHA-1: 3da26f1c7a824ea24fa04649dd432a1a8e9e48f7
SHA-256: 88f632e463fd040d207dc26f871fd03d888417795180e7159baf686e6fff3596

Vhash:27109745d38653ebf65c494cc434418f
SSDEEP: 24576:HHSsWwIpJKJ+PVGNM+KuZUxLe3zE1K+LQ34dDJPhkcNFFeKfI/3cCvYSvoIs6C2d:nlaKqcoTK+LQ6DJycNFFeiMLbvol/6
TLSH: T141653398F612FA814A4E653E4336D134A69C01A5FF0FB49270C57E7E274EF21B7E21A4
File type:ZIP
Magic:Zip archive data, at least v2.0 to extract
TrID:ZIP compressed archive (80%)
TrID:PrintFox/Pagefox bitmap (640x800) (20%)
File size 1.47 MB (1538235 bytes)
F-PROT packer:appended, Unicode

History
First Seen In The Wild 2017-04-18 05:23:42
First Submission 2017-04-18 05:24:22
Last Submission 2020-09-04 05:26:11
Last Analysis 2021-02-05 13:35:35
Earliest Contents Modification 2015-07-30 13:06:00
Latest Contents Modification 2017-04-18 12:45:00

Names
uwsc5302.zip
output.123933133.txt
uwsc5302 (1).zip
uwsc5302(3).zip
8d44c5b35f3a930f8f43b061d3d34ae83447c378
XXXuwsc5302.zip

みくらべてみましたが、これはダメみたいな気がしています。
DLできる場所がVectorしかなさそうなのでがっかりです。
他でソフトをDL出来る場所があればいいのですが……。

stuncloud様、相談にお答えいただきありがとうございました。

No.1233 2021/02/28(Sun) 18:29:01

Re: / stuncloud
や、僕は手元にzipがないので中身のexeだとかのハッシュ値を取っています
zipファイルと比較すれば異なるのは当然です
この比較は同一ファイル名でも中身が異なる可能性を示すためのものなので、そもそもぜんぜん別のファイルで比較したら意味ないです
抵抗がなければzipを展開し、中のuwsc.exeだけでもハッシュ値を取って比較してみてください

こんなことしなくてもVectorさんからダウンロードしてるなら特に問題はないはずなのですが
念の為という意味で返信をしました…しかし説明不足すぎでしたね
申し訳ない

No.1234 2021/02/28(Sun) 19:33:21

Re: / ななし
自分の知識不足でお手数おかけして申し訳ありません(汗
中身のexeと比べないと意味なかったんですね。試してみます。

実は書き込みをした後、おもいつきでインターネットアーカイブを使って今はなくなってしまった作者様のDLサイトが見れるか試してみたところ、そこからソフトをDLできまして、そのzipファイルがVectorさんにあるものと同じものでした。

だとしたらあのウィルス検知が誤検知の可能性もあるのか、試しに古いバージョンも片っ端からDLしてファイルごとウィルス検知にかけてみたところ(苦笑)ことごとくトロイとバックドアの検知をされるので、もう気にせず使ってみるしかないかな、と考えていたところです。

丁寧な返信、本当にありがとうございました!

あと、タイトル書き忘れ、申し訳ありませんでした!次の時は気を付けます!

No.1235 2021/02/28(Sun) 20:14:22

Re: / chonyada
参考になるかわかりませんが、社内で効率化のためスクリプトを作成して、同僚にわたすのですが、作成したものは、必ず、セキュリティに引っ掛かります。
ご自分で利用される分にはいいのですが、オフィス等でのご利用には向かないように思っています、Vectorにある多くの自動スクリプトにも、何か別の対策が必要な気がしています。

No.1238 2021/03/01(Mon) 10:25:09

Re: / ななし
chonyada様

親切に情報ありがとうございます。
ソフトは個人利用目的なので会社などで使うことはありません。
多くの人が使っているソフトですし、これで情報漏れが起こっていたのなら大騒ぎになると思うのですが、そういった情報漏れ騒ぎも見当たらなかったので大丈夫かなあと思いつつ使ってみようと思います。
しかし検知されて大丈夫って言われても不安は残るものですね……。

zipの中身確認したところ、uwsc.exeはstuncloud様が書き込んでくださった Name : UWSC.exeの物と数値が一致していましたので一応安心材料にはなりました。

お二方とも、相談に乗っていただいてありがとうございました!

No.1239 2021/03/01(Mon) 17:38:40
圧縮について / chonyada
お世話になります。
スクリプトの圧縮についてお伺いします。
現在、出来るだけ、空白を無くし、関数を多用することで起動が少しでも早くとしていますが、他に圧縮するなど0.1秒でも起動を早くする何か手立てはございますでしょうか、ご教示ください。

No.1229 2021/02/28(Sun) 12:36:30

Re: 圧縮について / stuncloud
今自分で字句解析や構文解析書いてるので

・変数の名前は短いほうがその分字句解析の処理は減る
・連続する空白は詰めたほうがその分字句解析の処理は減る
・同じような構文を複数書くくらいなら関数にまとめたほうが構文解析の処理は減る

くらいのことは言えますが…まぁだからどうしたレベルの誤差だと思われます

ただどうせなら実際試してみたほうが良かろうということで

・test.uws // 小さな関数定義のみ
  procedure p()
  fend
・UwscWebDriver.uws // 巨大モジュール、ただしコンストラクタはコメントアウト

いずれも実行する箇所がないので単純に解析の時間だけで比較ができるんじゃないかな?
ということでPowerShellのMeasure-Commandを10回ずつやってみました
uwsc.exeにそれぞれのスクリプトファイルを渡して実行し
実行時間をMeasure-Commandで計測します
Measure-Command {& 'C:\Program Files (x86)\UWSC\UWSC.exe' C:\test\test.uws}
こんな感じになります

するとどうだ
test.uws: 最短2.8ms、最長33.5ms
UwscWebDriver.uws: 最短2.5ms、最長14.9ms

思った以上に時間にばらつきがありましたね
とはいえこれ単位がミリ秒なのでつまり0.1秒にも満たない誤差なんですよね
そしてそれ以上にUwscWebDriver.uwsが小さなスクリプトより時間がかかるということがない
という点は注目に値します

どういうことかというと、
> 出来るだけ、空白を無くし、関数を多用する
したところで意味ないんじゃないの?という結論が出ちゃいそうなわけですよ…

のでスクリプトの書き方から起動を早くするというのはちょっとむずかしいので
スクリプト自体はのびのび好きなように書くのが良いかな?というお気持ち

じゃあ起動を早くしたい場合どうすんの!
という点ですが、UWSC自身の問題だと思うのでちょっとわかりかねます…
(他の方がなにか妙案を出してくれるかもしれないのでそこに期待ですね)

No.1231 2021/02/28(Sun) 17:00:59

Re: 圧縮について / しろまさ
起動を速くするには・・コードを少なくする! 起動時にチェックが入りますので
なんでもかんでも一つのファイルに機能を詰め込むと遅くなります。
Moduleなどに分けたとしてもCALLすれば結局遅くなります。

あくまで私個人がよくやる方法ですが、メインファイルは監視部とし、
分けられる機能は別ファイルに分け必要な時にExecやShellExecuteなどで処理させます。
これであれば機能部の起動時チェックは後で起こるので初回起動が速くなったように感じられます。

No.1236 2021/03/01(Mon) 09:30:39

Re: 圧縮について / chonyada
stuncloudさん、お忙しい所、ご丁寧な回答ありがとうございました。
体感はさほどでないとのこと、のびのび好きなように書くようにします。
しろまささん、1つにまとめることにこだわっていたのですが、再検討してみます、ありがとうございました。

No.1237 2021/03/01(Mon) 10:14:09
ポップアップ画面の処理について / リキュール
お世話になります。
以前の掲示板が閉鎖後、この掲示板があることを今日知りました。

id、pw 入力後のログイン画面で、下方に「パスワードを保存しますか?」という
ポップアップが表示されます。
表示されるボタンの処理はできるのですが、ポップ画面の右上の「×」で画面を
閉じたいのですが、どうしたらよいのでしょうか。
よろしくお願い致します。

No.1226 2021/02/27(Sat) 17:39:53

Re: ポップアップ画面の処理について / Rayna
>>1226 リキュール さん

そのポップ画面がウインドウなら GetId で ウインドウIDを獲得して
CtrlWin とか ScKey で [ALT]+[F4] とか [ALT]+[Space]+[C] とか [Esc] とかで閉じれます

IE等のポップアップならポップアップにフォーカスの後[Esc]で消えますね

// 右クリックでフォーカスを移す
ClkItem(idWndIE, "このサイトではしない", CLK_BTN Or CLK_RIGHTCLK)


・以下調べてないけどもしかしたら出来るかもしれない事
IEならDOMとか使ったらUI操作じゃなくても閉じれるかも
ChromeとかFirefoxとかChromium EdgeならWebDriverで閉じれるかも

No.1227 2021/02/27(Sat) 20:05:36

Re: ポップアップ画面の処理について / リキュール
Rayna さん、お世話になります。

msgid = HNDtoID(GETCTLHND(id,"DirectUIHWND",2)) //パスワード保存
ifb CLKITEM(msgid,"このサイトではしない",CLK_ACC or CLK_BACK,False)
sleep(0.5)
KBD(VK_ESC)
endif

上記のESCキーで解決しました。
ありがとうございました。

No.1228 2021/02/27(Sat) 23:27:43
動作確認 / sousou
お世話になります。
uwscを起動すると、タスクマネージャにUWSCが動作中であることが表示されているのですが、たとえば、fukidasi("10秒");sleep(10);
と吹き出しやsleepなど、各動作にたいしても、パフォーマンスやアプリ状態など、PC内のどこかに各々の機能が動作していることを見つけることができますでしょうか。
自分なりに探してみましたが、変化がわからなかったので、ご教授いただけますと幸いです。

No.1214 2021/02/23(Tue) 10:10:04

Re: 動作確認 / stuncloud
実行している関数毎のパフォーマンス?が得たいということですか?
> PC内のどこかに各々の機能が動作していることを見つけることができますでしょうか。
申し訳ないんですがちょっと何が言いたいのかがわからなくて回答に困りますね…?
基本的にはuwsc.exeの状態を監視するほかないと思います…よ…?

https://stuncloud.wordpress.com/2013/08/19/uwsc_perfmon/
僕は昔こんなことしてたようです
関数を呼び出す前から呼び終わった後のパフォーマンス計測なんかはこれでできると思います

それとも、どのタイミングでどの関数が呼ばれていたかを確認したいというのであれば例えば

print "sleep(10)実行中"
sleep(10)

といった感じで逐一printしておけば
・(print窓を見て)今sleepが呼ばれている
・(printが吐いたログファイルを見て)何時何分にsleepが呼ばれた
といった情報は得られると思います


どのような目的でどのような情報が必要か?を具体的に書いていただけるともう少し的確なアドバイスができると思います

No.1215 2021/02/23(Tue) 15:38:51

Re: 動作確認 / sousou
ありがとうございます。
実行している関数毎のパフォーマンス?が得たいということではありません。
実行している関数が、途中で制御できなくなる場合があり、いつもではないのですが、uwsc自体をタスクマネージャで消しても動作が停止しない場合があります。
uwscで、たとえば、sleep中である場合とsleepが停止された場合で、パフォーマンスということでなく、そもそも、uwsc自体の関数自体が、windowsの機能の部分を利用しているわけで、関数を利用=windowsのどこかの機能をつかっているはずで、それを、UWSCのログ等でなく、PC内のどこかで確認する手立てがないものか知りたく投稿させていただきました。
当方、そこらへん素人ですので、おかしなことを言っているかもしれませんが、ご勘弁ください。

No.1216 2021/02/23(Tue) 17:47:14

Re: 動作確認 / stuncloud
> たとえば、sleep中で
例えば、ではなく具体的にお願いします

> 実行している関数が
それはどの関数ですか?

> 途中で制御できなくなる場合があり
制御できないというのはどのような状態ですか?

> uwsc自体をタスクマネージャで消しても動作が停止しない場合があります
なんの動作が停止しないのですか?

> PC内のどこかで確認する手立てがないものか知りたく投稿させていただきました。
現時点では情報が不足しているためあるともないとも言い切れません
(状況によって確認する手立ても変わるので)

No.1217 2021/02/23(Tue) 20:48:09

Re: 動作確認 / cho
自分が考えている問題点を第三者に伝えようとするのは難しいですよね(語彙力)

sousouさんは問題を発見した。それを解決する方法を自分で考えた。
しかし、解決する方法を実現するのに、こんなことは出来ないかと質問した。

と言う感じでしょうか。先日の私のEVALの質問もこんな感じですみません。

ということで、問題の方を推理してみました。

?@ UWSCのSTOPボタンを押しても処理が終わらず、
  フリーズ状態になるのでタスクマネージャーで強制終了している。
  UWSCはタスクから消えるけど、UWSCによって起動されたWindowsの何かのアプリが処理を続行したまま停止しない。

?A STOPボタンを押して、毎回ではないけどUWSCがフリーズする。
  フリーズ(UWSCの処理が終わらない)の原因を見つけたい。
  関数を利用=Windowsのどこかの機能を使っている というのが解釈の違いになっている気がします。
  関数はWindowsの機能(DOSコマンドやpowershellなど)を使うこともできますが、明確に記述する必要があります。
  SLEEPやFUKIDASIなんかは、終了しても残るような別処理するWindowsの機能を使っていないと思いますよ。

?B タスクマネージャーで終了してもUWSCが消えない


たぶん?Aだと仮定して。
?Aであるなら、
 ・WHILEなどを使った多重ループ処理中にSTOPボタンを押すとフリーズする経験があります(SLEEPなしの拷問状態)
 ・タスクマネージャーでUWSCを見ると、UWSCが処理している状態
  UWSC(32ビット)(処理中の数)
  を確認できます。
  この中に、DOSコマンドを使った時に生成される
  Windows Command Processor や
  コンソールなんちゃら
 があると終了時にフリーズすることが多いです(回避策あるなら便乗して知りたいです)

その他の問題であれば、ぜひ質問内容を一問一答できるように整理して再質問お願いします。
(私は回答できる技量を持っていませんが・・・)

私もタスクマネージャーでUWSCの状態を取得したいと考えていた時期がありますが、
状態の変化を探す。ではなく、処理を順番に検証していって、どこの処理でフリーズする不具合があるか見つける方針が良いと思いますよ。

No.1218 2021/02/24(Wed) 14:50:52

Re: 動作確認 / sousou
stuncloud様、おっしゃる通りです、スクリプトの提示もなく、あいまいな質問でおしえていただきたいという甘い考えでした。
正直、ごちゃごちゃなスクリプトがだらだら長く重なっており、恥ずかしく提示できないことお許しください。
ただ、フリーズ?の原因は、こちらでそれこそ、1つ1つ、printなど分解確認して、時間をかけてでも自己解決しようと思っております。

cho様、ありがとうございます、ご推察の?@となります、確かに、WHILEを使った多重ループ処理中にSTOPボタンを押すとフリーズする(SLEEPなしの拷問状態)、まさに、このような感じです、タスクマネージャーで見ると、UWSC(32ビット)(処理中の数)を確認できるとのことですが、変化を確認できず、UWSC(32ビット)を消しても、処理が終わらない、ようやくして、何分か後に停止されるため、UWSC(32ビット)でない、怪しいのは、データを掴んでくる所と繰り返しsleepなので、たとえば、単純なsleep関数であっても、UWSC(32ビット)以外のどこかに、別の動きがあるはず、なればそこを無理やりでもそこをdosで停止させれば、単純に、処理が終わらないというようなことはなく、一瞬で処理を停止できるのではないかとの考えです。

質問の真意は、フリーズする不具合を見つけたいというのでなく、uwsc関数=Windowsのどこかの機能を使っている と思っていたのですが、そこが、違っているのか、そうでなければ、UWSC(32ビット)をタスクマネージャで消して終わらないのは、何故か、単にフリーズしているわけではないようなので。。(答えようないですよね)
ただ、スクリプトにcmdを使っているわけでないので、Windows Command Processor やコンソールなんちゃらのせいではないような気がしています、ぼんやりな質問回答でまことに申し訳ございません。

No.1219 2021/02/24(Wed) 16:34:42

Re: 動作確認 / stuncloud
> 質問の真意は、フリーズする不具合を見つけたいというのでなく、uwsc関数=Windowsのどこかの機能を使っている と思っていたのですが、そこが、違っているのか、そうでなければ、UWSC(32ビット)をタスクマネージャで消して終わらないのは、何故か、単にフリーズしているわけではないようなので。。(答えようないですよね)
今回のポイントはsousouさんが問題を認識しているものの原因がわからないので当たりをつけて(uwsc関数=Windowsのどこかの機能を使っている)みたものの、どうしたらいいのかさっぱりわからない、というとこなんですよね
こうなると自分が当たりをつけた部分に必ず正解がある、と盲信してしまうもので、そこからの解決方法を求めがちです
しかしこういった場合そのアプローチはほとんどの場合的外れであったりするものです
これは人類が抱える重大な不具合でわりと不可抗力な面はあります、だからそうなるのはしょうがない

で、今回sousouさんがどうすべきだったかというと
・ある関数を実行すると制御不能になる場合がある
・その部分はこのようなコードである(該当コードの抜粋)
・このような場合に試みたこととして
 ・タスクマネージャからuwscのプロセスをkillしたが不都合が生じた
というような感じで事実だけ伝えてもらうことだったんですね
そして
・uwsc関数=Windowsのどこかの機能
のような不確定な考察は別になくても良いです

大切なのは実際の現象とコードが提示されていることで
それを元にこちらも検証コードを書いたり再現性を詰めたりできるのです
(そして言うまでもなく100%再現するコードがあると解決も早いので理想なのですがこれがなかなか難しいんですよね)

ある程度調査されてそれでも行き詰まるようでしたらまたご質問ください
こういうケースは現象が起きてしまってから原因を取り除く、よりも現象が起きないようなコードを書くほうが良い場合が多いので、そっち方面での助言などもできるやもしれません

No.1220 2021/02/24(Wed) 18:56:51

Re: 動作確認 / cho
> WHILEを使った多重ループ処理中にSTOPボタンを押すとフリーズする(SLEEPなしの拷問状態)、まさに、このような感じです

この問題でしたら私にも経験があります。

> 何故か、単にフリーズしているわけではないようなので

「毎回フリーズするわけではない」というキーワードと、このフレーズで思い当たることがありますが、
もしかしてTHREADも使っていませんか?
メイン処理が多重ループのうえに、他に並列(THREAD)で多重ループを処理している状態。
このような場合は高い確率でUWSC終了時にフリーズします。

メイン処理を終了させたのに、並列処理が終了できない(ちょうどループ処理真っ最中)
運よく並列処理がループ中ではないか、SLEEP中などで終了処理を正常に受け付けてくれることもある。

Windowsの何かの機能でなく、UWSCの別処理が停止しないという現象でしたら、
先ほどの?Aに該当しそうですね。

でも、?@とおっしゃっていたので、ホントに何かのアプリが起動していて(フリーズ状態で)終了していないのかもしれません。

的外れでしたらごめんなさい。
的外れでなければ、再質問してくださいね。

問題は1つのコードに起因するものではなく、全体の構造にあるのだと思います。
一つ一つの処理は正常に動くからコードの提示がしにくいですよね。
初心者(私含む)が質問する時に躊躇するジレンマです(笑)

No.1221 2021/02/24(Wed) 21:23:20

Re: 動作確認 / satocha
> 正直、ごちゃごちゃなスクリプトがだらだら長く重なっており、恥ずかしく提示できないことお許しください。

ここで提示できるようスクリプトを整理する作業を行うことをお薦めします。

本質的でない処理をしているところは
print "〜の処理"
のようにまとめ、全体を整理して構造文(while〜wend、for〜nextなど)や関数呼び出しなど処理の流れがはっきり分かるようにしていきます。

実は、このような作業を行うことで自分で間違いに気づき問題が解決してしまうことも少なくありません。

コードを見せることは確かに恥ずかしいと思うかもしれませんが、コードを人に見てもらうことはプログラミング上達の近道です。

「コードレビュー」という言葉で検索してみるとそこらへんの事情が分かると思います。

No.1222 2021/02/24(Wed) 22:25:40

Re: 動作確認 / sousou
皆様ありがとうございます、頭が固いのでしょうか、どうしても、uwsc関数=Windowsのどこかの機能を使っているから、その何かがどこかにあるはず、それを知りたいという思いに囚われています、コードは、整理してできましたら、再度投稿という形でまた提示できるようがんばって見ます。
No.1223 2021/02/25(Thu) 07:50:51

Re: 動作確認 / しろまさ
固いと思います。
ほとんどの場合、問題はコード自体にあります。
思い込みに捕らわれず、関数を使って処理を機能別に細分化してください。
どこでその問題が起こるのかが判断できれば、対策もしやすいはずです。

No.1224 2021/02/25(Thu) 09:06:49

Re: 動作確認 / sousou
'対策'が目的ではでなく、Windowsの機能とソフト自体の質問でしたが、質問場所を間違えました、お騒がせしました。
No.1225 2021/02/25(Thu) 11:08:25
FCLOSE関数の引数をTRUEにした場合のデメリット / takahi
FCLOSE関数はデフォルト値が「エラーダイアログを出す」ですが
確かに書き込みエラーになったのに、それが分からないようでは不都合が起きると思っていたのですが、
最近「エラーダイヤアログを出さない」というオプションがあることを知り、
しかもそれは書込みが正常終了するまで再試行してくれることが分かりました。

「エラーダイヤアログを出さない」のデメリットが思いつかないのですが、
何かありますか? 
(※ 雑談で済みません)

No.1205 2021/02/18(Thu) 19:22:09

Re: FCLOSE関数の引数をTRUEにした場合のデメリット / stuncloud
> しかもそれは書込みが正常終了するまで再試行してくれることが分かりました。
これがまさにデメリットになるかと思います
正常終了が不可能な場合に不都合が生じることが予想されます

それはそうと書き込みエラーが生じる状況がそもそもよくないのでそこはエラーハンドリングしたいですよね…
tryでどうにかなるのだろうか?

No.1207 2021/02/18(Thu) 20:08:55

Re: FCLOSE関数の引数をTRUEにした場合のデメリット / takahi
なるほどですね
自分の場合は別プログラムからの読み込みと書込みがぶつかった時に出るエラーでしたので、再試行でいつかは必ず正常終了してくれていたのですが、
正常終了が不可能な場合は困りますね。

それにしても、プログラムを一旦中断させるのではなく、logにだけ残す仕様にしてもらいたかったです。

No.1208 2021/02/18(Thu) 23:32:11

Re: FCLOSE関数の引数をTRUEにした場合のデメリット / stuncloud
try使えますね

try
 fclose(fid, FALSE)
except
 print TRY_ERRMSG // ファイルに書き込めない場合printされる
endtry

また、readonlyのファイルにfclose(fid, TRUE)した場合は、程なくスクリプトが終了していました
ちゃんと調べていないので最大リトライ回数が設定されているのか、あるいはreadonlyだったので処理をやめたのかは不明です

# UWSCRでは明示的にリトライできる仕組みにしようかな?

No.1209 2021/02/19(Fri) 11:05:52

Re: FCLOSE関数の引数をTRUEにした場合のデメリット / takahi
済みません、Trueにしたら正常終了するまで再試行してくれる、と思ったのですが
間違いのようでした、、、

以下が私が検証用で使ったプログラムなのですが

//読み込み.uws
for i = 1 to 20000
f = fopen("test.txt") ; a = fget(f,1) ; fclose(f)
next

//読み書き.uws
r = 1
for i = 1 to 1000
f = fopen("test.txt",F_WRITE or F_READ) ; fput(f,r + " あいうえおアイウエオ " +i)
r = fclose(f,true)
next

同時に走らせると、デフォルトのままだとエラーが表示される、trueにするとエラーが表示されず
しかも変数iは連番で出力!と思ったのですが、
test.txtが大きくなるにつれて変数i は飛び番で出力されてしまいました。
単にtest.txtが小さいときはエラーにならなかっただけでした、、、汗

スキップされたのが気付かないのは運用上困るので、悩み中です。

#はい、リトライしてlogにだけ残す仕様にしてもらうと有り難い限りです。

No.1210 2021/02/19(Fri) 19:48:01

Re: FCLOSE関数の引数をTRUEにした場合のデメリット / stuncloud
> スキップされたのが気付かないのは運用上困るので、悩み中です。
上にも書きましたがFALSE指定しつつtryで囲めばダイアログを抑制しながら書き込みエラーをexcept部で検出できるので、それで対処するのが良いと思います

// 例:書き込み失敗時は5回までリトライする
logprint(FALSE)
for i = 1 to 5
 try
  fclose(fid)
  break // 書き込み成功したのでforループを抜ける
 except
  // 書き込みエラー
  print TRY_ERRMSG // ログを書く
  sleep(5) // 5秒後に書き込みをリトライ
 endtry
next
logprint(TRUE)

No.1211 2021/02/19(Fri) 23:57:13

Re: FCLOSE関数の引数をTRUEにした場合のデメリット / しろまさ
UWSCはfopen時に内容を全てメモリ展開しfclose時に保存する方式の為、
ファイルが大きくなってくるにつれ時間が長く掛かります。
排他無しで連続で開けた場合は最後に閉じたものが優先となりログ飛びが起こります。

Scripting.FileSystemObjectのOpenTextFileを使用し、
IOMode ForAppending=8でファイルストリームを開き、
行末追加を行うことで対策できます(社用ログはそれで行っている)

 o_Fs = CreateOleObj("Scripting.FileSystemObject")
 o_ts = o_Fs.OpenTextFile(_Path, _IOMode, TRUE)
 o_ts.WriteLine(_Log)
 o_ts.Close()

例外処理等いろいろ省いてますので自身で試行錯誤してください。

No.1212 2021/02/20(Sat) 09:15:03

Re: FCLOSE関数の引数をTRUEにした場合のデメリット / takahi
しろまささん有難うございます。
Scripting.FileSystemObjectとても良いですね。
わざわざ毎回CloseしなくてもWriteLine(_Log)した時点で書き込んでくれるので
とても早いし、読み込みとぶつかることもありません。

今のところ全て正常終了なので例外処理が分かりませんでしたが、これから色々調べます。

No.1213 2021/02/20(Sat) 15:12:32
エラー / あんき
リンクボタンを押すと以下のエラーが出るのですが、意味を辞書で引いてもわかりません、何か対処の仕方ございますでしょうか。
for-next could not convert variant of type (dispatch)into type (oleStr)
for elem in obj.document.GetElementsBY TagName("input")

No.1203 2021/02/18(Thu) 18:05:17

Re: エラー / Rayna
>>1203 あんき さん
 Dispatch型(オブジェクト)からoleStr型に型変換失敗してますね
 Dispatch型に For-In 出来るコレクションがないだけだとメンバーが見つかりませんとでるので
 obj.document.getElementsByTagName("input") に NOTHING が返ってるとかですかね

 渡そうとしてるオブジェクトをPrintするなりして内容を確認してみてください

No.1204 2021/02/18(Thu) 18:39:37

Re: エラー / stuncloud
> GetElementsBY TagName
ここの半スペのせい?かも?
(通常なら文字列にする処理が不要な気がするので)

No.1206 2021/02/18(Thu) 20:02:24
反応がない / sousou
お世話になります。
以下、簡単なものなのに、ボタンを押しても反応が遅い、反応しない場合(ダブルクリックなど)があります、多くのボタンがある場合、必ず反応しないと誤動作になります、一瞬でも押したら、必ず反応させる方法はありますでしょうか。
最低でも1つのボタンは、確実にダブルクリックでも2回表示させたいのです。

obj = CREATEFORM("about:blank", "Calc", True, FOM_NOHIDE) 
obj.Document.write(計算フォーム)      
while obj.Visible              
  if GETFORMDATA("CalBtn1") then print "1" 
  if GETFORMDATA("CalBtn2") then print "2" 
wend

TextBlock 計算フォーム  
 <form method='POST'>        
<input type='submit' value=' 計算1 ' name='CalBtn1'>

<input type='submit' value=' 計算2 ' name='CalBtn2'>

 </form>
EndTextBlock

No.1199 2021/02/18(Thu) 10:48:06

Re: 反応がない / stuncloud
oleeventを使います
oleeventによりボタンがクリックされた際に任意の関数を実行できます

-------
obj = CREATEFORM("about:blank", "Calc", True, FOM_NOHIDE)
obj.Document.write(計算フォーム)

// クリック時のイベントハンドラを指定
// ここではすべてのinput要素に対して指定を行う
for elem in obj.document.GetElementsByTagName("input")
 oleevent(elem, "HTMLInputTextElementEvents2", "onclick", "onclick")
 oleevent(elem, "HTMLInputTextElementEvents2", "ondblclick", "onclick")
next

while obj.Visible
 sleep(0.1)
wend

TextBlock 計算フォーム  
 <form method='POST'>        
<input type='submit' value=' 計算1 ' name='CalBtn1'>

<input type='submit' value=' 計算2 ' name='CalBtn2'>

 </form>
EndTextBlock

// ボタンクリック時に呼び出される関数
procedure onclick()
 select EVENT_PRM[0].srcElement.name // イベント元になるエレメントのnameにより処理を分岐
  case "CalBtn1"
   print 1
  case "CalBtn2"
   print 2
 selend
fend
-------

oleeventを2回呼んでる理由は
・onclickだけだとダブルクリック時の2回目のクリックを取りこぼす
・ondblclickでダブルクリック時のイベントを拾えるので取りこぼしをカバーできる
からです

No.1200 2021/02/18(Thu) 11:54:45

Re: 反応がない / sousou
stuncloud様ありがとうございます、oleeventの使い方研究します。
No.1202 2021/02/18(Thu) 15:18:23
オブジェクトの状態取得 / あかは
会社で使っているソフトに ファンクションバー というのがあります。
ファンクションバーの表示状態を確認したいのですが、ファンクションバーはカスタマイズ可能なので、できれば画像判定以外で確認したいと思ったのですが、行き詰まってしまいました。

とりあえず getid(get_frompoint_obj) でIDを取得して st_title と st_class を確認したところタイトルは無しで、クラスはBCGPControlBar:40000000:8:10003:10でしたので、これでIDを取得してst_visibleで確認しようかと思いまして、

getid("","BCGPControlBar:40000000:8:10003:10")を試しましたが-1が返ってくるので見つからないのだと思います。
(まあ本来ウィンドウのIDを返す関数らしいので、当然なのでしょうが)

なにか良い手段がありましたらご教授お願いします。

No.1195 2021/02/17(Wed) 14:03:57

Re: オブジェクトの状態取得 / stuncloud
そのファンクションバーのあるウィンドウのIDをgetidで取得し

bFunctionBar = false
for cid in getallwin(id)
 if pos("BCGPControlBar", status(cid, ST_CLASS)) > 1 and status(cid, ST_TITLE) = "" then
  bbFunctionBar = true
  break
 endif
fend

if bFunctionBar then
 msgbox("ファンクションバーがありました")
else
 msgbox("ファンクションバーはありませんでした")
endif

みたいなことができるかもしれません
これは BCGPControlBar から始まるクラス名を持つ子ウィンドウが他にない場合に有効です
なんなら BCGPControlBar:40000000:8:10003:10 をposに渡してもいいかもしれませんが
後ろの数値のあたりが一意かどうかあやしい (起動する度に変化するということもあるかも?) ので
このような書き方にしてみました
> getid("","BCGPControlBar:40000000:8:10003:10")
が-1だったということもありますし

あとそもそもの話で getid(get_frompoint_obj) したものが本当にファンクションバーかも疑わねばなりません
(実は見えてるもののIDじゃなかったということがよくあるので…)
なので getallwin(id) で子ウィンドウ一覧が取れるようであれば、ファンクションバーの有無でその状態を確認する
という作業が必要になるかもしれません

for cid in getallwin(id)
 print status(cid, ST_CLASS) // クラス名調査用
 print status(cid, ST_VISIBLE) // 可視かどうか (ファンクションバーがなくても子ウィンドウとしては存在してて見えてないだけ、かどうかの確認)
 print status(cid, ST_CLX) // クライアント座標を確認することでおおよそどのへんにあるかわかる
 print status(cid, ST_CLY) // 同上
fend

など必要に応じてstatus()していく

No.1196 2021/02/17(Wed) 15:52:25

Re: オブジェクトの状態取得 / Rayna
>>1195 あかは さん
 子ウインドウを獲得する場合は
 GetCtlHnd か GetAllWinの子ウインドウ列挙 を使います
 親ウインドウIDが取れてれば獲得できるはず...

 うまく行かない場合は GET_FROMPOINT_OBJ で得たIDの ST_PARENT を
 辿っていくとどれが親かわかりやすいです


//| 追記(2021/02/18) |//////////
// 上げるほどのことでもないので追記
// GetCtlHnd の戻値ですが割と組込関数でなんとかなっちゃいます

 Dim idWnd = GetId(GET_ACTIVE_WIN) // = GetId([Window Title], [Window Class])
 While idWnd=GetId(GET_ACTIVE_WIN)
  Sleep(0.1)
 WEnd
 idWnd = GetId(GET_ACTIVE_WIN)
 Dim idWndCtl = HndToId(GetCtlHnd(idWnd, "BCGPControlBar:40000000:8:10003:10"))
 IfB GetId(GET_ACTIVE_WIN)=idWnd Then
  IfB Status(idWndCtl, ST_VISIBLE)=TRUE Then
   Print GetWinNameStrs(idWndCtl)+" は表示状態"
  ElseIf Status(idWnd, ST_ISID)=FALSE Then
   Print "親が獲得できてないか閉じられている"
  ElseIf Status(idWndCtl, ST_ISID)=FALSE Then
   Print "子が獲得できてないか閉じられている"
  Else
   Print GetWinNameStrs(idWndCtl)+" は非表示状態"
  EndIf
 EndIf
 Print

 PutChildWindowTree(idWnd) // ウインドウ親子関係一覧出力
 While Status(GetId(GET_LOGPRINT_WIN),ST_VISIBLE);Sleep(0.7);WEnd
 Procedure PutChildWindowTree(idWnd, nIndent=0)
  Dim idWndCtl, sIndent=Format(" ", (nIndent+1)*2)
  If nIndent=0 Then Print GetWinNameStrs(idWnd)+" の子ウインドウ一覧"
  For idWndCtl In GetAllWin(idWnd)
   If Status(idWndCtl, ST_PARENT)<>idWnd Then Continue
   Print sIndent+GetWinNameStrs(idWndCtl)
   PutChildWindowTree(idWndCtl, nIndent+1)
  Next
 FEnd
 Function GetWinNameStrs(idWnd)
  RESULT = "[<#DBL>"+Status(idWnd,ST_TITLE)+"<#DBL>, <#DBL>"+Status(idWnd,ST_CLASS)+"<#DBL>]"
  RESULT = Replace(RESULT, "<#CR>", "<CR>") // Editコントロールとかでテキストが ST_TITLE になってるの対策
 FEnd

No.1197 2021/02/17(Wed) 16:01:07

Re: オブジェクトの状態取得 / しろまさ
// GetCtlHnd例(VncViewer例 要変更)

//ウィンドウIDの取得
  id_W = GetID("New TightVNC Connection", "#32770", 0.2)
  hndW = GetCtlHND(id_W, "Button", 2)
// hndW = GetCtlHND(id_W, "BCGPControlBar:40000000:8:10003:10", 1)

//objClass[ Button ]の取得と設定
  o_Text = objText(hndW)  // 取得 o_Text= "&Connect"
  MsgBox(o_Text)
  objText(hndW, "asd")  // 設定
// objText(hndW, "asd", TRUE)  // 設定(入力確認付)

Function  objText(hndW, a_SetText = NULL, a_ChkText = FALSE)
  Result  = ""
  Dim Buff  = Format(ChrB(0), $FF), tBuff
  Ifb  a_SetText <> NULL
    SendMessageA(hndW, WM_SETTEXT, 0, a_SetText)
    Ifb a_ChkText
      Repeat
        tBuff  = Buff
        SendMessageA(hndW, WM_GETTEXT, $FF, tBuff)
      Until  Trim(tBuff) = a_SetText
    EndIf
  Else
    If  SendMessageA(hndW, WM_GETTEXT, $FF, Buff) > 0  Then Result  = Trim(Buff)
  EndIf
FEnd
DEF_DLL  SendMessageA(HWND, UINT, LONG, var PCHAR) :LONG :user32.DLL
  Const  WM_SETTEXT  = $000C
  Const  WM_GETTEXT  = $000D

No.1198 2021/02/17(Wed) 16:57:14

Re: オブジェクトの状態取得 / あかは
みなさんありがとうございます。

ウィンドウにくっついているオブジェクトも、ウィンドウという扱いで良いのですね。
とりあえず getallwin()で子ウィンドウを数えたところ、60もあるので
>>1196
を参考に

wID = getid(,"Afx")
for cID in getallwin(wID)
if pos("BCGPControlBar",status(cID, st_class)) then print "★★★★"
print "cID("+ cID + ") = " + status(cID, st_class)
print status(cID, st_visible)
print "X= " + status(cID, st_clx) + ", Y= " + status(cID, ST_CLY)
print "W= " + status(cID, st_clwidth) + ", H= " + status(cID, st_clheight) + "<#CR>"
next

とスクリプトを書いて実行したところ、表示状態の違いで

★★★★
cID(37)= BCGPControlBar:40000000:8:10003:10
True
X= 0, Y= 1033
W= 1920, H= 22

★★★★
cID(19)= BCGPControlBar:40000000:8:10003:10
False
X= 0, Y= 24
W= 318, H= 223

とそれぞれ確認できました。

親ウィンドウの st_title は 業務毎に異なり、st_class は Afx〇〇(〇〇は変動する)でかつ、別の作業で立ち上げているウインドウもクラスが Afx〇〇(しかもそれぞれのウィンドウにファンクションバーがあり、表示状態が異なる)
なので、一意の値での特定が困難なのですが、アクティブウィンドウを対象にする事でなんとかできそうです。(お茶を濁すとも言う)

No.1201 2021/02/18(Thu) 11:59:48
このエラーはなんでしょうか? / 太郎
おせわになります。
毎朝モニターを入れるだけの簡単なプログラムなのですが
今朝下記のようなエラーのポップアップがでておりました。
このエラーは一体何なのでしょうか?
external exception c0000006

No.1193 2021/02/17(Wed) 09:31:43

Re: このエラーはなんでしょうか? / stuncloud
このへんですかねぇ
https://stackoverflow.com/questions/1317886/external-exception-c0000006
これはアプリケーション自身が取り外し可能なディスクに置いてあり、自身を実行中にそのディスクを取り外すとこのエラーが発生するという話、ですかね
プログラム全部をメモリにロードするようにして回避しなされ、ということみたいですね

ほかにも検索するといろいろ出てくるんですが、以下であれば
https://wiki.agencysystems.com/wiki/Error:_External_Exception_C0000006
アプリケーションが共有フォルダに置かれていて途中でそこへのアクセスが失われるとこのエラーが出るという話っぽいです

要するに途中でUWSC.EXEかあるいは必要なDLLだとかにアクセスできなくなってる?ということでしょうかね?

なので

UWSC自身、スクリプト、またはその両方が共有フォルダに置いてあるのであればローカルに置いてみる
いずれもローカルにあるのにこの現象が発生するならファイルIOがおかしくなってるかもしれないのでCHKDSKなどによる診断や修復を試みる
それでもどうにもならないならストレージを交換する

といった対処法がもしかしたら有効かもしれません
エラーが頻発するようでしたらお試しください

No.1194 2021/02/17(Wed) 11:07:17

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

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

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

Rocket Board Type-X (Free) Rocket BBS