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

VMwareのバックグラウンド操作 / Noir
VMware Workstation 12 Proで起動した仮想マシンに対して、MOUSEORG関数を利用してバックグラウンド操作を行いたいのですが、うまくいきません。

環境
Windows10 Pro x64
VMware Workstation 10 Pro 12.5.7
UWSC Pro 5.3.0.2
ゲストマシン:Windows8.1 x64

現在、
wid=getid("仮想マシン名")
mouseorg(wid,2,morg_back)
で、バックグラウンド入力をしようとしたのですが、CHKIMGはおろかKBD,BTNも動作しません。
どなたか、対応方法をご存知のかたがいらっしゃれば、ご教示ください。

No.4666 2017/11/04(Sat) 16:15:03

Re: VMwareのバックグラウンド操作 / satocha
wid=getid("仮想マシン名")でウインドウIDがきちんと取れていないのでは?
VMwareを持っていないのでどんなウインドウタイトルになるか分からないため、こうすればいいとはお知らせできませんが。

強引にやるなら、全ウインドウを取得して、そのタイトルに仮想マシン名が含まれていればそれがウインドウIDだと見做す手もあります。
VMachineName="仮想マシン名"
wid=-1
for id in GetAllWin()
 if pos(VMachineName,status(id,st_title))
  wid=id
  break
 endif
next
//このあとwidを使って操作

No.4668 2017/11/04(Sat) 22:22:18

Re: VMwareのバックグラウンド操作 / Noir
返信ありがとうございます。

後だしで申し訳ありませんが、
acw関数でウィンドウIDが取れていることは確認しました。
アイテム名からハンドル取得も試しましたが、把握可能なアイテム名でもうまくいきませんでした。

No.4669 2017/11/04(Sat) 23:16:25

Re: VMwareのバックグラウンド操作 / PAC
仮想マシンの中でUWSCを動かせば良いのでは?
No.4670 2017/11/05(Sun) 11:10:10

Re: VMwareのバックグラウンド操作 / Noir
返信ありがとうございます。

Hostでuwscを使用している理由は主に2点あり、
VM内で動かしているソフトウェアが仮想キー入力を受け付けない仕様のようなのでVM外から動かしたい、ということと、
多数(現在12台)からの同時アクセスに対する負荷試験も兼ねており、10~100ms程度の同時性を持った制御をVM内で(ネットワーク経由で)行う術を持ち合わせていないことが理由です。

この2点が解消されればVM内で実行するのですが、特に後者のほうは、当方がネットワーク関連に特に無知であるため、困難です。

No.4672 2017/11/06(Mon) 17:32:39

Re: VMwareのバックグラウンド操作 / stuncloud
vw = getid(" - VMWare WorkStation")
id = -1
hVMUIView = getctlhnd(vw, "VMUIView")
hAtlAxWin90 = getctlhnd(hndtoid(hVMUIView), "AtlAxWin90")
for _id in getallwin(hndtoid(hAtlAxWin90))
 if pos("ATL:", status(_id, ST_CLASS)) then
  id = _id
  break
 endif
next

これで変数idに今開いているタブのコンソール部分のidが入ります (-1だったら失敗です)
このあとだいたい画面の真ん中あたりをbtn()でクリックしてからsckey()によるキー送信を行う、ということをしています
真ん中あたりをクリック、は操作を仮想マシン側に移すためです (なのでCtrl+GでもOK
ログオン画面などコピペができない箇所で任意の文字列を送るというような使い方がメインです
ので、マウス操作やmouseorgeでのバックグラウンド操作に関してはできるかどうかわかりません
上記のコードでidが取れたら試してみてください

No.4681 2017/11/08(Wed) 10:41:25
ユーザーアカウント制御でのクリック / にゃんこ
ユーザーアカウント制御の"次のプログラムにこのコンピューターへの変更を許可しますか?"の画面で、文字列Yの入力をする方法はありますか?
よろしくお願いします。

No.4680 2017/11/08(Wed) 08:22:50
MSGBOXでのESCキー / stomy
MSGBOXでのESCキーでYESを押してしまうのをやめてほしい。
No.4673 2017/11/07(Tue) 10:56:16

Re: MSGBOXでのESCキー / satocha
「ESCキーでYESを押してしまう」ことはありません。押される(という言い方でいいかどうか分かりませんが)のは、キャンセルボタンです。確認スクリプトは次の通り。

//確認スクリプト開始
hashtbl button_str
buttons =split( "btn_ok btn_yes btn_no btn_cancel btn_abort btn_ignore btn_retry" )
all_buttons=0
for button in buttons
 all_buttons =all_buttons + eval( button )
 button_str[ eval( button ) ] =button
next
button  =msgbox("ボタンを押すかエスキープキーを押してください", all_buttons )
msgbox( "あなたが押したボタンは" + button_str[ button ] + "ですね" )
//スクリプト終了

ESCキーでメッセージボックスが閉じられるのがいやなら、こんな書き方でどうぞ。
repeat
 button=msgbox(string)
until button<>btn_cancel

※ESCキーとキャンセルボタンの弁別はどうするんだっけ。どなたかお願いします。

No.4675 2017/11/07(Tue) 12:45:52

Re: MSGBOXでのESCキー / satocha
弁別は意外に簡単でした
string="escキーを押してみよ"
repeat
 EscOn=false
 button=msgbox(string, btn_ok + btn_cancel)
 if getKeyState(vk_esc) then EscOn=true
until button<>btn_cancel or !EscOn

No.4676 2017/11/07(Tue) 13:01:29

Re: MSGBOXでのESCキー / stomy
BTN_CANCELを付けていないのに、ESCキーで来てしまうのですね。
なるほど。

No.4679 2017/11/07(Tue) 18:14:16
管理者として実行するとCOM ERROR / にゃんこ
TEST.UWSに作成し(中身 EXCEL = GETACTIVEOLEOBJ("Excel.Application"))

バッチファイルを作成し(中身 C:\UWSC\UWSC.EXE C:\UWSC\TEST.UWS)

これのショートカットで実行するとエラーは出ませんが、

管理者として実行するにチェックをいれてショートカットで実行すると
COM_ERROR:操作を利用できませんとエラーが出ます

対応方法を教えてください。
よろしくお願いします。

No.4665 2017/11/04(Sat) 14:57:16

Re: 管理者として実行するとCOM ERROR / satocha
外しているかもしれませんが、エクセルを管理者モードで起動していないのではないでしょうか。
No.4667 2017/11/04(Sat) 22:12:50

Re: 管理者として実行するとCOM ERROR / にゃんこ
管理者モードで動作できました。
ありがとうございました。
お礼遅くなり申し訳ありません。

No.4671 2017/11/06(Mon) 11:12:26
ログウィンドウの表示内容をクリアしたい / K-1
print文でログウィンドウが開き文字列が表示されますが、
この表示文字列をクリアすることはできないでしょうか。
ウィンドウはそのままで、表示内容だけクリアです。

No.4656 2017/11/02(Thu) 13:45:16

Re: ログウィンドウの表示内容をクリアしたい / stuncloud
// print窓を空文字で上書きします
sendstr(getid(GET_LOGPRINT_WIN), EMPTY, 1, TRUE)

No.4658 2017/11/02(Thu) 15:34:21

Re: ログウィンドウの表示内容をクリアしたい / K-1
できました。ありがとうございます。
No.4663 2017/11/02(Thu) 21:49:38
配列に空白文字列があれば0を入力させる方法 / さやか
aファイルに3つデータ、1行ずつ入力されている。
配列サイズは7、配列[6]の場合、4行目からはすべて0を入力
した状態でする方法ないでしょうか?SETCLEARだと配列内は全て0で埋め尽くさます。SHIFTARRAYはデータシフトさせるだけですし、何かよい方法ないでしょうか?

aファイル
15
48
45
空行
空行
空行
空行
---------------------
希望の処理
15
48
45
0
0
0
0
---------------------

No.4639 2017/11/01(Wed) 11:50:07

Re: 配列に空白文字列があれば0を入力させる方法 / しゅん
上手くいかないスクリプトの例がないため、何をやりたいのかイマイチわかりません。
FOPENでファイルを開いて1行毎に処理しているのなら、IF文で空行か判断して、空行なら0を、それ以外なら読み込んだ値を入れれば良いのではないでしょうか。

もし、ファイル側が配列文だけないことを想定しているのであれば、最初にsetclearして全部0にしてからファイルの読込処理をすれば良いかと思います。

No.4662 2017/11/02(Thu) 16:13:30
publicを使う時の判断基準 / さやか
procedure内でpublicを使うパターンやメイン上でpublicを使うパターン、別のuwsファイルでCLASS内にユーザー関数内でpublicを使っているパターン等色々考えられると思います。

メインで別のuwsファイルのCLASS内のユーザー関数を呼び出して利用する事があるのですが、その際CLASS COMMON内にprocedureやfunction内で配列処理した変数をメインで利用したい場合やCLASS COMMON内のprocedureの1という関数内にさらに別のユーザー関数を利用している場合もあります。

たとえば下記のような感じです。

procedure rinkkaki1(フォルダー名\,会社名1,会社名2)
call C:\Users\aruke\Desktop共通化.uws
yomi1 = COMMON.Read_ALLText(e99)
fend

publicは関数内外で利用する時に宣言するという認識なのですが、みなさんはpublicをどういう判断基準で使われていますでしょうか?

No.4619 2017/10/30(Mon) 23:28:33

Re: publicを使う時の判断基準 / しろまさ
// 主観ですが、基本的に多種のModuleを目的に合わせてCallで組み合わせて使うので
// 誤動作の元になるメイングローバル変数(Public)は使いません(スコープはModule内に押し込めます)

  Call ..\Module_COMMON.uws
// Call ..\Module_API.uws
// Call ..\Module_ADO.uws

Dim pay = Input("金額を入力", 500)
With  COMMON
  Ifb .AddTax(pay)
    MsgBox("[" + pay + "] の税込は [" + .ShowRec() + "]<#CR>※ 税率は " + .pTax + " %")
  Else
    MsgBox("[" + pay + "] 数字を入力して下さい")
  EndIf
EndWith

// ここより別ファイル
Module COMMON
  Public  pTax = 1.08
  Dim rec1
  Function  AddTax(num)
    Ifb Val(num) <> ERR_VALUE
      rec1 = num * pTax
      Result = TRUE
    Else
      Result = FALSE
    EndIf
  FEnd
  Function  ShowRec()
    Result = rec1
  FEnd
EndModule

No.4620 2017/10/31(Tue) 08:55:24

Re: publicを使う時の判断基準 / stuncloud
だいたい賛成ですが、ちょっとしたスクリプト(数十行程度)でスコープ越えなきゃいけない場合があったら面倒なのでpublicを使うことはあります
ちっちゃいスクリプトなら見通しがきくのでそうそう間違えませんしね

そして、かっちりやるときは僕もModuleを使いますがModule内のpublic変数も結局外から値を代入されちゃったりする(つまり普通のpublicと大差ない)ので

print Hoge.piyo // ダメ
print Hoge.GetPiyo() // piyo

module Hoge
 dim piyo = "piyo"
 function GetPiyo()
  result = piyo
 fend
endmodule

こんな感じでdimで宣言しておいて取得用の関数書きますね
もしこの変数の値を変更する必要があるのなら、その為の関数を書きます

値が絶対に変わらないのであればconstを使うのも手です、constもグローバルスコープです

なんでこういうことをするのか、についてはまだ疑問に思われるかもしれません
publicの取り扱いは気をつけてさえいれば大丈夫なんですよね、極論
でもそれを気をつけなくても大丈夫、にするための工夫なんです
あとわざわざ関数にすることで何をやってるか明確にしたいという意図もありますね
長らくメンテしてるスクリプト(だいたい肥大化する)をあとで見返したときに何やってるかわかんないのが一番困るわけで
将来の自分がウカツなことしないように間違いを起こさない設計にしときたいんですよね
自分がいちばんあてにならないので信用したらいかんのだ

# publicの話からそれちゃったんですが、気をつけるべきはpublicだけじゃないのでまぁなんかこんな話に

No.4622 2017/10/31(Tue) 10:04:04

Re: publicを使う時の判断基準 / さやか
しろまさ様、返信ありがとうございます。
Module内のpTaxの数字を変動させたい場合は、Public宣言をする事により、メイン上でCOMMON.pTaxで今回は、1.08→
2.00に変更し、AddTax関数の処理ができるという事ですね。


call C:\Users\Desktop\20171101104554

  COMMON.pTax = 2.00

Dim pay = Input("金額を入力", 500)
With  COMMON
  Ifb .AddTax(pay)
    MsgBox("[" + pay + "] の税込は [" + .ShowRec() + "]<#CR>※ 税率は " + COMMON.pTax + " %")
  Else
    MsgBox("[" + pay + "] 数字を入力して下さい")
  EndIf
EndWith

---------------------
// ここより別ファイルcall C:\Users\Desktop\20171101104554
Module COMMON
  Public  pTax = 1.08
  Dim rec1
  Function  AddTax(num)
    Ifb Val(num) <> ERR_VALUE
      rec1 = num * pTax
      Result = TRUE
    Else
      Result = FALSE
    EndIf
  FEnd
  Function  ShowRec()
    Result = rec1
  FEnd
EndModule

No.4637 2017/11/01(Wed) 10:53:48

Re: publicを使う時の判断基準 / さやか
stuncloud様、返信ありがとうございます。publicについてはなるだけ使わずに関数内を構成した方が良いという認識ができました。まだ、publicを使うかどうかの具体的判断基準は自分の中では明確ではありませんが、また一つ理解は進んだように思います。


call C:\Users\aruke\Desktop\ショットカット構文一覧\00_共通化.uws


// Dim res = COMMON.GetPiyo()
// print res
// パターン1 出力結果 piyoあいう(クラス内の関数の引数のdim宣言有り文字列入力済み)
クラス内にdim宣言した固定した文字列をメインで指定しなくても呼び出せる。

// ---------------------
// a="abc"
// b="xyz"
// Dim res = COMMON.GetPiyo1(a,b)
// print res
// パターン2 出力結果 abcxyz(クラス内の関数の引数のdim宣言有り)
クラス内の処理をメイン上で関数の引数である2つを指定する事により関数内の処理をさせる事ができる。

// ---------------------
a="abc"
b="xyz"
Dim res = COMMON.GetPiyo2(a,b)
print res
// パターン3 出力結果 abcxyz(クラス内の関数の引数のdim宣言無し)

---------------------
共通化.uws

 dim piyo = "piyo"
dim tesuo="あいう"
 function GetPiyo()
  result = piyo+tesuo
 fend
// ---------------------
 dim piyo1,tesuo1
 function GetPiyo1(piyo1,tesuo1)
  result = piyo1+tesuo1
 fend
---------------------
 function GetPiyo2(piyo2,tesuo2)
  result = piyo2+tesuo2
 fend
---------------------

No.4638 2017/11/01(Wed) 11:25:29

Re: publicを使う時の判断基準 / しゅん
個人的には、PUBLICはモジュール内でも使ったら負け。
負けても良い気分の時(ないと面倒な時)だけ使う。
ただ、モジュール内であれば、思ってもない更新は比較的おきにくいので、使う心理障壁は少しだけ低いです。

No.4660 2017/11/02(Thu) 16:09:04
iframe srcのリンクの押し方 / クッキー

下記RECIEで取得したリンクが動かず、ボタンが押せません。

IE.Navigate("javascript:registerDomain('ドメインを設定します。宜しいですか?');")
BusyWait(IE)

手動だと上記のボタンを押すと「OK」を促すPOPUPウインドウが出現します。
しかし、RECIEで取得した先ほどののリンクを再生すると、
ボタンも押せないし、POPアップウインドウ自体も出現しない状態です。。

該当のHTMLは下記だと思うのですが、どのようにUWSCを記述すればよいのでしょうか?
<!-- ytm - /body just before -->
<script type="text/javascript">
(function () {
var tagjs = document.createElement("script");
var s = document.getElementsByTagName("script")[0];
tagjs.async = true;
tagjs.src = "//s.yjtag.jp/tag.js#site=EJZe6pa,oJlB2M3";
s.parentNode.insertBefore(tagjs, s);
}());
</script>
<noscript>
<iframe src="//b.yjtag.jp/iframe?c=EJZe6pa,oJlB2M3" width="1" height="1" frameborder="0" scrolling="no" marginheight="0" marginwidth="0"></iframe>
</noscript>
<!-- /ytm - /body just before -->

No.4644 2017/11/01(Wed) 18:49:02

Re: iframe srcのリンクの押し方 / stuncloud
// 変数iframeにはiframeエレメントを入れておく
iframeDocument = iframe.contentWindow.document

iframeDocumentはiframe内のdocumentなので普段 ie.document に対してやるのと同じようにすればいいです
あと外部ドメインだと操作できなかったと思うけど今回は同じドメインぽいので多分大丈夫

もしかしたら
iframe.contentWindow.registerDomain('ドメインを設定します。宜しいですか?')
で動くかもしれない

No.4648 2017/11/02(Thu) 10:31:42
javascriptのボタンをクリックする方法 / クッキー
こんにちは
UWSCで作業を自動化するスクリプトを作成中です。
当方javascriptがわからず、またプログラミングはUWSCが初めてという状況です。
RECIEでマクロ記録したjavascriptのボタンを押す場所で、ボタンが押せないので解決方法を教えていただけますでしょうか?

■発生している問題・エラーメッセージ
下記REC IEで記録したスクリプトを再生すると、ボタンを押さず画面が止まってしまう。
//*********UWSCのソースコードここから*********
IELink(IE,"id=set-domain") // javascript:submitForm('domain', 'register');
BusyWait(IE)
//*********UWSCのソースコードここまで*********

//*********おしたいボタンの個所のHTML********

<form name="frm" method="post" class="PD-T-5">
<input type="hidden" name="token" value="71cc47d13829911bd9564038c5ed2aca22ba54c5" />
<div id="submit-form">
<a href="javascript:submitForm('domain', 'register');" id="set-domain">
<img src="domain/img/btn_doma_set.gif" alt="独自ドメイン設定" width="103" height="21" /></a>
<a href="javascript:removeAllDomain();" id="remove-domain"><img src="domain/img/btn_doma_del_dis.gif" alt="ドメイン解除" width="103" height="21" /></a>
</div>
</form>
//*********おしたいボタンの個所のHTMLここまで********
上記のalt=”独自ドメイン設定”というボタンを押したいのです。



WEBで検索しながら下記のスクリプトを書いてみたのですが、みたのですが、どうもうまく動きません。
【やってみたこと1】
imgtags = IE.document.getElementsByTagName("img")
for i = 0 to imgtags.length - 1
if imgtags.item(i).alt = "独自ドメイン設定" then
imgtags.item(i).click()
BusyWait(IE)
break
endif
next
【やってみたこと2】
imgtags = IE.document.getElementsById("set-domain")
imgtags.click()
BusyWait(IE)
break
next



どのようにしたらボタンをクリックできるようになるかご教授いただけないでしょうか?
よろしくお願いいたします。

No.4608 2017/10/30(Mon) 17:53:11

Re: javascriptのボタンをクリックする方法 / satocha
それ、ボタンじゃないですよね。一見ボタンに見えるのかもしれませんが
ただの画像で、imgタグにonclick属性もなさそう(どこか別のところで設定している可能性はあります)なので、その画像をクリックしても何も起きないようになっているようです。

そこを押すと次画面に遷移するように見えるのはその親要素の<a>タグの働きのようです。
<a href="javascript:submitForm('domain', 'register');" id="set-domain">

なので、スクリプトのIEオブジェクト変数名が「IE」だとして
IE.navigate("javascript:submitForm('domain', 'register');")
で次画面に進むはずです。

上のやり方はちょっと乱暴だと思うなら、
きちんとボタン(のようにみえる画像ではなくその親要素であるAタグ)をクリックする
のもありかも。
IE.document.getElementById("set-domain").click()

まずはUWSCでもJavascriptでもなくて、HTMLタグをおさらいしたらいいと思います。

No.4611 2017/10/30(Mon) 20:23:55

Re: javascriptのボタンをクリックする方法 / クッキー
satocha様
アドバイスありがとうございます!

>IE.navigate("javascript:submitForm('domain', 'register');")
ページ飛ぶことができました。

HTMLの勉強ももう一度しっかりおさらいしてみます。

No.4643 2017/11/01(Wed) 15:01:23
PDFをマウスで改ページさせるスプリクト / age
PDFを全体画面表示し、マウスの右クリックで改ページを行う
ため以下のような簡単なスプリクトを作成しました。

fukidasi("スプリクト実行中です。")

while -1
if GETKEYSTATE(VK_LBUTTON)=true then KBD(VK_DOWN,CLICK,1200)
if GETKEYSTATE(VK_RBUTTON)=true then break
wend

fukidasi("スプリクトを終了します。")
sleep(1)

上記のものですと、改ページが2ページ単位で行われるので、
その対処法に困っています。

お手数ですが、ご助言を頂けると幸いです。
宜しくお願いします。

No.4604 2017/10/29(Sun) 20:28:56

Re: PDFをマウスで改ページさせるスプリクト / Liners
// 単にタイミングだけの気もするが、一応試行錯誤してみた。
// Win10のリーダーでテスト。待ち時間を割り振り、
// 負荷を下げつつ反応を上げてみた。

fukidasi("スクリプト実行中です。")

while !GETKEYSTATE(VK_RBUTTON)
  sleep(0.2)
  if !GETKEYSTATE(VK_LBUTTON) then continue
  KBD(VK_DOWN,CLICK)
  sleep(1.0)
  GETKEYSTATE(VK_LBUTTON) // バッファを捨てる
wend

fukidasi("スクリプトを終了します。")
sleep(1)

No.4605 2017/10/30(Mon) 04:14:39

Re: PDFをマウスで改ページさせるスプリクト / age
ご回答ありがとうございました。

ご掲示頂いたスプリクトは、着眼点が違うな・・・と感じています。
そこでいくつか質問させてください。
GETKEYSTATEの関数は、入力があるまでスプリクトを待機するのでしょうか?
if文の行でスプリクトの実行が待機しないと、次行のキーボード操作に入ると思います。
待機せずにwhileループ内を回っている考えていたので、ご掲示の考え方ができませんでした。

又、今後 右クリックで前ページへ戻るようにしたいのですが、右クリックを押すと
ポップアップメニューが表示されます。
このポップアップメニューを一時的に出さないように、スプリクトでコントロールは
できるのでしょうか?

No.4642 2017/11/01(Wed) 14:45:43


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


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