- ベストアンサー
Ctrl+Vのキーストロークを合成して、クリップボードの内容を貼り付ける方法
- Ctrl+Vのキーストロークを合成して、クリップボードの内容を貼り付けたいと考えています。
- 記述に間違いがあるようですが、form上のText1内に張り付けることができません。
- 使用目的は、form1上のWebBrowser1に開いた入力フォームの<input type="file">にファイルのパスを貼り付けることです。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
sendKeysを使うといいかも
その他の回答 (3)
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
>その後時間が経過した後に本アプリケーションSendKeys利用しようとした場合であっても張り付きません 推測ですが、 SendKeysは、現在アクティブになっているウィンドウ(アプリケーション)にキー入力を送るものなので、タイミングによって自ウィンドウがアクティブになっていないからでじゃないかと思います。 OS起動直後は、特にさまざまな常駐プログラムなどが起動しますから、そのためだと思います。 だから、予防措置としては、SendKeysを実行する前にアクティブになっていることを確かめないといけませんが、プログラムで確かめたところで、他のアプリケーションがすぐさまアクティブになる場合もあるので、そういう切り替わりがないと考えられる状態で実行しないといけないですね。^^; >オブジェクト変数またはWithブロック変数が設定されていません。 このエラーって時にVBで起こるみたいですね。私的にはプログラムの中で不安定な要素(変数への参照を見失う?)があるような時に起こるというイメージですが、起こる原因というとこれっていうのは難しいですね。 原因となる部分がこのステートメントでない可能性もありますし。 私としては、基本的には、かっちりしたプログラムを作るとかビルドし直すとかそういうことしか思いつきません。 別に質問としてあげるといいかもしれませんね
お礼
いろいろとアドバイスしていただきありがとうございます。大変感謝しております。思いあたる部分をひとつずつ調べてみようと思います。
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
>xpにインストールして動かしたところ XPだからだめだという理由は良く判りません。 基本的には、動くと思われますが、 MEでの開発環境で使っているDLLなどが異なるとかそういうことかもしれません。 XPでの開発環境でビルドしなおしてみたりするとどうでしょうか >SendKeysで入力することはできますでしょうか。 SendKeys 文字列 なので、そのまま、引数として渡してやればいいと思います。 プラス記号 "+" カレット "^" パーセント記号 "%" ティルダ "~" などの特殊記号については、{}で囲むというような仕様だったと思いますが、ファイルパスでそうした特殊記号が使われることはほとんどないと思われるので、そのままでいいかと思われます。 (含まれる場合は、置換してやる必要があると思われますが)
お礼
色々とありがとうございました。大変感謝しております。おかげさまでXPでもなんとか動くようになりました。 DoEvents Do While WebBrowser1.Busy = True DoEvents Loop WebBrowser1.Visible = True Do While WebBrowser1.Document.ReadyState<> "complete" DoEvents Loop のかわりにtimerを利用して、もしもうまくいかない場合エラー処理に任せることにより、無理やりではありますが一応動作するようになりました。 ちなみに上記のソースを実行後は、SendKeysを2回実行すると張り付くようでしたがどうしてでしょう。 またたとえばOS起動直後に本アプリケーションがformを開いた場合、その後時間が経過した後に本アプリケーションSendKeys利用しようとした場合であっても張り付きません。OS起動後しばらくは操作できないようにすることで対応しましたが、どうしてでしょう。 また、まれにですが、 WebBrowser1.Document.myFORM.uploadfile.focus のところでエラー処理に飛ばずに「オブジェクト変数またはWithブロック変数が設定されていません。」等のエラーが発生することもあります。小さくて単純なアプリケーションのはずなのですが、これはリソースの不足か何かが原因でしょうか。 万一何かお気づきの点がございましたら申し訳ございませんがご教授いただければありがたいです。 ありがとうございました。
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
>WebBrowser1.Document.myFORM.uploadfile.focus」の行が黄色く表示されます。 実際に同じものを作って試してみたわけではないのですが、 こういうエラーを起こす原因で良くあるのは、 HTMLのレンダラーが完全に終わってない状態でその内容にアクセスしようとすることです。 HTMLの読み込みが完了した後(onloadイベントが起こった後)でなければ、フォームにアクセスしてはいけません。 まだ、存在しないフォームにアクセスしようとするのでエラーになります。 具体的には Document.readyState が "complete"になるまで待たないといけません。 すでにそういう処置をされていて、勘違いコメントだったらすみません。
お礼
アドバイスいただきありがとうございます。 DoEvents Do While WebBrowser1.Busy = True DoEvents Loop WebBrowser1.Visible = True Do While WebBrowser1.Document.ReadyState<> "complete" DoEvents Loop を追加したら動作するようになったようです。
補足
度々申し訳ありません。 WebBrowser1.Document.myFORM.uploadfile.focus SendKeys "^v" MeのVB上では動くのですが、xpにインストールして動かしたところ、myFORMのuploadfileにフォーカスは移るのですが、張り付きません。心当たりの点がございましたら恐れ入りますがアドバイスいただけないでしょうか。よろしくお願いします。 ちなみに、クリップボードから貼り付けるのではなく、(テキストボックスText1や変数a)に入っているApp.Path & "\" & "test.gif"といったパスをSendKeysで入力することはできますでしょうか。どのように記述すればよいでしょうか。基本的なことかと思われ申し訳ないのですが、教えていただけるとありがたいです。度々申し訳ございませんがよろしくお願いします。
お礼
アドバイスいただきありがとうございます。実はsendKeysとはどういったものかも知らなかったような状態でしたので、その後、sendKeysでWebBrowser内の送信フォームに書き込む方法についていろいろ調べました。その結果、だいたい以下のようになるのではないかと思って試したのですが Me.Enabled = True KeyPreview = True WebBrowser1.Document.myFORM.uploadfile.focus SendKeys "abcd", True Me.Enabled = False (送信formのnameは「myFORM」、fileのnameは「uploadfile」) 実行すると「オブジェクトはこのプロパティまたはメソッドをサポートしていません」と表示されてしまいます。 デバッグすると、「WebBrowser1.Document.myFORM.uploadfile.focus」の行が黄色く表示されます。 その後送信フォームを確認すると、「abcd」と入力されているので、もう一歩だと思うのですが、どこが間違っているかご教授いただけると大変ありがたく存じます。ちなみに遅れましたがvb6.0です。よろしくお願いいたします。 ちなみに以下のようなものも試してみたのですが Me.Enabled = True KeyPreview = True WebBrowser1.Document.All("uploadfile").focus SendKeys "abcd", True Me.Enabled = False 実行すると「オブジェクト変数またはWithブロック変数が設定されていません。」と表示されてしまいます。