2016-04-18 9 views
0

私は次のシナリオを持っています:Delphi XE7とAndroidエミュレータ環境(Andy)。私が正しく動作するWindows環境でのテキストを貼り付けるには、次のコマンドを使用します。Android用デルファイをコピー&ペースト

procedure TForm1.Button1Click(Sender: TObject); 
begin 
    keybd_event(VK_CONTROL, MapVirtualKey(VK_CONTROL, 0), 0, 0); 
    keybd_event(Ord('V'), MapVirtualKey(Ord('V'), 0), 0, 0); 
    keybd_event(Ord('V'), MapVirtualKey(Ord('V'), 0), KEYEVENTF_KEYUP, 0); 
    keybd_event(VK_CONTROL, MapVirtualKey(VK_CONTROL, 0), KEYEVENTF_KEYUP, 0) 
end; 

formstyleオプションフォームがfsStayOnTopに設定されています。
Androidエミュレータを実行しているときに、エミュレータのGoogle検索バーにテキストを貼り付ける必要があり、貼り付けコマンドが機能しません。

マウスの右ボタンを2秒間押し続けると貼り付けオプション(Android環境)が表示され、クリックすると貼り付けることができますが、自動化する必要があることに気付きました。なにか提案を ?

+0

マウスの右ボタンを2秒間押し続け、貼り付けボタンをクリックします。あなたが入力偽造によってこれを行うつもりなら、それはあなたがしなければならないことです。 –

答えて

0

キーボード入力は、フォアグラウンドウィンドウで処理されます。キー入力は、キーボード入力自体にユーザ入力を入力するのと同じ低レベルの入力キューに入力しています(BTWの場合は、keybd_event()の代わりにSendInput()を使用する必要があります)。シミュレートされたキーストロークは、ユーザーが入力したキーストロークと同じ処理とルーティングを行います。レイモンドチェンは、彼のウェブサイト上でこの上の素敵な記述があります。

When something gets added to a queue, it takes time for it to come out the front of the queue

あなたがボタンをクリックすると、あなたのアプリケーションのウィンドウがフォアグラウンドです。したがって、Ctrl-Vシーケンスがアプリケーションで受信され、Andyエミュレータでは受信されません。 TWinControlの派生ボタン(TButtonなど)を使用すると、クリックしたときに入力フォーカスがかかります(これを避けるには、TSpeedButtonなどの代わりにTGraphicControlの派生ボタンを使用します)。編集コントロールにはフォーカスがないため、Ctrl-Vは、キーストロークの処理時に何も貼り付けないので何もしないように見えます。

あなたは、あなたのキーストロークを送信前に戻ってフォアグラウンドにアンディのウィンドウを持参し、それに入力フォーカスを与えることSetForegroundWindow()(そしておそらくもSetFocus())を使用する必要があります。

それでも、キーストロークを発行してから入力キューから出てくる時間の間に、他のアプリがフォーカスを奪うことができないという保証はありません。

+0

AndroidではCtrl + Vは無意味です。 Askerは、アンドロイドアプリで貼り付けを行うことを望んでいます。 –

+0

@DavidHeffernan:確かに、Android自体はCtrl-Vを認識しませんが、Windows上で動作するAndroidエミュレータについての質問です。つまり、エミュレータ自体はCtrl-Vを処理せず、WindowsのクリップボードからAndroidのクリップボードに貼り付けて、現在のAndroid UIコントロールに貼り付けますか?私はAndyを一度使用しようとしましたが、問題は何もありませんでした(正しく起動することはありません)ので、プラットフォーム境界でエミュレータレベルでどのような相互作用機能が実際に動作するのか分かりません。 –

+0

質問者が私たちのためにその点を明らかにする可能性があります –

関連する問題