2010-12-28 4 views
1

私は非常に簡単な方法でアプリケーションを制御するPerlスクリプトを開発しようとしています(いくつかのボックスを埋める、いくつかのキーを押します)。 私はWin32 :: GuiTestを使ってすべてを実装しました。 目標は、トレイで最小化されたアプリで動作させることです。同時にPCを使用することができます。アプリケーションと連携して動作するPerl GUIスクリプト。どのようにそれをそのままにしますか?フォーカスに関連する問題

私はWMSetText、SelComboItem、SendMessage、PushChildButtonのような関数を使用しています。

PushChildButtonを除いて、すべて正常に動作します。この関数が呼び出されるたびに、私がやっていることからフォーカスが失われています(制御されたアプリケーションが最小限に抑えられていても)。

PushChildButtonを呼び出す前に使用しているアプリケーション:http:// i。 imgur.com/7B5kj.png

PushChildButtonを呼び出して使用しているアプリケーション:http:// i。

imgur.com/VCskW.png私はこのようなフォーカスを殺害しようとしましたが、それはうまくいきませんでした:

my $msg_id=0x08; 
SendMessage(@_[ 0 ], $msg_id, @_[ 1 ], undef); 

@_[ 0 ] - handle to the application 

@_[ 1 ] -handle to the "Edit Control" that I think* that takes the focus after pressing the button 

は*私はこのビットを詳しく説明しましょう。アプリケーションはまだ最小化されたままですが、「コントロールの編集」リソースにフォーカスを失ったときに押したキーと連結された文字列が含まれることがあります。

PS:私はPerlとWinAPIの初心者です(実際これは私の最初のプロジェクトです)。だから は少し不明なことを説明しているかもしれません。あなたは私が を精巧にすべきだと感じるものすべてを私に尋ねてください。

+0

私はアプリケーションのソースコードを確認しましたが、GetFocus()とSetFocus()が使用されているようです。私は同様に、フォーカスを元に戻すためにスクリプト内の関数にそれらの関数を実装しようとすることもできますが、疑問があります。キーボードのリークがないように、このフォーカススイッチは十分に速いでしょうか? LE:はい、私はアプリケーションソースコード(オープンソースのアプリケーションです)を持っていますが、新しいバージョンはしばらくの間に起動されるため、変更して再コンパイルしたくありません。 – Nick

答えて

0
  1. これはおそらくWindowsの問題であり、perlではありません。 人々は通常のウィンドウを外側に移動してこれを行います。 左に、x = -600。

  2. 代わりにWin32 :: GUIを使用してください。これにより、より多くの頭痛を軽減できます。

+0

IMHO、Win32 :: GUIは、Perlアプリケーション用のGUIを作成するために使用されます。私がやっているのは、私が書いたスクリプトで商用アプリケーションを制御することです。私がPushChildButtonを使用するとき、市販のアプリは最小限にとどまりますが、その時点で私がやっていることからフォーカスがかかります。ほとんどの場合、それを行うようにプログラムされているので、この副作用をキャンセルする方法を見つける必要があります。 – Nick

+0

私は参照してください。したがって、クライアントイベントを回避する必要があります。 PushChildButtonの呼び出しの直後に、またはタイムアウト後に手動でフォーカスを設定する必要があります。 – rurban

+0

どうやったらいいですか?私は上記のようにWM_KILLFOCUS(0x08)を使ってこのようにしてみましたが、うまくいきませんでした。 – Nick

関連する問題