自プログラム画面をアクティブにする方法

投稿者:田中充 投稿日:2018/09/02(Sun) 03:20:05 No.2214

田中です。お世話になっております。

データ収集したものをグラフィカル表示して、その画面をスクリーンコピーして、png保存して
WEBに表示しようとしています。

そのためにプログラム実行中は、常にメイン画面をアクティブにしておきたいのですが、
他の画面をさわってしまうと、メイン画面をアクティブにできません。
#触らなければ、問題無いのですが、デバック時は、他ウィンドウをアクティブにしてしまう。

画面コピー前にメイン画面をアクティブにするには、どの命令を使えば良いのかご教示いただけないでしょうか?

下記サンプルでは、メイン画面を表示した後、メモ帳を立ち上げています。
最初は、「メイン画面の内容へ切り替える」命令により、
メモ帳からメイン画面にアクティブにする事が出来ています。
その後、メモ帳をクリックすると、メイン画面がアクティブになりません。



メイン画面を表示する
待機する

メイン画面とは
  ウィンドウを継承する
  はじめの手順
    初期化する
    ’貼り付けた部品に対する操作をここに書きます
        
  終わり
  開いた時の手順
    メモ帳は、(「notepad.exe」を起動したもの)
    タイマー1というタイマーを作る
    ’100MSタイマー
    タイマー1の時間になった時の手順は、時間になった
    タイマー1の"間隔"を1000に変える
    タイマー1を開始する
  終わり
  
  時間になった手順    
    2秒待つ
    10回、値にカウントしながら繰り返す
      休憩する
      ラベル1の内容は、値
      ’■■■ここで、メイン画面をアクティブにしたい■■■  
      メイン画面の内容へ切り替える
      
      スクリーンショットとして現在ウィンドウを取り込む
      それから{7,7+43,メイン画面の大きさの幅-14,メイン画面の大きさの高さ-14-43}を切り取って切取画像とする
      切取画像を「test.png」へ保存する
    繰り返し終わり  
  終わり
  初期化する手順
  ’自動生成された手順です。ここにプログラムを書き加えても消える場合があります
  この内部領域大きさを{549,298}に変える
  この内容を「メイン画面」に変える
  ラベル1というラベルを作る
    その位置と大きさを{42,33,39,12}に変える
    その内容を「ラベル1」に変える
終わり
終わり

以上、よろしくお願いいたします。

Re: 自プログラム画面をアクティブにする方法

投稿者:アーク <info_nds-labo あっとまーくexcite.co.jp> 投稿日:2018/09/02(Sun) 07:54:50 No.2215

田中充さん、おはようございます。アークです。

肝心な時にフォーカスを得ていたい事は有りますが、
期待通りにいかない場合も有ります。
これはプロデルに限った事では無いようです。
私は以前、VBScriptで遭遇しました。
この様な場合には直前に敢えて他の画面に切り替える事で上手く行くようです。
外していたら済みません。

Re^2: 自プログラム画面をアクティブにする方法

投稿者:通りすがり 投稿日:2018/09/02(Sun) 14:21:09 No.2216

ユーザの操作により得たアクティブ(入力を受け取れる)は、奪うことができません(2000かXPぐらいから)

これは、ユーザが意図しないアプリケーションに入力してしまうことを防ぐためのものです。
また、常にアクティブになることでユーザの操作を完全に妨害したり、パスワードの入力の際にだけアクティブになることで、パスワードを奪う といったことを防ぐ、セキュリティ的な面もあります。

なお、操作を自動化するうえでは、必ずしも対象のアプリケーションをアクティブにする必要はありませんので、アクティブにしないまま、メッセージ等で制御は可能ですが、この場合でも、ユーザの操作でいずれかのウィンドウをアクティブにしたら、そこからアクティブを奪うことはできません。(奪えないのは、対象のアプリケーションに限りません)

基本的な仕様であるため、その前提の上で、作成する必要があります。
(1例としては、透明なウィンドウをかぶせちゃうとか、メッセージフックで対象ウィンドウのアクティブ化を邪魔するとか)

解決しました:回答ありがとうございます。

投稿者:田中充 投稿日:2018/09/03(Mon) 01:31:35 No.2218

アークさん、通りすがりさん、回答ありがとうございます。

OSの仕様だったのですね。
これでは、どうしようもありません。

他の画面がアクティブにならない工夫をするようにします。

以上です。

▲ページの先頭へ

- WebForum -