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

ファイルを選択してshift+右クリックで「パスとしてコピー」について / ゆう
「パスとしてコピー」をファイルを選択してコピーでクリップボードにフルパスを入れるようにできないでしょうか?uwscの質問ではないかと思いますが、uwscで出来る方法があれば教えて頂けないでしょうか?
No.5111 2018/02/11(Sun) 11:19:14

Re: ファイルを選択してshift+右クリックで「パスとしてコピー」について / stuncloud
id = getid(エクスプローラのタイトル, "CabinetWClass")
ctrlwin(id, ACTIVATE)
kbd(VK_SHIFT, DOWN)
while ! clkitem(id, 対象ファイル名, CLK_ACC or CLK_RIGHTCLK) // 右クリック
 kbd(VK_SHIFT, UP)
 sckey(id, VK_NEXT) // ファイルが見えてないとクリックできないのでその場合はスクロールする
 kbd(VK_SHIFT, DOWN)
wend
clkitem(getid("", "#32768"), "パスとしてコピー") // メニューをクリック、10だと「パスのコピー」

msgbox(getstr(0)) // クリップボードの確認

エクスプローラのタイトルと対象ファイル名は適宜変更してください

No.5122 2018/02/13(Tue) 12:26:18
PRO版ライセンス / なあんし
PRO版を購入しようとしたところ、リンクが切れていました。
もうこれは購入できないってことなのでしょうか?

No.5116 2018/02/12(Mon) 14:04:02

Re: PRO版ライセンス / umiumi
すみません、当方のミスです。
修正しました。

No.5119 2018/02/12(Mon) 18:03:20
2つのIEの操作 / yama
UWSC初心者です。

2つのIE(IE1,IE2)を起動し、それぞれを前面に出して適宜操作したいのですが、
IE1起動⇒IE1操作⇒IE2起動⇒IE2を前面に出す⇒IE2操作

までできたのですが、
次に「IE1を前面に出す」ことができません。

どのようにすればよいかどなたかご教授いただけないでしょうか。

IE1 = CREATEOLEOBJ("InternetExplorer.Application")
IE1.visible = True
IE1.Navigate("https://xxxxxxx/")
SLEEP(20)

classes = IE1.document.getElementsByClassName("xxxx")
classes.item(0).click()
SLEEP(3)

IE2 = CREATEOLEOBJ("InternetExplorer.Application")
IE2.visible = True
IE2.Navigate("https://xxxxxxx/")

SLEEP(20)
CTRLWIN(IE2,TOPMOST)
classes = IE2.document.getElementsByClassName("xxxx")
classes.item(0).click()

SLEEP(3)

CTRLWIN(IE2,NOTOPMOST)
CTRLWIN(IE1,ACTIVATE)
CTRLWIN(IE1,TOPMOST)

No.5110 2018/02/11(Sun) 08:22:37

Re: 2つのIEの操作 / siguma
CTRLWINに指定するのはCOMオブジェクトじゃなくてウィンドウズIDですから間違いですよ。
ウィンドウズIDはGETID関数などで取得する必要があります。

No.5112 2018/02/11(Sun) 13:16:10

Re: 2つのIEの操作 / yama
ご回答ありがとうございます。
以下のようにしたのですが、まだうまくいきません。
すみませんが、ご助言いただきたく、お願いいたします。

IE1 = CREATEOLEOBJ("InternetExplorer.Application")
IE1.visible = True
IE1.Navigate("https://xxxxxxx/")
id1 = GETID("InternetExplorer.Application")
SLEEP(20)

classes = IE1.document.getElementsByClassName("xxxx")
classes.item(0).click()
SLEEP(3)

IE2 = CREATEOLEOBJ("InternetExplorer.Application")
IE2.visible = True
IE2.Navigate("https://xxxxxxx/")
id2 = GETID("InternetExplorer.Application")

SLEEP(20)
CTRLWIN(id2,TOPMOST)
classes = IE2.document.getElementsByClassName("xxxx")
classes.item(0).click()

SLEEP(3)

CTRLWIN(id2,NOTOPMOST)
CTRLWIN(id1,ACTIVATE)
CTRLWIN(id1,TOPMOST)

No.5113 2018/02/11(Sun) 16:22:54

Re: 2つのIEの操作 / siguma
InternetExplorer.ApplicationをGETIDに指定するのも完全に勘違いですね。

ウィンドウズIDとCOMオブジェクトはUWSCを使う上での基本中の基本ですので、今一度ヘルプやサンプル(http://www.uwsc.info/sample.html)で基礎をしっかり身につけた方が後々役に立つと思いますよ。

とりあえず簡単ですが

IE1 = CREATEOLEOBJ("InternetExplorer.Application")
IE1.visible = True
IE1.Navigate("https://xxxxxxx/")
IE2 = CREATEOLEOBJ("InternetExplorer.Application")
IE2.visible = True
IE2.Navigate("https://xxxxxxx/")

// 全部のウィンドウ情報を表示する
数 = GETALLWIN()  // 全IDゲット
Print 数
For i = 0 to 数-1
print STATUS(ALL_WIN_ID[i], ST_TITLE)   // タイトル表示
print STATUS(ALL_WIN_ID[i], ST_CLASS)   // クラス表示
Next

で目的のウィンドウのタイトルとクラスを探してみてください。
クラスが「IEFrame」となっているもののタイトルがGETIDに渡す引数です。

No.5114 2018/02/11(Sun) 18:31:01

Re: 2つのIEの操作 / yama
わかりやすい解説ありがとうございます。
解決しました。
もう少し基礎を学んでおきます。

No.5115 2018/02/11(Sun) 20:07:22
実行中の行数の取得可否 / UWSC初心者
タイトルの通りです。
1回の動作が長時間のマクロ(寝る前に開始して寝てる間に終わることを想定)を作ったのですが、実際に動かしてみると動作が微妙に安定しない(ふいにどっかで無限ループに入ってるか何かで止まることがある。もちろん原因不明)ので、より精度を高めるべくデバッグしようと思ったものの、どこで止まってるのかわからないため手を出しづらいという状況です。
そこで、実行中の行数を取得できないかということで検索してみたところ特に引っかからなかったため、ここで質問することに致しました。
どうかよろしくお願いします。

No.5106 2018/02/06(Tue) 05:00:14

Re: 実行中の行数の取得可否 / stuncloud
スクリプトで行数を得る方法というのはないので、地道にprintデバッグをすることになると思います
printデバッグは面倒ではありますが一番お手軽なデバッグ方法です
怪しそうなところにprintを挟んで、行数を出力するもよし、変数やループカウンタの中身を出力してもよしです
(怪しそうなところ、というのは例えばループが疑わしいのであればループの前後やループ内になります)

あとは、有料版であればデバッガーが使えます
文字通りデバッグ目的のツールなので状況をつぶさに確認しながらスクリプトを実行できます
有料版は試用期間があるので、一度試してみてはいかがでしょうか

No.5107 2018/02/06(Tue) 14:02:44

Re: 実行中の行数の取得可否 / UWSC初心者
「進行度変数作って本筋の随所で値を更新、別スレッドでその値をballoonやprintで実況する のは手間かかりすぎるよな〜」と思ってのことでしたが、やはり手間をかけるしかありませんか……
回答ありがとうございます。

No.5108 2018/02/06(Tue) 18:31:28
Question / Eman
そのプログラムのマニュアルが別にありますか?
学びたいです。

No.5099 2018/02/03(Sat) 21:14:32

Re: Question / トンボ
書籍「Windows マクロテクニック」でUWSCの基本を学べます。ただ、中級〜上級テクニックとなると、自分で試行錯誤しながら実践する必要があります。
私はUWSC使用歴 2年目と浅いので、今も本掲示板で学習しています。

No.5105 2018/02/05(Mon) 20:19:14
CLKITEM内で処理が止まる事が有る / ゆにすけ
はじめまして、いつも便利に使わせて頂いております。

最近、ネットワーク監視用ツールをUWSCスクリプトで監視しています。
このツールは、ツリービューコントロールに動的にノード(アイテム)が生成され、時間経過で削除される事もあります。
現れたノードに対して情報取得の為にCLKITEMを実行していますが、Win+L等でロック画面状態になった際や、リモートデスクトップで切断時、顕著にUWSCのCLKITEM内で処理が停止し、結果的にUWSCスクリプトが停止してしまう現象が起きました。
CLKITEM内で停止した状態では、SETHOTKEYにセットしたルーチンや標準ではAlt+F2のスクリプト停止ショートカット等は生きていますが、STOPFORMが出たままで通常状態に遷移しません。
この状態で、
taskkill /im uwsc.exe
を実行する事と、通常時と異なりUWSCが終了せず、制御が帰ってくるようです。

色々現象の切り分けを行った所、恐らくCLKITEMの処理前後に対象のツリービューのアイテムやボタン等が削除されると起きる、タイミング依存の現象のようです。
タイムアウトを設定や例外を起こす等でCLKITEMの制御がスクリプト内へ帰ってくるように出来ませんでしょうか?
(どこで止まっているかによってCLKITEMの戻り値が難しい事になりそうですが……)

監視ツールのノードが削除されるタイミングは当方では全くコントロール出来ない上に、
スクリプト内でウォッチドッグタイマーを掛けても、スレッドの終了は出来ないですし、どうしたものかと悩んでおります。

再現用プログラム:
回数を稼ぐために100ms毎等高頻度にボタンやツリービューアイテムの表示・非表示を繰り返す。

再現UWSCコード:
// ------ Report.uws -----
DIM i
DIM ret

id = GETID("検証用プログラム", "WindowsForms10.Window.", -1)
i=1
WHILE True
PRINT "Do"
ret = CLKITEM(id, "foo", CLK_TREEVIEW or CLK_LEFTCLK)
PRINT "Click!(" + i + "):" + ret
i = i + 1
WEND
// ------------
再現手順:
再現用プログラムを実行中に、UWSCスクリプトを実行中し、Win+Lでロック。

症状:
「Do」で止まり、「Click!」が出ない。

環境:
Surface Pro 2 /w Windows 10 64bit(Ver 1709/Build 16299.192)、UAC有効
UWSC Ver 5.3.0.2 (2017/04/18)

No.5078 2018/01/29(Mon) 20:02:13

Re: CLKITEM内で処理が止まる事が有る / ゆにすけ
何時もお世話になっております。ゆにすけです。

追加検証していたところ、CLKITEMの第3引数でインターフェース未指定か、CLK_UIAの時頻繁に発生するようです。
回避策として
・CLK_APIやCLK_ACCを指定
・THREADでプロシージャを別スレッドで起動してその中でCLKITEMをする
・EXITEXITは有効ではありませんでしたが、POFF( P_UWSC_REEXEC, True )が有効
といった事が解りました。

CLK_APIを指定して、WDTをPOFF( P_UWSC_REEXEC, True )による再起動で実装して様子見してみます。

No.5081 2018/01/30(Tue) 08:03:55

Re: CLKITEM内で処理が止まる事が有る / トンボ
画面ロック中の手動操作は通常不可なので、動作保証外かもしれませんね。CHKIMG関数とか。
下記の案もありますので、参考にしてください。
・画面ロック時は自動でロック解除する。(パスワード入力有りだと実現困難かも。)
・画面ロックやリモートデスクトップ接続は極力避ける運用にする。
 実行状況をログファイルとしてテキスト出力し、それを共有フォルダから開いて確認する程度に留める。エラーなど緊急事態が発生したら、MSGコマンドなどでメッセージを送信する。(詳しくは5074参照。)
 ディスプレイ画面を監視したい場合、画像/動画キャプチャする。

No.5085 2018/01/30(Tue) 23:30:39

Re: CLKITEM内で処理が止まる事が有る / ゆにすけ
トンボさん

返信遅くなりましたが、コメントありがとうございます。
部外者の閲覧・操作とかを防ぐため、セキュリティ的にロックをかけておきたかったのですが困難そうですね。
物理的隔離による、物理的なロックで対処するしかなさそうです。
# エラーはSend-MailMessageでもキックしようかと思います。

No.5102 2018/02/05(Mon) 12:40:54

Re: CLKITEM内で処理が止まる事が有る / トンボ
お疲れ様です。セキュリティ面では画面ロックに劣りますが、キーボード/マウス操作を禁止するLOCKHARD/LOCKHARDEX関数があります。他にはFUKIDASI関数で画面の一部を隠すぐらいでしょうか。
なお、ネットワーク監視ツールにコマンドプロンプト用のコマンドがあれば良いですね。

No.5103 2018/02/05(Mon) 19:34:53
サーバーにあるエクセルファイル / K.N
いつもお世話になります!
サーバーにあるエクセルファイルが開かれているか確認する方法は無いでしょうか?
できれば、フリー版でお願いしたいのですが
よろしくお願いします。

No.5096 2018/02/03(Sat) 12:22:10

Re: サーバーにあるエクセルファイル / しゅん
// まあ、なんか条件がいろいろ不明な上に、丸投げというのもちょっと、、、
// 例えば、一旦移動して、成功したなら誰も開いてない、と判断するとか。
// まあでも移動は嫌でしょうから、こんな方法はどうでしょう。
// 条件によっては、期待動作しないけど。
// INPUTダイアログにファイルのパスをフルパスで入力してくださいな。

DEF_DLL CreateFileW(wstring, dword, dword, dword, dword, dword, dword): dword: kernel32
DEF_DLL CloseHandle(dword): bool: kernel32

DIM handle = CreateFileW(INPUT("?"), $80000000, 0, NULL, 3, 0, NULL)
CloseHandle(handle)
IFB handle = $FFFFFFFF THEN
  MSGBOX("誰か開いているみたいよ")
ELSE
  MSGBOX("OK")
ENDIF

No.5097 2018/02/03(Sat) 17:00:57

Re: サーバーにあるエクセルファイル / K.N
しゅん さま 
ありがとうございます!
エクセルでは、チェックする方法が有ったのですが
私の力不足で、UWSCをコントロールしきれず
また、来週の火曜日迄パソコンを使えない状況にあり
丸投げの文章になってしまいました!
身体が回復しだい確認させていただきます!
ありがとうございました!

No.5098 2018/02/03(Sat) 18:02:31

Re: サーバーにあるエクセルファイル / K.N
しゅん さま
自宅で確認させていただきました。
戻値 = FOPEN("C:\UWSC\~$UWSC臨時対応手順.xlsx", F_EXISTS)
上記の方法でExcelが自動で作るファイルを確認していたのですがどうも
甘かったようで・・・熱と一緒にうなされていました

助かりました。本当にありがとうございました。

No.5100 2018/02/04(Sun) 16:04:20
Mouseorg関数のバグ? / まる
Windows10環境だとMouseorgでmorg_back指定し、バックグラウンドで動作しているアプリのPeekcolor、Chkimgが機能しません。バグですか?Windows10の仕様で改善不可ですか?
No.5093 2018/02/02(Fri) 21:47:49
DOSCMDのmoveができなくて困っています。ご教示ください。 / せきこうじ
あるフォルダ内の全*.dcmファイルを別の(1つ上の)フォルダーに移動したいです。
半日トライしましたがうまく行きません。
===========
//最初のフォルダにDICOMないときもあり、より下位のdicomフォルダーの*.dcmを上げる操作をする。
GETDIR("V:\VBMnew", "\") //一番若いフォルダ名を得る
FILE0=GETDIR_FILES[0]
PRINT FILE0 //確認
IFB GETDIR("V:\VBMnew\"+FILE0+"\dicom","*.dcm" , TRUE, 1) //下位dicomフォルダーの*.dcmを得る
DCM0=GETDIR_FILES[0]
PRINT DCM0 //確認
SLEEP(2)  //ここまでは動きます
DOSCMD("move V:\VBMnew\"+FILE0+"\dicom\"*.* V:\VBMnew\"+FILE0+"\) //ここがエラーになる
ELSE
ENDIF
//FILE0の*.dcmを再取得
DCM0=GETDIR("V:\VBMnew\"+FILE0+"\" , "*.dcm" , TRUE, 1) //一番若いDCM名を得る
==========

No.5082 2018/01/30(Tue) 14:44:09

Re: DOSCMDのmoveができなくて困っています。ご教示ください。 / stuncloud
以前と同じ文字列連結の問題です、moveは関係ありません
文字列連結についての解説を以前の質問スレッドに書いてますのでそちらに目を通しておいてください

また、質問をする際にただ
> ここがエラーになる
と書くのではなく、どのようなエラーが表示されたかまで書くようにしてください
(今回は自明でしたが、エラー内容まで書かれていたほうが回答側も原因の推測がしやすくなります)

No.5083 2018/01/30(Tue) 15:24:35

Re: DOSCMDのmoveができなくて困っています。ご教示ください。 / トンボ
@1文字/1単語/1行単位でチェックすれば、エラー箇所の特定が容易になります。
 例えば、DOSCMD("A部分 B部分 C部"分")といった構文(文法)エラーがある場合、PRINT "A部分"、PRINT "B部分"、PRINT "C部"分"に分割して実行すると、すぐにわかります。

Aコマンドプロンプト側のメッセージは、DOSCMD関数の戻り値で確認できます。
 PRINT DOSCMD("…")

No.5084 2018/01/30(Tue) 19:28:36

Re: DOSCMDのmoveができなくて困っています。ご教示ください。 / せきこうじ(投稿者)
●ありがとうございました。
トンボさんのアドバイスと同じことを数回行いまして
DOSCMDの表示内容を検討して、解決に至りました。

No.5090 2018/02/01(Thu) 10:35:43
Pro版でEXE化した.exeをタイマー起動する方法 / エクセルは神
いつも便利に使わせていただいております。
UWSファイルのEXE化をしたく、PRO版の購入検討&試用をさせていただいておりまが、
EXE化した.exeをタイマー起動させる方法について質問させていただきます。

これまでフリー版で「1分毎」、「指定Windowが現れた時」などに指定UWSを起動して
いましたが、EXE化したものをタイマー起動させることは可能でしょうか?

EXE化時に「iniファイルを作らない」のチェックを外してEXE化し、初起動時生成される
iniファイルに

[SCHEDULE]
MaxNumber=40
WakeUp=0
Sound=0
S1=D:\test\test.exe
M1=1分毎
P1=1

というような記述を追記してみましたがダメでした。

.exeを起動しっぱなしにして1分毎に処理を実行させる、タスクスケジューラで
起動するなども思いつきますが、タイマー設定のように簡単に出来る方法が
あればお教えいただきく投稿させていただきました。

過去ログは一通り確認したつもりですが、既出の質問でしたら申し訳ありません。
よろしくお願いいたします。

No.5086 2018/01/31(Wed) 11:38:00

Re: Pro版でEXE化した.exeをタイマー起動する方法 / koi
>タイマー設定のように簡単に出来る方法
それは大元のUWSCが常駐して監視してるからできるだけの話であって
何もない状態で自分自身(EXE)を立ち上げる事なんかできません

>.exeを起動しっぱなしにして1分毎に処理を実行させる、
>タスクスケジューラで起動する
どちらかしかありません

No.5087 2018/01/31(Wed) 17:40:03

Re: Pro版でEXE化した.exeをタイマー起動する方法 / トンボ
OS起動時に実行する程度ですが、スタートアップ設定があります。

なお、UWSCはボタン押下無し状態でもタスクトレイ格納状態でも本体終了するまで作動しています。

No.5088 2018/01/31(Wed) 20:23:07

Re: Pro版でEXE化した.exeをタイマー起動する方法 / エクセルは神
koi様
トンボ様
お返事ありがとうございます。

> 何もない状態で自分自身(EXE)を立ち上げる事なんかできません
言われてみればそうですね^^;
EXE化してもタイマー起動が使えるものだと思い込んでいました。

スタートアップで起動しつつ、起動しっぱなしで動作する方向で
手を入れてみようと思います。
ありがとうございました。

No.5089 2018/01/31(Wed) 23:47:37


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


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