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

月初4営業日 / はやしはる
月初から4番目の平日に経費データを落とすスクリプトを実行するようスケジュール設定したいです。
複雑な条件だと思いますが『式による設定』で書く方法があれば教えていただきたいです。

No.5183 2018/03/05(Mon) 22:27:18

Re: 月初4営業日 / ある
式ちょっと思いつかなかったけれど同様の挙動であれば
条件を「毎日実行」とした上で
曜日判定を行ってインクリメントで4番目の平日に実行、
それ以外は終了されては?

曜日取得はこんな感じで。

gettime()
print g_time_ww

No.5188 2018/03/06(Tue) 20:01:52

Re: 月初4営業日 / satocha
スケジュール設定ではヘルプに説明のある変数とそれを使った算術演算が使えるだけなので、
細かいことをやろうとすると、あるさんがおっしゃるように、スクリプト側で面倒を見るしかありません。

ただ、「平日」の意味が「土日以外の日」なら、簡単にスクリプトに作り込めますが、祝日が絡むととたんに話は複雑になります。

「祝日 javascript」で検索すると、がんばってプログラムしている例を多数見つけることができるので、それをUWSCに移植してもいいし、ScriptcontrolでJSのまま利用してもいいかもしれません。

しかし、例えば来年、再来年の祝日をプログラムで生成(判定)しようとしても、
こんな話
https://www.google.co.jp/search?q=%e5%8d%b3%e4%bd%8d%e3%81%ae%e6%97%a5%e3%80%80%e4%bc%91%e6%97%a5%e3%80%80%e7%a5%9d%e6%97%a5
とか、こんな話
https://www.google.co.jp/search?q=%e6%9d%b1%e4%ba%ac%e4%ba%94%e8%bc%aa%e3%80%80%e9%96%8b%e4%bc%9a%e5%bc%8f%e3%80%80%e7%a5%9d%e6%97%a5%e3%80%80%e4%bc%91%e6%97%a5
とかがあって、とてもじゃないけど仕事で使えるレベルにはなりそうもありません。

なので、祝日リストを別ファイルで用意するか、スクリプトの中に埋め込んでおくしかないと思います。

というより、逆に月初4営業日のリストを作っておくほうが簡単かもしれません。
gettime()
today=g_time_yy4+g_time_mm2+g_time_dd2
if !pos( today, FourthDays ) then exitexit //その日じゃなかったらスクリプト終了
//以下スクリプト本体
//または、callでスクリプト本体を呼んでもいい

//第四営業日リスト
textblock FourthDays
20180104
20180205
20180305
20180404

endtextblock

No.5193 2018/03/07(Wed) 08:07:17

Re: 月初4営業日 / はやしはる
あるさん、Satochaさん

ご返答ありがとうございます。やはり式では難しいですね。
第4営業日リストというのは目から鱗です。
さっそく活用します♪

No.5197 2018/03/07(Wed) 22:29:43
ごちゃ混ぜデータを整理する / オグラ
下記みたいにバラバラのデータを会社名毎にまとめたいと思うのですが
会社名   品名         金額
A商事 |インクカートリッジ |\800
B建設 |コピー用紙 |\500
C電気 |カラーペン |\250
D不動産 |付箋 |\300
C電気 |インクカートリッジ |\800
A商事 |コピー用紙 |\500
D不動産 |カラーペン |\250
会社毎にファイル名を作って保存して行ければ一番楽なんですが、会社毎の情報をエクセルに貼り付けたいと思っている為、
「A商事」だけの情報をクリップボードなどに入れてエクセルに貼り付け保存
「B建設」だけの情報をクリップボードなどに入れてエクセルに貼り付け保存
のような処理をしたいと思ってますがいい方法が思いつかない為書き込みをさせて頂きました。

なにかいい方法がありましたら是非教えて頂ければと思います。

よろしくお願い致します。

No.5185 2018/03/06(Tue) 13:09:48

Re: ごちゃ混ぜデータを整理する / ある
COM操作で問題ないのでは?

Ex=createoleobj("Excel.Application")
Ex.sheets("sheet1").range("a1")="test"

確かこんな感じで動いたかと。
会社ごとにbookを変えるのかsheetを変えるのかがわかんなかったので、
ヒント提示のみで。

No.5187 2018/03/06(Tue) 19:57:57

Re: ごちゃ混ぜデータを整理する / しろまさ
// こういうことでないの?

TextBlock list
会社名   品名         金額
A商事 |インクカートリッジ |\800
B建設 |コピー用紙 |\500
C電気 |カラーペン |\250
D不動産 |付箋 |\300
C電気 |インクカートリッジ |\800
A商事 |コピー用紙 |\500
D不動産 |カラーペン |\250
EndTextBlock

ser = "A商事"
str = rReplace(list, "^(" + ser + ".*\r?\n?)|^.*\r?\n?", "$1")
MsgBox(str)

Function rReplace(s, p, r); Dim g = CreateOLEObj("VBScript.Regexp"); g.Pattern = p; g.Global = TRUE; g.Multiline = TRUE; Result = g.Replace(s, r); FEnd // 正規表現 置換

No.5194 2018/03/07(Wed) 13:18:40
フォーム入力の方法 / かじさん
小林シンヤさんの本で勉強しているのですが,フォーム入力やラジオボタンを押す部分が何度読んでも理解できない状態です.
IE.document.forms[0].elements[0}というのが理解できず….
かといってフォームや要素の名前で指定するにもソースをテキストファイルで開いてからどこの文字列を取得していいかが理解できず困っています.

このUWSC掲示板の,タイトル,お名前に何か文字を入力してから文字色で青★を選びプレビューボタンを押す場合でコードを書いて説明いただけないでしょうか?
あまりにも質問のレベルが低くて恐縮ですが,よろしくお願いします.

No.5182 2018/03/05(Mon) 21:10:28

Re: フォーム入力の方法 / ある
僕も最初そこ、結構こけましたw

HTMLの構造はご存知ですかね?
クロームであればF12でサイトのソース見れたりします。
formsは<form>タグですね。elementsはその中の部品って感じです。

一応イメージ掴めるように置いときます。
busywaitはサンプル#34にあるんで拾ってもらえたら(長くなるので略)
http://www.uwsc.info/sample.html#n34

//--------------------------------------

Public IE
IE = CreateOLEObj("InternetExplorer.Application")
IE.Visible = True
setOleEvent()
IE.Navigate("http://www3.rocketbbs.com/13/bbs.cgi?id=umiumi")
BusyWait()

for n=0 to IE.document.forms.length-1
for i=0 to IE.document.forms[n].elements.length-1
IE.document.forms[n].elements[i].value=n+"★"+i
next
next

No.5189 2018/03/06(Tue) 20:11:32

Re: フォーム入力の方法 / かじさん
ありがとうございます.
感謝いたします。

ただ、本以上に難しいスクリプトをいただいたので私の実力では申し訳ないぐらいに理解しづらい状態にあります.
IEを立ち上げるところまでしか理解できませんでした。

setOleEvent()とBusyWait()はいったい何をしているのでしょうか?

for n=0 to IE.document.forms.length-1
for i=0 to IE.document.forms[n].elements.length-1
IE.document.forms[n].elements[i].value=n+"★"+i
next
next

ですが、すべてのフォームにn★iを書くという認識でいいでしょうか?
プログラムを実行しても何も起こらなかったので.
検証のためにmsgbox(IE.document.forms.length)としたのですが、エラーが生じました.
IE.document.forms.lengthは何の値か見れないのでしょうか?
理解が悪すぎて申し訳ないのですが,ご教示いただければ幸いです.

No.5191 2018/03/06(Tue) 20:53:21

Re: フォーム入力の方法 / ある
あぁ、すいませんsetOleEventも入ってましたね。
それはpro版で自動生成されるものなんです。
今度のは貼り付けるだけで動くようにしました。
busywaitは「IEがちゃんと表示されるまで待つ」という処理ですね。
IE.docuent.forms.lengthはformの数になります。
見られなかった理由はIEの値が入っていなかったからではないかと思います。
今回のはそれも見られるようにしました。

IE = CreateOLEObj("InternetExplorer.Application")
IE.Visible = True
IE.Navigate("http://www3.rocketbbs.com/13/bbs.cgi?id=umiumi")
repeat
Sleep(0.2)
until (! ie.busy) and (ie.readyState=4)
msgbox("formの数は="+IE.document.forms.length+"個だよん")

for n=0 to IE.document.forms.length-1
for i=0 to IE.document.forms[n].elements.length-1
IE.document.forms[n].elements[i].value=n+"★"+i
next
next

No.5192 2018/03/07(Wed) 07:32:32
数字の音声認識 / Chico
音声認識について、
「数字」を読み込ませたいと思うのですが、現在は

for i = 0 to 1000 //数字読み込ませ
seisu[i] = i
next
RECOSTATE(True, seisu)

こんな感じで読み込ませているのですが、
数が多くなるにつれ、プログラムの立ち上がりと
認識レスポンスが重く重くなってしまいます。
(私の環境では千を超えた程からかなり遅くなっていきます。)

何か良い対処法があれば教えていただきたいと思います。
よろしくお願いいたします。

No.5186 2018/03/06(Tue) 18:19:33
タグ名を分岐にしたい / Nomu
あるサイトに掲載されてる画像を名前を付けて保存したいと考えています。
for〜next文を使って以下のようなスクリプトを書き、動いてるいるのですが、
画像が存在しない場合、タグ名が「HTTP 404 未検出」となります。
それでも動くのですが、時間がもったいないのでタグ名前が「HTTP 404 未検出」となった場合は次の画像(for文での次の値)に移るようにスクリプトを書きたいと思います。
ただ、その書き方が分からないので教えていただけないでしょうか。
よろしくお願いします。

// 登録した画像を取得するスクリプト

ACW(GETID("https://learning.XXXXXX/YYYYY/course/20170306_135245860_copy_2/sco57283262/02mkt/el/01- - Internet Explorer","IEFrame"),0,0,1920,1030,5)

// ファイル名を順次変更
for i = 1 to 5
for j = 1 to 5
for k = 1 to 5
for l = 1 to 9
SENDSTR(0,"https://learning.XXXXXX/YYYYY/course/20170306_135245860_copy_2/sco57283262/02mkt/el/0" + i + "-0" + j + "-0"+ k + "-0" + l +".jpg")

sleep(1.5)
//アドレスバーをクリック
BTN(LEFT,CLICK,957,49,20)

//アドレスバーにリンク先を張り付ける
KBD(VK_CTRL,DOWN,20)
KBD(VK_V,CLICK,20)
KBD(VK_CTRL,UP,20)
KBD(VK_RETURN,CLICK,20)

sleep(0.5)
//現れた画像をクリック
BTN(LEFT,CLICK,926,762,20)
//現れた画像を右クリック→名前を付けて保存
BTN(RIGHT,CLICK,926,762,20)
KBD(VK_S,CLICK,20)

//ファイル名を変更せずに保存
ACW(GETID("画像の保存","#32770"),8,0,947,592,55)
KBD(VK_RETURN,CLICK,30)

sleep(0.7)
ACW(GETID("https://learning.XXXXXX/YYYYY/course/20170306_135245860_copy_2/sco57283262/02mkt/el/01- - Internet Explorer","IEFrame"),0,0,1920,1030,5)

next
next
next
next

No.5179 2018/03/03(Sat) 16:25:57

Re: タグ名を分岐にしたい / stuncloud
「HTTP 404 未検出」が表示される座標が固定されているのであれば、マウスカーソルをそこに移動させてposacc()で文字列を取得するというのはどうでしょう、該当する文字列が取得できれば画像がないということでcontinueします

mmv(x, y) // 文字列が表示される座標にマウスカーソルを移動
if posacc(0, G_MOUSE_X, G_MOUSE_Y) = "HTTP 404 未検出" then
 continue // 以降の処理をしないで次のループに進む
endif

こんな感じ
文字列の部分一致で判定したい場合は

mmv(x, y)
msg = posacc(0, G_MOUSE_X, G_MOUSE_Y)
if pos("404", msg) > 0 then
 continue
endif

こんな感じにします

No.5180 2018/03/05(Mon) 10:17:49
行の削除 / との
操作を記憶させたスクリプトからMMVで始まる行を削除させたいと思います。
以下のように書いたのですが、MMVの行が削除されません。
お手数ですが、おかしな箇所を修正いただけないでしょうか。



Repeat
fnm = INPUT("MMVを削除したいスクリプトをドラッグ&ドロップしてください。")
if fnm = EMPTY then ExitExit
Until FOPEN(fnm, F_EXISTS) and (Pos(".uws", fnm)>0)
Repeat

ID = FOPEN(fnm,F_READ or F_WRITE)

//開始行
LINE = 1

WHILE FGET(ID,F_LINECOUNT) >= LINE
IFB FGET(ID,LINE,1) = "MMV"
FDELLINE(ID,LINE)
ENDIF

LINE = LINE + 1
WEND
FCLOSE(ID)

No.5173 2018/03/02(Fri) 23:49:00

Re: 行の削除 / トンボ
Repeatが1つ多いなど誤記もありますが、行削除するとテキスト内容(全体行数)が変化するため、その度にテキスト内容の取得と1行目からのチェックを繰り返す必要があります。
ただし、処理内容が複雑になり非効率なので、テキスト内容の下から上へチェックする処理にしました。

REPEAT
 FilePath = INPUT("MMVを削除したいスクリプトをドラッグ&ドロップしてください。")
 IF FilePath = EMPTY THEN EXITEXIT
UNTIL FOPEN(FilePath, F_EXISTS) AND (POS(".uws", FilePath) > 0)

FileID = FOPEN(FilePath, F_READ or F_WRITE)

// 下から上へ1行ずつチェックし、"MMV("があれば行削除する
FOR Line = FGET(FileID, F_LINECOUNT) TO 1 STEP -1
 IFB POS("MMV(", FGET(FileID, Line)) = 1
  FDELLINE(FileID, Line)
 ENDIF
NEXT

FCLOSE(FileID)

No.5178 2018/03/03(Sat) 11:40:36
チェックボックスの操作 / もっさん
72番目のチェックボックスにチェックを入れたいとき

for i = 1 to 72
KBD(VK_Tab , CLICK , 5)
next
KBD(VK_Space , CLICK , 5)

としています。
たとえば、72番目のチェックボックスの名称を取得して、そこでスペースを押すなどのスマートに書く方法はありませんか。

No.5166 2018/02/28(Wed) 23:33:50

Re: チェックボックスの操作 / satocha
ヘルプのgetitem、clkitem、chkbtnの各項目を熟読すると、いい知恵が浮かぶと思います。

あと、No.5163で挙げたツールでウインドウを調べるのも効率的だと思います。

No.5167 2018/03/01(Thu) 08:21:40

Re: チェックボックスの操作 / もっさん
satochaさん

アドバイスありがとうございます。
ご教示のgetitem、clikitem、chkbtnを調べて2日間がんばって試したのですがどうも行き詰りました。
簡単で結構ですので一例をあげていただけないでしょうか。

No.5174 2018/03/02(Fri) 23:56:16

Re: チェックボックスの操作 / satocha
問題は目的のチェックボタンをどう取得するかです。ウインドウがわからないので具体的な説明は難しいです。
まず、
id=getid(ウインドウタイトル。ウインドウのクラス)
str=""
for item in getitem(id,-1)
 str=str+item+"<#CR>"
next
sendstr(exec(notepad),str)
のような感じで、どんなアイテムがとれているかリストアップしてください。
この作業を、見やすい形で代行してくれるのがNo.5163で挙げたツールですので、こちらを使ったほうが効率的だと思います。
あるいはUWSCの記録機能でウインドウ操作を高レベル記録し、生成したマクロを調べてみてください。

目指すチェックボックスのアイテム名が確定すれば、
CLKITEM( ID, アイテム名, CLK_BTN, On/Off, 番号 )でクリックできます。
同名のもの一つしかなければ番号は不要です。On/Offを指定しなければ、チェックをトグルします。

No.5175 2018/03/03(Sat) 03:11:05

Re: チェックボックスの操作 / もっさん
satochaさん

ありがとうございます。
だいぶ方針が見えてみました。
再度チャレンジしてみます。

No.5176 2018/03/03(Sat) 10:43:03
ログイン後に表示される「○○○パスワードを保存しますか?」について / リキュール
ホームページにログインすると以下のようなメッセージが下欄に表示されます。
この時「このサイトではしない(Y)」をクリックしたいのですが方法が分かりません。
よろしくお願いいたします。(環境は Windows7 IE11です。)

○○○パスワードを保存しますか?  はい(Y)   このサイトではしない(N)

No.5158 2018/02/27(Tue) 17:24:12

Re: ログイン後に表示される「○○○パスワードを保存しますか?」について / satocha
UWSCのタスクスケジュール機能でclassが「IEFRame」のウインドウが出現したときに立ち上がるUWSスクリプトを作り、
そのスクリプトの中で、「このサイトではしない」ボタンを探す…

というような感じで頑張れば何とかなるかもしれません。
このツール
http://nem.symphonic-net.com/uwsct/fcuc_readme.htm
でIEを調べたら「このサイトではしない」ボタンも取れていましたから。

でもUWSCで頑張るよりIEの設定を変えるほうが簡単だと思います。
http://pasofaq.jp/program/internetexplorer/savepassword.htm

No.5163 2018/02/28(Wed) 19:18:47

Re: ログイン後に表示される「○○○パスワードを保存しますか?」について / リキュール
satocha さん、お世話になります。

UWSCコードの断片生成器を用いてgetitemからITEM名等を取得し、
clkitemでボタンを押すことが出来ました。
質問の勘違いがあり、"このサイトではしない"のボタンを押すのではなく、
閉じるの×ボタンでした。(思い通りの操作ができました)
ありがとうございました。

No.5171 2018/03/02(Fri) 14:51:08
タイマーのインターバルよりも、15秒早く起動させるには / MT
ある動作を、5分ごとに動かしたいのですが、スケージュール設定のタイマーでインターバルの5分毎で設定した動作よりも、15秒早く起動させるにはどうしたらいいのでしょうか?
No.5164 2018/02/28(Wed) 22:37:42

Re: タイマーのインターバルよりも、15秒早く起動させるには / トンボ
条件を明確にした上で解決策を検討するので、回答お願いします。

?@15秒速く起動というのは最初の1回だけでよいでしょうか?それとも毎回でしょうか?
?A毎回だとして、4分45秒間隔で起動すればよいでしょうか?それとも5分間隔でしょうか?
?B起動とは、UWSC.exe起動でしょうか?それともスクリプト(*.uws)実行でしょうか?

No.5170 2018/03/01(Thu) 20:28:14
エクスプローラでフォーカス中のファイルの取得 / mt
エクスプローラをキーボードで操作して
フォーカス中のファイル内をリアルタイムで表示するツールの作成を考えていますが
可能でしょうか?

マウスであれば、
マウス下のファイル名とパスを取得することで可能と思われますが、
その様なことをキーボードの矢印キー移動で実現したいと考えています。

よろしくお願いします。

No.5142 2018/02/18(Sun) 22:12:40

Re: エクスプローラでフォーカス中のファイルの取得 / satocha
qキーでループを抜けます。
いちいちpowershellを起動しているので動きがもっさり(表示まで1秒程度必要)です。
powershell高速化の方法はしゅんさんがブログで書かれていたような記憶があります。

<以下ソース>

sendstr(0,"")
while !getkeystate( vk_q )
    fukidasi( getIconPath() )
    sleep( 0.1 )
wend
exitexit

function    getIconPath()
    id  =getid( GET_ACTIVE_WIN )
    if status( id, st_class ) <> "Progman"  and status( id, st_class ) <> "cabinetWClass"
        result  =""
        exit
    endif
    kbd( VK_ctrl, down )
    kbd( VK_c, click )
    kbd( VK_ctrl, up )
    result  =getClipPath()
fend
function    getClipPath()
    result  =powershell_STA( getClipPath.src )
    module getClipPath
textblock src
[void][reflection.assembly]::loadwithpartialname("System.Windows.Forms")
if (  [windows.forms.clipboard]::ContainsFileDropList() ){
     [windows.forms.clipboard]::getFileDropList()
}
endtextblock
    endmodule
fend
function    powershell_STA( src )
    encodedSource   =powershell( "[Convert]::ToBase64String([System.Text.Encoding]::Unicode.GetBytes( '" + src + "' ))" )
    encodedSource   =replace( encodedSource, "<#CR>", "" )
    result  =powershell( "powershell -sta -EncodedCommand " + encodedSource )
fend

No.5143 2018/02/19(Mon) 08:40:56

Re: エクスプローラでフォーカス中のファイルの取得 / mt
satochaさん

返答ありがとうございます。
後に上記の確認を行います。

取り急ぎ、お礼まで。

No.5145 2018/02/19(Mon) 12:09:18

Re: エクスプローラでフォーカス中のファイルの取得 / satocha
まともな速度で動くよう、改良しました。こっちを使ってください。
sendstr(0,"")
thread getClipPath()
while !getkeystate( vk_q )
    fukidasi( getIconPath() )
    sleep( 0.1 )
wend
exitexit

function    getIconPath()
    id  =getid( GET_ACTIVE_WIN )
    if status( id, st_class ) <> "Progman"  and status( id, st_class ) <> "cabinetWClass"
        result  =""
        exit
    endif
    kbd( VK_ctrl, down )
    kbd( VK_c, click )
    kbd( VK_ctrl, up )
    id0 =getid( "getClipPath_hiddenDialog" )
    if status( id0, st_isid )
        result=getstr( id0, -1, STR_STATIC )
    else
        result=""
    endif
fend
procedure   getClipPath()
    uwsc_pid    =status( getid( GET_THISUWSC_WIN ), ST_PROCESS )
    src         =replace( getClipPath.src, "<PID>", uwsc_pid )
    powershell_STA( src )
    module getClipPath
textblock src
[void][reflection.assembly]::loadwithpartialname("System.Windows.Forms")
$UWSC_pid="<PID>"
do{
    if (  [windows.forms.clipboard]::ContainsFileDropList() ){
        $pathstr    =[windows.forms.clipboard]::getFileDropList()
        #[windows.forms.messagebox]::show($pathstr)
        $form=new-object system.windows.forms.form
        $form.text="getClipPath_hiddenDialog"
        $label=new-object system.windows.forms.label
        $label.text=$pathstr
        $form.controls.add($label)
        $form.formborderstyle="none"
        $form.opacity=0.01
        $form.show()
        sleep  -m 100
        $form.close()
    }
    if ( !( gwmi win32_process|?{$_.processID -eq $UWSC_pid } ) ) {
        break
    }
}while( $true )
endtextblock
    endmodule
fend
procedure   powershell_STA( src )
    encodedSource   =powershell( "[Convert]::ToBase64String([System.Text.Encoding]::Unicode.GetBytes( '" + src + "' ))" )
    encodedSource   =replace( encodedSource, "<#CR>", "" )
    powershell( "powershell -sta -EncodedCommand " + encodedSource, true )
fend

No.5146 2018/02/19(Mon) 13:30:56

Re: エクスプローラでフォーカス中のファイルの取得 / mt
わざわざ改良までしていただき、ありがとうございました。
powershellの知識が全くないので、これを機に勉強してみます。

No.5148 2018/02/19(Mon) 20:21:19

Re: エクスプローラでフォーカス中のファイルの取得 / mt
実行時にpowershellのタスクバーボタンが連続で何度も表示されるのを非表示にする事はできないでしょうか。
powershell関数の第3引数はデフォルト(非表示)になっていますが、
タスクバーボタンには一瞬表示されるものですか?

No.5150 2018/02/20(Tue) 07:04:45

Re: エクスプローラでフォーカス中のファイルの取得 / satocha
uwscのpowershell関数は起動のオーバーヘッドが極めて大きい(1秒近い)ので、powershellを起動しっぱなしにして、UWSCと情報のやり取りを行う仕組みにしました。

その方法として目に見えないウインドウ(ドットネットのWindows.Forms.form)を開いています。

しかし、powershellでWindows.Forms.formを表示し、そのウインドウ上の情報を更新することはもう一手間かかるため、ウインドウに情報を表示したらウインドウごと落として次の情報を表示するという手抜きコーディングを行いました。

手抜きなので一見うまく行っているように見えても、タスクスイッチャーなどでみると、アイコンが点滅するような感じになってしまいます。

なので、手抜きでなくきちんと動作させたいのなら、ウインドウを1回だけ開き、そのウインドウに載せる情報を更新する手段が必要になります。

ウインドウを表示すること
情報を随時更新すること

この2つを並行動作するためには、バックグラウンドプロセスでいけそうな気がしますが、実はpowershellではUIに絡むバックグラウンド動作はできないようです。そこで、RunSpacePoolという機能(私も詳しくない)を使ってコーディングしたところ、うるさいタスクのオンオフがなくなりました。powershell windows.forms RunSpacePoolなどのキーワードで検索すれば情報が得られると思います。
参考URL
https://hinchley.net/articles/creating-a-windows-form-using-powershell-runspaces/

ただ、ソースを全部のせてしまうとせっかくの意欲をそいでしまいかねないので、宿題ということでどうでしょうか。

No.5152 2018/02/20(Tue) 16:09:19

Re: エクスプローラでフォーカス中のファイルの取得 / mt
ありがとうございます。
リンクを参考にトライしてみます。

No.5153 2018/02/20(Tue) 19:33:04

Re: エクスプローラでフォーカス中のファイルの取得 / mt
RunSpacePoolでの実現は私には難しかったため、
フォーカスしているファイルに変更があった場合だけ更新する方法で妥協しました。
とりあえずはこの動作で利用しようと思います。ありがとうございました。

sendstr(0,"")
thread getClipPath()

oldpass = getIconPath()
while !getkeystate( vk_q )
newpass = getIconPath()
if newpass = "" then
//何もしない
elseif newpass = oldpass then
//何もしない
else
fukidasi( newpass )
oldpass = newpass
endif
sleep( 0.1 )
wend
exitexit

function getIconPath()
id =getid( GET_ACTIVE_WIN )
if status( id, st_class ) <> "Progman" and status( id, st_class ) <> "cabinetWClass"
result =""
exit
endif
kbd( VK_ctrl, down )
kbd( VK_c, click )
kbd( VK_ctrl, up )
id0 =getid( "getClipPath_hiddenDialog" )
if status( id0, st_isid )
result=getstr( id0, -1, STR_STATIC )
else
result=""
endif
fend


procedure getClipPath()
uwsc_pid =status( getid( GET_THISUWSC_WIN ), ST_PROCESS )
src =replace( getClipPath.src, "<PID>", uwsc_pid )
powershell_STA( src )
module getClipPath
textblock src
[void][reflection.assembly]::loadwithpartialname("System.Windows.Forms")
$UWSC_pid="<PID>"
do{
if ( [windows.forms.clipboard]::ContainsFileDropList() ){


if ( $pathstr -eq [windows.forms.clipboard]::getFileDropList() ){
sleep -m 100
continue
}

$pathstr =[windows.forms.clipboard]::getFileDropList()
#[windows.forms.messagebox]::show($pathstr)
$form=new-object system.windows.forms.form
$form.text="getClipPath_hiddenDialog"
$label=new-object system.windows.forms.label
$label.text=$pathstr
$form.controls.add($label)
$form.formborderstyle="none"
$form.opacity=0.01
$form.show()
sleep -m 100
$form.close()
}
if ( !( gwmi win32_process|?{$_.processID -eq $UWSC_pid } ) ) {
break
}
}while( $true )
endtextblock
endmodule
fend
procedure powershell_STA( src )
encodedSource =powershell( "[Convert]::ToBase64String([System.Text.Encoding]::Unicode.GetBytes( '" + src + "' ))" )
encodedSource =replace( encodedSource, "<#CR>", "" )
powershell( "powershell -sta -EncodedCommand " + encodedSource, true )
fend

No.5161 2018/02/28(Wed) 16:49:02

Re: エクスプローラでフォーカス中のファイルの取得 / satocha
runspaceを使った例を挙げておきます
https://plaza.rakuten.co.jp/satocchia/diary/20180220/
下の方です

No.5162 2018/02/28(Wed) 19:01:16

Re: エクスプローラでフォーカス中のファイルの取得 / mt
ありがとうございます。
確認してみます。

No.5169 2018/03/01(Thu) 08:25:29


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


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