2021年8月21日土曜日

VBSでのclipbord内容の取得がうまくいかない

先日、以下の方法で取得可能と書きました。

    ’clipboard操作用objectを作成
    Set objHTML = CreateObject("htmlfile")
    'clipboardの内容を取得する
    strTEXT = objHTML.ParentWindow.clipboardData.GetData("text")

が、作成したtoolを他の人に使ってもらったところうまくいかず。
原因を調査したところclipboardの内容を取得できていませんでした。
(errorにもならないのが厄介)

netで調べていくとセキュリティ設定について言及されているものを発見。

IEのインターネットオプションでセキュリティのインターネットのレベルのカスタマイズで、スクリプトのスクリプトによる貼り付け処理の許可を有効にする。

しかしながら会社のセキュリティ設定で、この項目を有効にすることができません。

ではなぜ自分のPCではclipbord内容を取得できているのか?

以前に何かのtoolを作成したときに以下の設定をしていたのを思い出しました。

IEのインターネットオプションでセキュリティの信頼済みサイトのサイトに、about:blankを加える。(下の「このゾーンのサイトには~」のcheckを一度外して追加)

この設定を他の人にも行ってもらったところtoolが動くようになりました。

about:blankは中身の何もないpageを示しており、setしたobjHTMLが空っぽなので、この設定で信頼済みサイトとして認識されるようです。

2021年8月7日土曜日

VBSでIEを最前面に出す

 VBAだと

    Set objIE = CreateObject("InternetExplorer.Application")
    objIE.Visible = True

で最前面に表示されるのですけど、VBSだとなぜか背面に表示されます。

APIの「SetForegroundWindow」が使えそうなのですが、VBSで使える?

trickyではありますが、Excel4.0からcallすると使えるようです。

    'windowactiveにする(APIを使う)
    With CreateObject("Excel.Application")
        Call .ExecuteExcel4Macro("CALL(""user32"", ""SetForegroundWindow"", ""JJ"", " & objIE.hWnd & ")")
    End With

    戻り値はtrue/falseのようですけど、”JJ”を”LJ”にするとerrorになります。

    変数=戻り値、にしてもerrorになる?

ですが、windowが前面に出てきません。

調べていくと「SetForegroundWindowWindows95、およびWindows98では正常に機能しますが、Windows2000WindowsXPにおいてはタスクバーで点滅し、ウィンドウが隠れてしまいます。」とな。orz

では、「SetWindowPos」ではどうでしょう。

    'windowactiveにする(APIを使う)
    With CreateObject("Excel.Application")
        Call .ExecuteExcel4Macro("
CALL(""user32"",""SetWindowPos"",""JJJJJJJJ""," & objIE.hWnd & ",0,0,0,0,0,3)")
    End With

hWndの直後の0は「Zオーダーのトップに置く」らしいのですが、うまくいきません。
-1が「ウィンドウ表示リストのトップに置く(非アクティブになっても常にトップ位置を保持する)」であり、これはうまくいきました。しかし常にtopに居座られるのは邪魔。
-2は「トップ指定されたウィンドウの直後に置く」となってますが「解除」となっているものもあり、これを噛ませるたら所望の動作にできました。

よって、最終的なcodeは以下になります。

    'windowactiveにする(APIを使う)
    With CreateObject("Excel.Application")
        Call .ExecuteExcel4Macro("
CALL(""user32"",""SetWindowPos"",""JJJJJJJJ""," & objIE.hWnd & ",-1,0,0,0,0,3)")
        Call .ExecuteExcel4Macro("CALL(""user32"",""SetWindowPos"",""JJJJJJJJ""," & objIE.hWnd & ",-2,0,0,0,0,3)")
    End With

Excel.Application objectの生成に時間が掛かるのが玉に瑕ではありますが。
あ~、ExcelがinstallされていないPCではダメだという問題もありますね。

VBSでのclipboadの操作

editorの関係で、VBAで作ってVBSに移植を行っています。

clipbosrd操作もVBAとVBSで違いがあるようです。

HTMLfile objectを使用します。

    'clipboard操作
    Set objHTML = CreateObject("htmlfile")

clipbordのtext取得はVBAとVBSで同じ方法で行けそう。

    'clipboardの内容を取得する
    strTEXT = objHTML.ParentWindow.clipboardData.GetData("text")

clipboardへの書き込みが問題です。

    'Clip BoardSetする VBAはこちら
    objHTML.ParentWindow.clipboardData.setData "Text", strTEXT

    'Clip BoardSetする VBSはこちら
    cmd = "cmd /c ""echo " & strTEXT & "| clip""" 
    CreateObject("WScript.Shell").Run cmd, 0

VBA用はVBSではうまく動かず、VBS用はVBAではうまく動かず、良く分かりません。

VBS用は注意点がいくつかあります。

    最後に改行codeが入る
    |の前にspaceを入れるとspaceが入ってしまう
    strTEXTが空白だとechoの結果がclipboardに入ってしまう
    strTEXTに"が含まれているとうまく動作しない

改行codeをなくすには無理やりですが以下のようにしました。

    'Clip BoardSetする VBSはこちら
    cmd = "cmd /c ""set /p a=""" & strURL & """ < nul | clip"""
    CreateObject("WScript.Shell").Run cmd, 0

いずれにせよ制約が多そうなので、careしながら使うことにします。


このtopicsと全然関係ないですが、今回VBAで他に嵌ったのは、

    val関数が使えない。

        これは\と,を””に置換したらstringのまま計算できた。

 err objectがglobal変数だと思っていたらlocal変数だった

        private subに入ったら別の中身になっていました.

        VBAでも同じかな。documentを読むとglobalみたいなのですけど。


少なくともclipbord操作くらいはVBSの標準機能にしてほしいですね。

AOL mailが突然IMAP or POPで取得できなくなった

 2021年8月6日の未明から、突然、@aol.jpのmailが取得できなくなりました。

androidからIMAPで取得していたもの、POPで取得していたもの、windowsからPOPで取得していたもの、すべてダメです。

mail serverの不調なのかと思い1日待っても、ずっとerrorのまま。

netで調べてみるとOUTLOOKで2月に同じ症状が発生しているようです。

 これとか:突然outlookでaolが使用できない - Microsoft コミュニティ

AOLにloginするpasswordではダメで、IMAP/POP用のpasswordを取得してそれを用いるようになったのですね。

以下が対応方法です。

まず、次のURLにaccessします。https://login.aol.com/account/security

で以て、一番下の「アプリパスワードの管理」をクリックします。

ここで、アプリの選択の目的がよく分からないのですが、私は、「androidのメール」と「その他のアプリ」で「Windows Mail」としての2つのpasswordを生成しました。

(accessしているdevice or softwareを認識して、個別にpasswordが必要なのか?)

それらをcopyして、使っていたmail softwareの受信や送信のpasswordとして再入力したらmailが取得できるようになりました。

 参考はこれとか:AOLメールをアプリで送受信するためのパスワード設定

ホッとましたが、上のURLの情報で「2021年6月には新しく設定することはできなくなる予定とのこと」とあり(今回過ぎているのに大丈夫でしたけど)、いつまで使えるのか心配です。