プロが教えるわが家の防犯対策術!

 いつも勉強させていただいています。
 質問させていただきます。よろしくお願いします。

 あるソフトのデータ保存を数分毎に行う必要がでてきたため、初めてVB2008で作成を試みました。SendKeysを知り、なんとか一連の保存作業(ソフトのツールバーのFile→SaveData→(ファイル名入力)→OK)を、自動化するところまでできたのですが、実行中にマウスポインタを動かしてしまうと正常に動作しなくなってしまうため、イベント中の5~10秒程度マウス操作を無効化したいのですが、やり方が見つかりません。
結構長い時間検索して試してみたのですが、
Cursor.Hide()

Private Sub Button1_MouseMove(・・・) Handles Button1.MouseMove
Dim p As Point = New Point(0, 0)
System.Windows.Forms.Cursor.Position = p
End Sub
のような都度ポインタを端に飛ばすような方法では、いくらでもアクティブウィンドウを切り替えられてしまうためうまくいきませんでした。

 上のような「マウスが動いたときに都度発生~」といったような監視方法ではメインのイベントが妨げられるようにも感じますので、何かマウス操作を規制・無効にするよい方法がありましたら教えていただければと思います。
 もしお詳しい方がいらっしゃいましたら、どうぞよろしくお願いします。

A 回答 (4件)

vb6.0のソースですが参考になさってみてください。


Sendkeyでアプリケーションを操作して保存しているのですよね、SendkeyはOSの状態で正常にキャッチされない場合が発生したりあまりよい方法ではないと思います。

別の方法を検討されるのもひとつかと思います。

参考URL:http://hanatyan.sakura.ne.jp/vbhlp/MouseLook.htm
    • good
    • 0
この回答へのお礼

 どうもありがとうございます!!!
御礼が遅くなりました。ご親切にご指摘くださいましてどうもありがとうございます。
 ご提案してくださった通りSend~を使わないことが、本質問の根本解決手段なので
ぜひ実行したく2005、2008のサンプルを探しておりましたが、
(かなりあるだろうと思ったんですが検索がへたなのか?)見つけるにいたっておりません。。
多分、見つけたFindWindow、FindWindowEx、SendMessage(?)あたりを使うのだと思うのですが。
 できれば自分で解決してから御礼報告させていただくべきと考えていたので、
検索で比較的見つかりやすいVB6のサンプルを自力で治そうとトライしていましたが、
まだ理解できるにいたっておりません。
素人で申し訳ございませんが、もし2008のコードでそれっぽい考え方のページでもございましたら
ご紹介いただけないでしょうか。。
 どうぞよろしくお願いいたします。

お礼日時:2009/01/22 19:41

スレッドを分けて処理するとか、バックグラウンドワーカーを使用して処理をして、イベントの影響を受けないようにしてみてはどうですか?



参考URL:http://www.atmarkit.co.jp/fdotnet/mthread/mthrea …
    • good
    • 0
この回答へのお礼

 AKARI0418 様
 どうもありがとうございました!
バックグラウンドワーカーを使って(時間がかかりましたorz)、
あと紹介していただいたVB6のマウス固定コードも2008で動かせる
ようになりました。始めてのVBでしたが、おかげさまで多くの事が
理解できました。自分で検索してコーディングするのは時間が
かかりますねー。ここで御解答して下さるような方たちって
一体どうやって勉強してるんでしょうか???また悩むことが
あったら教えてやってください。どうぞよろしくお願いします!

お礼日時:2009/02/22 11:07

#1さんの方法でよいならば、TopMostを設定しておけばアクティブウィンドウを切り替えられてしまうということはありません。


または
    • good
    • 0
この回答へのお礼

 どうもありがとうございました!
 目的のデータ解析ソフトからいくつかテキストを取れるように
なりました。(まだ取れない部分もありますが...)

 教えていただいたTopMostも設定してみましたが、まだデータ解析
ソフトを触れてしまうので、こちらにもEnabled=Falseする必要が
あるようです。が、いまだに力不足でできませんorz

 教えていただいたことをいろいろ調べているうちに、メモ帳に
文字を送受信したり目的の子ウィンドウからハンドルを取るくらいの
ことはなんとかできるようになりましたので勉強になりました。
もう少し頑張ってみます。どうぞよろしくお願いします。

お礼日時:2009/01/26 20:06

コントロールを全て非アクティブ(enable=false)にするのではダメですか?

    • good
    • 0
この回答へのお礼

どうもありがとうございます!

 検索して
  Me.Enabled = False
で、メインフォームの方はやりたいことができました。アドバイスしてくださってどうもありがとうございます!

 「あるソフト」については多分どうにかしてインスタンス化して(?)、同じように
  ~.Enabled = False
だと考えて調べているのですが、やり方が分からず調べ続けております。検索結果のほとんどが
 AppActivate("ソフト名")  →  SendKeys,SendInput
なので、自分が書こうとしているコードが易しいのか難しいのかすら検討がついておりません。
「外部アプリをインスタンス化」の方向でよろしいのでしょうか。。?

お礼日時:2009/01/21 02:39

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

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A