アプリ版:「スタンプのみでお礼する」機能のリリースについて

こんばんは

以下は、HTAアプリケーションのbody部にマウスカーソルを乗せると、テキスト上の選択してある文字列をクリップボードに送り、そのデータをテキストボックス内に送ることを意図したスクリプトです。
しかし、テキストを選択した状態でonmouseoverイベントを発生させても1回目はNull、2回目は選択した文字列がテキストボックスにセットされ、これが交互に繰り返されます。
当方のWindows7でも、仕事先のXPの環境でも同様の現象が発生します。

Nullがランダムに発生するのであれば、コピーが失敗しているのだなと分かるのですが、規則的に交互に繰り返される理由がわかりません。
どなたか、原因と解決法をご存知のかたがいらっしゃいましたら、教えていただきたいです。
(※7でClipコマンドが使えるのは知っております)


--------------------sample.hta----------------------
<html>
<head>
<script type="text/vbscript">
Sub window_onload
resizeTo 200,200
End Sub

Sub Sample
Set sh = CreateObject("Wscript.Shell")
sh.sendkeys "^c"
Clp = ClipboardData.GetData("text")
text1.value = Clp

Set sh = Nothing
ClipboardData.ClearData
End sub
</script>
</head>


<body onmouseover="Sample">
<input type="text" id="text1">
</body>
<html>

A 回答 (1件)

こんばんは。



ちょっとだけ、以下のように変えてみました。
でも、そのコードは、コピーに失敗はしていないし、コードそのものは問題ないのでは?

それと、その、ClipboardData.ClearData というのは必要なのですか?
空のClp を、そのまま表示すれば、null になりますね。
null は、Variant型の何もない状態のものです。もし、空のClpでも、""(長さ0の文字列)ぐらい入れれば、Text1 は、見かけの空白にはなります。

それと、Dim Clp の変数の宣言を、外に出して、Clpを空にしないようにしてみました。つまり、何もしなければ、そのまま残るということです。

なお、実際のご要望とは違ってしまったら、ご容赦ください。その場合、「解決法」の意図する所を、誤解しているはずです。

'//
Dim Clp

Sub window_onload
resizeTo 200,200
End Sub

Sub Sample
With CreateObject("Wscript.Shell")
.Sendkeys "^c"
End With
Clp = ClipboardData.GetData("text")
If IsNull(Clp)=False Then
text1.Value = Clp
'ClipboardData.ClearData
End If
End sub
'///
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!