satocchiaブログ

satocchiaブログ

PR

×

キーワードサーチ

▼キーワード検索

カレンダー

コメント新着

tomoZo@ Re:Pale Moon日本語化トラブル(06/06) はじめまして。 28.16.0でまたもや提供さ…
satocchia @ Re[1]:Pale Moon日本語化トラブル(06/06) zui_9さんへ 本日、確認しました。ようや…
zui_9 @ Re:Pale Moon日本語化トラブル(06/06) 上記リンク「Githubのプロジェクト」の左…
わたなべ@ Re:powershellコンソール、見づらくありませんか?(08/26) 初めまして、この情報最高です! 背景を白…
y__@ Re:uwscでGUIフォーム(05/12) UWSC 仮掲示板から飛んできました。 HTAで…
2019.01.10
XML
カテゴリ: UWSC
uwscの組み込みインプットボックス関数「input」は機能豊富ですが、入力ダイヤログのタイトルは自由に設定できません。 
 Option DlgTitleで値を設定すればその文字列、無指定なら "UWSC - "+Get_Uwsc_Nameがタイトルに表示されます。Option DlgTitleはinputのみならずmsgboxなどほかのUWSC組み込みダイヤログのタイトルと共用なので、使い勝手はよくありません。確か、途中で値を変更することもできません。

検証スクリプト 
//option dlgtitleは何回も書けるが効果があるのは最後の1回だけ。
//下のmsgboxは3回ともt「itle 2」
msgbox("aaa")
option dlgtitle="title 1"
msgbox("aaa")
option dlgtitle="title 2"



 そこで、タイトル付きインプットボックス関数「inputbox」を作ってみました。

<ポイント>
  • VB.NETのinputboxはタイトルを付けられるので、powershell経由で呼びます。
  • ただし、UWSCのpowershell関数からwindows.forms出力しても(VB.NETのinputboxもwindows.formらしい)、出力が隠されてしまいます。powershell関数の第三引数をtrueにすると表示できるがpowershellの出力を受け取れなくなってしまいます。
  • そのため、inputboxを実行したらそのウインドウをctrlwin(id,show)してやります。
  • 同時並行処理となるのでスレッド展開します。
  • ウインドウIDはinputboxのタイトル名とウインドウクラス名(先述の通り「WindowsFormsほにゃらら」)で指定します。念のため実行ファイルがpowershell.exeであることも確認しています。

inputbox.uws

if GET_UWSC_NAME = "inputbox.uws"
    a=inputbox( "入力してください", "input_テスト中" )
    msgbox(a)
endif
function    inputbox( msg="", title=GET_UWSC_NAME )
    src    ="[void][Reflection.Assembly]::LoadWithPartialName(<#DBL>Microsoft.VisualBasic<#DBL>);"
    src    =src+"[Microsoft.VisualBasic.Interaction]::InputBox(<#DBL>@@@msg@@@<#DBL>,<#DBL>@@@ittle@@@<#DBL>);"
    thread inputbox_sub( title )

fend
procedure    inputbox_sub(title)
    while true
        for id in getallwin()
            if status( id, st_title ) <> title then continue

            if pos( "powershell.exe", status( id, st_path ) ) = 0 then continue
            break 2
        next
    wend

    ctrlwin( id, show )
    ctrlwin( id, activate )
    ctrlwin( id, normal )
fend


20190320追記

えらく手間をかけていますが、uwscからSTAモードでpowershellを起動すれば、別スレッドで表示させなくてもウインドウが出てくれます。
そこで関数をこうすれば簡単。
function    inputbox( msg="", title=GET_UWSC_NAME )
    src="powershell -sta -command <#dbl>"
    src    =src + "[void][Reflection.Assembly]::LoadWithPartialName('Microsoft.VisualBasic');"
    src    =src + "[Microsoft.VisualBasic.Interaction]::InputBox('@@@msg@@@','@@@ittle@@@');<#dbl>"
    result=powershell( replace( replace( src, "@@@msg@@@", msg ), "@@@ittle@@@", title ) )
fend





お気に入りの記事を「いいね!」で応援しよう

最終更新日  2019.03.20 12:32:35
コメント(0) | コメントを書く
[UWSC] カテゴリの最新記事


【毎日開催】
15記事にいいね!で1ポイント
10秒滞在
いいね! -- / --
おめでとうございます!
ミッションを達成しました。
※「ポイントを獲得する」ボタンを押すと広告が表示されます。
x
X

© Rakuten Group, Inc.
X
Design a Mobile Site
スマートフォン版を閲覧 | PC版を閲覧
Share by: