非アクティブ状態でのWindowsフォームを動かすには?

解決


KimPossible  2006-03-04 09:49:52  No: 130555

超初心者です。VS2005にてWindowsFormを作成しました。4つのRadioボタンにて異なるTextFileを選択しClipBoadに書込させ、別ウインドウでカーソルが置かれている場所にClipBoadを貼付させたたいです。Radioボタン選択はaccess keyを設定しましたが、別ウインドウにカーソルを置くとaccess keyが当然利きません。作成したWindowsFormを常に使用可能(有効)にするにはどのようにすればよろしいのでしょうか?別ウインドウのカーソルに貼付するにはどのようにすればよろしいのでしょうか?お願いします。


我龍院忠太  2006-03-04 19:32:36  No: 130556

要するにあるFormからクリップボードに読み込まれた文字列を
別のForm上のTextBoxのキャレットの位置に文字列をペースト
したいという事ですか。
>Radioボタン選択はaccess keyを設定しましたが
"access key"ってのは何でしたっけ?
クリップボードからペーストするのに、Formがアクティブか
非アクティブかは関係有りませんよね。
とりあえず、Form2にTextBoxを一つ置いて

Public Class Form1
    Dim F2 As New Form2
    Private Sub RadioButton1_CheckedChanged(ByVal sender As System.Object, _
        ByVal e As System.EventArgs) Handles RadioButton1.CheckedChanged
        If RadioButton1.Checked Then
            My.Computer.Clipboard.SetText(" My ")
            F2.TextBox1.SelectedText = My.Computer.Clipboard.GetText()
            F2.Select()   'Form2をアクティブにしたかったら
        End If
    End Sub
    Private Sub Form1_Load(ByVal sender As System.Object, _
        ByVal e As System.EventArgs) Handles MyBase.Load
        F2.Show()
        F2.TextBox1.Text = "Hello World"
        F2.TextBox1.SelectionStart = 5 'キャレット移動
    End Sub
End Class
こんなことでは。


Kimpossible  2006-03-05 01:01:08  No: 130557

お返事あろがとうございます。お答え頂いた内容は理解し勉強になりました。が、私の質問の文章が悪かったようで少しニュアンスが異なる?ようですので再度質問させてください。よろしくお願いします。
>別ウインドウでカーソルが置かれている場所にClipBoadを貼付させたたいです。
と記述しましたが、「別ウインドウ」と言うのはVC2005で作成されたFormではなく、Web画面や、メモ帳等の一般的なウインドウに置かれたカーソルに対しClipBoadを貼り付けたいのです。
教えて頂いた内容の応用でも上手くいきますでしょうか?まったくのシロウトですのでこの内容でも応用編で上手くいく方法があれば教えてください。
>Radioボタン選択はaccess keyを設定しましたが
FormをアクティブにさせマウスクリックでRadioボタンを選択するのではなく、別ウインドウをアクティブのままでカーソル部分に4つのTextの1つを選択、ペーストさせるためにRadioボタンクリックのコントロールをAltを押しながらQキーを押し、選択可能としました。
まだ上手く表現できてませんが・・・・すいません。
要は、作成したFormをマウス操作はせず、非アクティブのままでキー操作でRadioボタン選択(他でも構いません)し、4つのText中の一つを選択しWeb画面や、メモ帳等の一般的なウインドウに置かれたカーソルに対しClipBoadを貼り付けたいのです。
初心者の私案ですが、
1.作成したFormを常にアクティブにする方法?
2.もしくはPCのメモリの常駐させ常にFormが動くようにする?
3.アクティブなウインドウのカーソルの置かれている間所を探しそこにペースト?
などと考え、いろいろ試行錯誤しておりました。
まったく糸口がつかめず、困ってしまいました。
このような内容ですが、どなたかお力をお貸しください。
宜しくお願いします。


ABC  2006-03-06 20:05:34  No: 130558

RadioボタンはAlt+Qだけで切り替えるのですか?

アクセスキーではなくホットキーを設定(RegisterHotKey)してみてはいかがでしょうか?

これなら画面が非アクティブでもAlt+Qを取得することは出来ると思います。


Kimpossible  2006-03-07 07:57:47  No: 130559

お返事遅くなりました。
ABC様ありがとうございます。
>RadioボタンはAlt+Qだけで切り替えるのですか?
4つのRadioボタンに紐付けて各キーにて切替えようと思っております。
>アクセスキーではなくホットキーを設定(RegisterHotKey)してみてはいかがでしょうか?
先ほど、任意のホットキーを設定して非アクティブなフォームをアクティブに出来ました。ただ各4つのボタンに紐づくキーをホットキーにしてのTESTは実施しておりません。TESTせずに質問して申し訳ありませんがFormのアクティブ化とRadioボタンのコントロールは同時に行われるのでしょうか?

最終的には、別の一般的なウインドウに置かれたカーソルに対しClipBoadを貼り付けたいのですが、以下のような動作が必要なのでしょうか?
1.ホットキーにてFormをアクティブ化
2.VBにてRadioボタンのコントロールを実施
3.元のアクティブウインドウのカーソルの置いてる場所にペースト
と、ウインドウを移行する方法となるのでしょうか?
2.のコントロールの段階で3.の動作をさせなければならないのでは?と考えております。この方法も思いつきません。大変恐縮ですが御教授頂ければ幸いです。宜しくお願いします。


ABC  2006-03-07 19:23:28  No: 130560

私が考えていたのは、ホットキーが押されたらそのキーに対応するRadioボタンにチェックをつけて、カーソル位置にテキストを貼り付けするのだと思っていました。。

フォームはアクティブにする必要があるということですよね・・

Radioボタンを選択したら、自フォームを最小化すれば元のウインドウがアクティブになってくれるのではないでしょうか?

それか、ホットキーを押した時点でのアクティブウインドウを取得しておくか。


KimPossible  2006-03-08 03:11:54  No: 130561

ABC様
いつもお返事ありがとうございます。
非常に助っております。
>Radioボタンを選択したら、自フォームを最小化すれば元のウインドウがアクティブになってくれるのではないでしょうか?
気がつきませんでした。これをヒントに再度チャレンジしてみます。
>それか、ホットキーを押した時点でのアクティブウインドウを取得しておくか。
この方法も知りたいです。
どのようなソースでアクティブウインドウを取得するのでしょう??
取得したものをどのように使えばいいのでしょうか??
お時間があるときで結構ですので再度ご教授頂ければうれしいです。
宜しくお願いいたします。


ABC  2006-03-08 07:09:14  No: 130562

>どのようなソースでアクティブウインドウを取得するのでしょう??
>取得したものをどのように使えばいいのでしょうか??

・GetForegroundWindow
・SetForegroundWindow

について調べてみてください。


Kimpossible  2006-03-13 05:55:52  No: 130563

ABCさま
お返事遅くなり大変申し訳ありません。
>・GetForegroundWindow
>・SetForegroundWindow
いろいろ試してみました。結局は、>Radioボタンを選択したら、自フォームを最小化すれば元のウインドウがアクティブになってくれるのではないでしょうか?を参考にさせて頂き、思ったように出来ました。
初めての質問の掲載でしたが、御親切且つ勉強になる御回答ありがとうございました。これからもよりしくお願いします。


※返信する前に利用規約をご確認ください。




  


  このエントリーをはてなブックマークに追加