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

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

THREAD処理で刻々と変わる変数の値を取得したい / YMK
題材の件、並行処理で変わる変数の値を、本スレッドで取得するにはどうすれば良いのでしょうか

//パブリック変数にしたけど上手くいかない
PUBLIC a = 0
THREAD test(a)
for i = 1 to 30; print a ;sleep(0.2);next //i=6以上では「1」を返して欲しいところだけど
sleep(5)

PROCEDURE test(a)
sleep(1)
a = 1
FEND



//参照引数にしても上手くいかない
a = 0
THREAD test(a)
for i = 1 to 30; print a ;sleep(0.2);next //i=6以上では「1」を返して欲しいところだけど
sleep(5)

PROCEDURE test(var a)
sleep(1)
a = 1
FEND

No.1074 2021/01/12(Tue) 23:43:04

Re: THREAD処理で刻々と変わる変数の値を取得したい / YMK
済みません、PUBLIC宣言をしたのだから引数を渡す必要はありませんでした。

PUBLIC a = 0
THREAD test()
for i = 1 to 30; print a ;sleep(0.2);next //i=6以上では「1」を返した
sleep(5)
PROCEDURE test()
sleep(1)
a = 1
FEND

あまりPUBLICは使いたく無かったのですが、
参照引数では上手くいかないのですね、、

No.1076 2021/01/13(Wed) 05:12:30

Re: THREAD処理で刻々と変わる変数の値を取得したい / しゅん
// 自己解決されているようなので、お遊び的な参考情報を

// Public縛りするなら、一部のCOMオブジェクトがスレッド間参照可能なことを使います。

DIM i, a = CreateOleObj("VBScript.Regexp")
a.pattern = 0
THREAD test(a)
for i = 1 to 30; print a.pattern ;sleep(0.2);next
sleep(5)


PROCEDURE test(a)
sleep(1)
a.pattern = val(a.pattern) + 1
FEND

// patternは文字列なので、数値評価し直しが必要ですね、、、。



// 他はプロセスメモリーを参照するか
// asm.uwsは https://junjun777.hatenablog.com/entry/20120616/uwsc_function_pointer

CALL asm.uws
a = Asm.Alloc(4) // 4byte確保
Asm.SetDword(a, 0)
THREAD test2(a)
for i = 1 to 30; print Asm.GetDword(a) ;sleep(0.2);next
sleep(5)
Asm.Free(a) // 使い終わったらFreeが必要なのが面倒


PROCEDURE test2(a)
sleep(1)
Asm.SetDword(a, Asm.GetDword(a) + 1)
FEND

// VirtualAllocは4byteなんて少なく確保はしないですけどね、、、。
// 4byte指定でも4KBくらい確保したはず。

// 他にも方法はいろいろありますね。

No.1078 2021/01/13(Wed) 14:51:29

Re: THREAD処理で刻々と変わる変数の値を取得したい / YMK
しゅんさん
Publicにすることなく動作することを確認しました。
有難うございます。

ただ、説明を簡単にするために変数にしましたが、実際は配列なのです。
配列だとCOMオブジェクトでは出来ないですよね、、

DIM i, data[5,2000] = CreateOleObj("VBScript.Regexp")
data[0,0].pattern = 0
data[0,1].pattern = 10 //ここでCOMエラー


Asm.uws の方法は、ボリュームがあるので時間をかけて調べてみます。

No.1080 2021/01/13(Wed) 16:42:42

Re: THREAD処理で刻々と変わる変数の値を取得したい / stuncloud
やたらめったらpublicを使っているというのでなければ、publicでも良いと思いますよ
気になるならmoduleに入れておくとか?

thread M.test()
for i = 1 to 30; print M.a ;sleep(0.2);next
sleep(5)

module M
 public a = 0
 procedure test()
  sleep(1)
  a = 1
 fend
endmodule

No.1083 2021/01/14(Thu) 00:14:08

Re: THREAD処理で刻々と変わる変数の値を取得したい / satocha
しろまささんのサイトにある
http://siromasa.html.xdomain.jp/uwsc/u_sample/DLL/Class_SharedMemory.uws
をつかってみてはどうですか。
配列にも対応しています。

No.1086 2021/01/15(Fri) 01:44:29
Explorer について / Roppy
リストボックスの、あるファイルにフォーカスを当てる時
ファイル数が多くなり、ファイルがウィンドウの可視内に収まらなくなると
うまくいかなくなります。(ちなみに XPは、CLK_TREEVIEW で、できます)

p= "C:\UWSC"
f= "xxx.uws"

id= exec("Explorer.exe "+ p)
clkitem(id, f, CLK_LEFTCLK)

No.1071 2021/01/12(Tue) 06:42:22

Re: Explorer について / stuncloud
見えていないとクリックが成功しない、つまり
> clkitem(id, f, CLK_LEFTCLK)
がFalseを返すので、その場合はスクロールさせて再度clkitemを行う
それをTrueが返されるまで繰り返す
という処理にすると良いかと思います

スクロールはsetslider()を使う、page downを押す、などの方法があります

No.1072 2021/01/12(Tue) 10:41:51

Re: Explorer について / Rayna
>>1071 Roppy さん

// ・explorer は Exec しても 開いたウインドウが id として獲得できない場合があります
// ・操作によってはOS毎に方法を変える必要性があります(UIの操作は特に)

// XP -> Vista で新しいデスクトップの描写システムが追加され(DWM, Aeroとか)
// 7 -> 8 はそこまでUWSCの挙動は変わらないですが DWM が強制されたりと仕様が変わっているので厳密なことをする場合は注意が必要です
// 8.1 -> 10 はUIが一新されたので 同じスクリプトでも動作の違いが顕著になります

// 体感ですが | を 設計や仕様変更を考慮する壁 だとすると
//  2000, XP || Vista, 7 | 8, 8.1 || 10
// こんなかんじだと思います

/////////////////////////////////
// UWSC(Free版) のディレクトリから explorer を使って Readme.txt を開くスクリプト

Dim f = "Readme.txt"
Dim p, id

Select KindOfOs()
Case 13 // Windows XP // Test OSBuild:2600
 p = Trim(DosCmd("Echo %UserProfile%\デスクトップ\UWSCF\5.302"))
 id = Exec("Explorer.exe <#DBL>" + p + "<#DBL>") // -1 // ID取れてない
 id = GetId(GET_ACTIVE_WIN) // とりあえず↑で開かれたアクティブウインドウから獲得

 Print ClkItem(id, f, CLK_LISTVIEW) // True
Case 30 // Windows 10 // Test OSBuild:19042
 p = "C:\Program File\UWSCF"
//id = Exec("Explorer.exe <#DBL>" + p + "<#DBL>") // IDは取れているけどExecで開いたウインドウではない
 // ファイル見えてない問題を解決するために explorer の /select オプションを使ってみる
 id = Exec("Explorer.exe /select,<#DBL>" + p + "\" + f + "<#DBL>") // -1 // ID取れてない
 id = GetId(GET_ACTIVE_WIN) // とりあえず↑で開かれたアクティブウインドウから獲得

 Print ClkItem(id, f, CLK_LIST Or CLK_DBLCLK) // True
SelEnd
/////////////////////////////////

// 蛇足
http://codepad.org/tXBtFz7b

No.1073 2021/01/12(Tue) 13:18:35

Re: Explorer について / Roppy
stuncloudさん、ありがとうございます。参考になりました。

Raynaさん、ありがとうございます。早速、やってみます。助かりました。

No.1075 2021/01/13(Wed) 00:07:48

Re: Explorer について / Roppy
岩ずでもがなな事ども

stuncloudさん、Windows を使うことは、将にそういうことを、したいが為ですね。

Raynaさん、
Windows のヴァージョンアップの度に襲われるこの迷惑感。
未だに、XP や 7 を使わねばならぬ、あれやこれ、溜息がでます。
今回は、10 で動作させねばならなくなり、「見える化」を維持したいがため、この仕儀となりました。
Explorer は、なかなかハードルが高いです。
当面は、どのファイルが、いかなる処理をされるかを、MSGBOX 等で確認させる事で対応します。そして、別のファイラーも選択肢として、粘ってみます。

UWSC がこの世に無かったら、私は、Windows を使っていないでしょう。
umiumi さんに、最大のリスペクトを。

No.1077 2021/01/13(Wed) 07:11:34

Re: Explorer について / stuncloud
ファイル操作だけならExplorerを操作するよりも
・doscmd()またはpowershell()でファイル操作系コマンド
・COM(Shell.ApplicationやScripting.FileSystemObjectなど)
を使って裏で片付けちゃうのが楽なんですよねえ
というよりExplorerのGUI操作がキツすぎる、というわけなんですが
やってる操作はprint窓に出力するようにすれば視覚的なものもなんとかなるかな、という気はします
ファイルコピーや移動の際にダイアログを出すオプションがShell.Applicationにあるので、それを駆使するというのもアリでしょう (僕もこれはよく使います)

No.1079 2021/01/13(Wed) 15:39:41

Re: Explorer について / Roppy
stuncloudさん、ありがとうございます。

>>ファイルコピーや移動の際にダイアログを出すオプションがShell.Applicationにあるので、それを駆使するというのもアリでしょう

これ、いただきます。

No.1082 2021/01/13(Wed) 19:00:58
SENDSTRについて教えてください / 藍
いつもお世話になります。

webシステムで支店コードのところに代入しようとしています。
SENDSTR(id, "123456", 7, True)の番号7の部分なのですが、
機種??によって「8」になったりします。

windows10 64ビット、ie11を利用

同一の環境で実行しているつもりですがこのような事象が発生します。
なぜなのか理由がわかりません。ご存じの方がいましたら教えてください。
よろしくお願いいたします。

No.1068 2021/01/05(Tue) 18:10:46

Re: SENDSTRについて教えてください / stuncloud
> webシステムで
ということは何かしらのブラウザだったりするのでしょうか
環境によってエディットボックスの数が異なるのだと思われます
例えば、一方はアドレスバーのみだがもう一方はアドレスバーと検索バーがある、など
この場合検索バーが増えた分、sendstrの番号指定が一つずれるという具合です

対処法として思いつくのは

・いずれの環境でもウィンドウの状態を揃えるようにする

ですがそれが難しい場合、あるいは原因ではなかった場合は

・入力先に初期値があるならgetstr(id, 7)して比較
  その場所に入力して良いならそのまま7にsendstr
  だめなら8にsendstr
  (きちんとするならgetstr(id, 8)も調べる)

といった感じで入力できる場所を適宜探すのが良いと思います

No.1069 2021/01/06(Wed) 10:40:18

Re: SENDSTRについて教えてください / 藍
stuncloud様 返信ありがとうございます。
ブラウザーはie11を利用しています。
PCは複数台ありウィンドウの状態を揃えのは難しいため
アドバイス通り入力できる場所を適宜探す方法で対処しました。
ありがとうございました。

No.1070 2021/01/06(Wed) 16:46:05
ネットストックハイスピードに証券番号が自動入力できない / nanashi
お疲れ様です。
windows10 64bit環境で下記ブログにあるように松井証券のネットストックハイスピードのチャートを自動で保存しようとしているのですが、code入力の部分がうまく動きませんでした。
"ComboBox"でなくて"Edit"でないかなとか、o_HNDそのものを使って書き換えられないかなとか、マウス右クリックでペースト出来ないかなどもろもろ試したのですがうまくいきませんでした。
もし入力が成功する人がいましたら、やり方を教えてほしいです。
よろしくお願いいたしますmm

元サイト:http://www.m-trader.net/chart_funasi2
code入力の部分
```
//銘柄のCode入力処理開始。
w_ID = GetID(windowTitle)
o_HND = GetCtlHND(w_ID, "ComboBox")
o_ID = HNDtoID(o_HND)
CTRLWIN(w_ID, ACTIVATE)
SENDSTR(o_ID, code, 1, True)
KBD(VK_RETURN)
//銘柄のCode入力処理終了
```

No.1067 2020/12/28(Mon) 00:12:36
ファイルが消えない / selon
助けてください、タスクマネージャに、なぜか、exeファイルが残り、毎回、手動で消さなければなりません、xxx.exeを消す方法を教えていただけないでしょうか。
No.1064 2020/12/24(Thu) 07:42:44

Re: ファイルが消えない / yanyan
何のexeファイルが、なぜ残るかわかりませんが、TASKを強制的に消すなら、UWSCではexecでTASKKILL.ExEを実行するとかで消せます。
No.1065 2020/12/24(Thu) 14:38:11

Re: ファイルが消えない / selon
yanyanさん、ありがとうございます、助かりました。
No.1066 2020/12/24(Thu) 15:15:20
ループ処理を抜けたい / YMD
下記のプログラムを実行するとループ処理はされるのですが条件を満たしても止まりません。
間違いのある個所を教えてください。ループを抜ける条件はエクセルの(A13:M13)の赤色セルが6個になったらです。
よろしくお願いします。


xls=GETACTIVEOLEOBJ("Excel.Application")
xls.Visible=TRUE

a = 0

REPEAT
(処理)
UNTIL For i = 1 To 13
IFB xls.Worksheets("sheet1").Cells(13, i).DisplayFormat.Interior.ColorIndex = 3 Then
a = a + 1
ENDIF
NEXT
a = 6

No.1054 2020/12/22(Tue) 06:20:11

Re: ループ処理を抜けたい / stuncloud
これ動くんですか…?
> UNTIL For i = 1 To 13
コピペミスかしらん

ループを抜けるのはbreakです
if a = 6 then break
でaが6なら今のループを抜けます
多重ループの抜け方というのもあるので、詳しくはヘルプを見てください

No.1055 2020/12/22(Tue) 13:55:19

Re: ループ処理を抜けたい / YMD
> これ動くんですか…?
> > UNTIL For i = 1 To 13
> コピペミスかしらん


恥ずかしながらコピペミスです///

>
> ループを抜けるのはbreakです
> if a = 6 then break
> でaが6なら今のループを抜けます
> 多重ループの抜け方というのもあるので、詳しくはヘルプを見てください



REPEAT
(処理)
UNTIL(条件式)

で条件式がTRUE つまりAが6になったらループを抜けるのではないのですか?
初心者なのでサンプルコードなど書いていただけると助かります。

No.1056 2020/12/22(Tue) 16:22:52

Re: ループ処理を抜けたい / しろまさ
>で条件式がTRUE つまりAが6になったらループを抜けるのではないのですか?
これが解っているならまず書いて試す。

>初心者なのでサンプルコードなど書いていただけると助かります。
甘えすぎ。アドバイスを受けて修正したコードをテストして
それでもダメならそのダメなコードを張り付けて再質問するように。

ここは作成依頼掲示板ではありません。

No.1057 2020/12/22(Tue) 16:33:08

Re: ループ処理を抜けたい / stuncloud
> で条件式がTRUE つまりAが6になったらループを抜けるのではないのですか?
repeatとforがあってどっちを抜けたいのかがわからず、どちらでも抜けられるbreakを提示しました
・提示されたコードに誤りがある
・説明不足
だと十分な回答はできませんよ

ちなみに条件式ってのは a = 6 なのでじゃあそれをuntilに書いてみたらいいんじゃないかな!

No.1058 2020/12/22(Tue) 16:40:23

Re: ループ処理を抜けたい / YMD
> > で条件式がTRUE つまりAが6になったらループを抜けるのではないのですか?
> repeatとforがあってどっちを抜けたいのかがわからず、どちらでも抜けられるbreakを提示しました。


大変失礼しました。REPEATの方でお願いします。

> ・提示されたコードに誤りがある

コピペミス治してみました。
よろしくお願いします。

xls=GETACTIVEOLEOBJ("Excel.Application")
xls.Visible=TRUE

a = 0

For i = 1 To 13
IFB xls.Worksheets("sheet1").Cells(13, i).DisplayFormat.Interior.ColorIndex = 3 Then
a = a + 1
ENDIF
NEXT

REPEAT
(処理)
UNTIL a = 6

> ・説明不足
> だと十分な回答はできませんよ
>
> ちなみに条件式ってのは a = 6 なのでじゃあそれをuntilに書いてみたらいいんじゃないかな!


やってみてだめだったのでこちらのサイトで質問させていただきました。

No.1059 2020/12/22(Tue) 19:35:32

Re: ループ処理を抜けたい / YMD


> > で条件式がTRUE つまりAが6になったらループを抜けるのではないのですか?
> repeatとforがあってどっちを抜けたいのかがわからず、どちらでも抜けられるbreakを提示しました。


大変失礼しました。REPEATの方でお願いします。

> ・提示されたコードに誤りがある

コピペミス治してみました。
よろしくお願いします。

xls=GETACTIVEOLEOBJ("Excel.Application")
xls.Visible=TRUE

a = 0

For i = 1 To 13
IFB xls.Worksheets("sheet1").Cells(13, i).DisplayFormat.Interior.ColorIndex = 3 Then
a = a + 1
ENDIF
NEXT

REPEAT
(処理)
UNTIL a = 6

> ・説明不足
> だと十分な回答はできませんよ
>
> ちなみに条件式ってのは a = 6 なのでじゃあそれをuntilに書いてみたらいいんじゃないかな!


やってみてだめだったのでこちらのサイトで質問させていただきました。

No.1060 2020/12/22(Tue) 19:36:26

Re: ループ処理を抜けたい / stuncloud
> a = a + 1
これをどこでやるか、という話ですね
repeat-untilの中でaが6になるとループを抜ける
というのはつまり、6にならないとループを抜けない
ということなのはわかりますか?
repeat-untilの中でaを6にする処理が必要です
つまりfor文が書かれるべき場所は…?

さて、上に書いたことが理解いただけたならuntilでループを抜けられるようになったかもしれませんが、状況によっては抜けられていないかもしれません
すなわちuntilに到達した時点でaが7以上になっていた場合ですね
aが6じゃないので抜けられません
forの処理を見る限りaが7以上になる可能性も捨てきれませんから、forもa = 6の時点で抜けられたほうがいいかもしれません
その場合は先のbreakを使います
あるいはuntilの条件式をa >= 6にする

No.1061 2020/12/22(Tue) 22:17:06

Re: ループ処理を抜けたい / stuncloud
にっちもさっちもいかないというならサンプルも書きますけど
その場合は何がしたいか明確にしてしただけますか

・repeat-until内の処理ってなにやってんの?
・赤が6つなら処理を終えたいということは、赤の数は6未満の数からだんだん増えるものなの?増えるならどうすると増えるの?
・赤が7つ以上になっちゃったらどうするの?

このあたりがわかんないです
なんとなく漠然とですけど

repeat
 //なんか処理
until 赤を数える関数() = 6

みたいな事がしたいのかな?という気はしますが
> ・説明不足
> だと十分な回答はできませんよ

の状態は依然続いているのでご協力お願いします

No.1062 2020/12/22(Tue) 22:34:59

Re: ループ処理を抜けたい / YMD
> > a = a + 1
> これをどこでやるか、という話ですね
> repeat-untilの中でaが6になるとループを抜ける
> というのはつまり、6にならないとループを抜けない
> ということなのはわかりますか?
> repeat-untilの中でaを6にする処理が必要です
> つまりfor文が書かれるべき場所は…?


できました!このような初歩的な質問に回答して下さりありがとうございます!

>
> さて、上に書いたことが理解いただけたならuntilでループを抜けられるようになったかもしれませんが、状況によっては抜けられていないかもしれません
> すなわちuntilに到達した時点でaが7以上になっていた場合ですね
> aが6じゃないので抜けられません
> forの処理を見る限りaが7以上になる可能性も捨てきれませんから、forもa = 6の時点で抜けられたほうがいいかもしれません
> その場合は先のbreakを使います
> あるいはuntilの条件式をa >= 6にする


親切にありがとうございます!

No.1063 2020/12/22(Tue) 23:45:04
連想配列を値でソートしたい / YMK
HASHTBL DAT
DAT[Aさん] = 70
DAT[Bさん] = 55
DAT[Cさん] = 90


とした時、値順にソートして

For i in DAT
 print (i +"特典は" +dat[i])
next

の様に出力したいです。

No.1050 2020/12/11(Fri) 14:33:29

Re: 連想配列を値でソートしたい / satocha
UWSCの連想配列は、宣言時にhash_sortを指定すると、キーでソートしてくれます。
実際には値のほうでソートしたいわけですから、キーと値が逆順の連想配列を作ってコピーしてあげればうまく行きます。

その際、キーと値が必ずしも一対一対応するわけではないので、値が衝突したときのことを考えておく必要があります。

HASHTBL DAT
HASHTBL Reverse=Hash_sort
DAT["鈴木さん"] = 70
DAT["佐藤さん"] = 55
DAT["中村さん"] = 90
DAT["田中さん"] = 65
DAT["高橋さん"] = 55
DAT["木村さん"] = 65

for i=0 to length(dat)-1
  name=dat[i,hash_key]
  point=dat[i,hash_val]
  if Reverse[point]<>""
    Reverse[point]=Reverse[point]+","+name
  else
    Reverse[point]=name
  endif
next

for i=0 to length(Reverse)-1
  names=Reverse[i,hash_val]
  point=Reverse[i,hash_key]
  for name in split(names,",")
    print name+"は"+point
  next
next
sleep(13)

No.1051 2020/12/11(Fri) 15:58:11

Re: 連想配列を値でソートしたい / satocha
追加です

連想配列のキーは文字列ですので、先に挙げたスクリプトは1ケタ得点の人がいたり100点満点がいると調子悪いかもしれません。
どうしたらいいか考えてみてください。



※ヒント:ゼロ埋め

No.1052 2020/12/11(Fri) 16:21:08

Re: 連想配列を値でソートしたい / YMK
有難うございます、無事出来ました。

連想配列の上限を知る場合は「RESIZE」ではなく、
「length」を使うのも参考にさせて頂きました。

No.1053 2020/12/12(Sat) 12:37:19
COM_Errorについて / IKU
しろまさ様

このようなサイトがあったんですね初めて知りました。
すごく嬉しいです。ありがとうございました!!

無事解決しました、本当にどうもありがとうございました。

No.1048 2020/12/02(Wed) 15:51:20

Re: COM_Errorについて / しろまさ
解決できて何よりです。

返信は各記事の右上にある Res を押してから書き込むと記事が下に続きます。
関連の話題は新規投稿ではなく、返信(Res)でお願い致します。

No.1049 2020/12/03(Thu) 08:55:01
COM_Errorについて / IKU
返答ありがとうございます。

”対象となるWorkbookを開いていないからです。”

を試しました、そのやり方だと通常通り動くのですが、やりたいことは既存のエクセルファイルに入力したいのです。
その場合だとCOM_Errorになります。

それとuwscの高レベル記録設定をして
マクロ記録で Excelウィンドウを動かすと挙動がおかしいです、エクセルも再インストールしたのですがやっぱりおかしいです。
他のパソコンでも試しましたが同じような感じです。

uwscに何か原因があるのでしょうか?それとも Windows 10になってから何か変わったのでしょうか?

No.1046 2020/12/02(Wed) 14:37:28

Re: COM_Errorについて / しろまさ
>> 既存のエクセルファイルに入力したい
?@ 既存XLファイルを起動してから処理
?A 起動済XLファイルを処理
のパターンが考えられます。

http://siromasa.html.xdomain.jp/uwsc/u_term/ExcelApplication.html
の中で、
?@は「オブジェクト作成    CreateOLEObj    ?A」
?Aは「オブジェクト取得    GetActiveOleObj   ?@」
を参考にしてください。

No.1047 2020/12/02(Wed) 15:22:59
IKU / COM_Errorについて
返信ありがとうございます。
EXCEL.RANGE("A1").Valueで試しても
EXCEL = CREATEOLEOBJ("Excel.Application")の行でエラーになります。

管理者権限の話ありがとうございました参考にさせてもらいます。

No.1045 2020/12/02(Wed) 14:29:08

以下のフォームに記事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