Fokus w zewnętrznej aplikacji

0

Chcę przy pomocy mojego programu z BUTTONEM symulującym przyciśnięcie klawisza "TAB"
wpisywać kilka stringów każdy do innego okienka tekstowego zewnętrznej aplikacji.

Niestety po naciśnięciu BUTTONA aplikacja zewnętrzna traci focus i wszystko na nic.

Jak zrobić aby moja aplikacja nie przechwytywała ogniska?? Chcę aby wstawiała tekst do okienka które ma aktualnie fokus, a potem do następnego według kolejności jakie mają pola tekstowe w tej zewnętrznej aplikacji.

1

Co to za zewnętrzna aplikacja, jeżeli to tradycyjna aplikacja oparta na kontrolkach Windows (a nie np. chodzi o wpisanie tekstu do przeglądarki) to lepiej do wpisania tekstu użyć funkcji do tego służących czyli FindWindow, FindWindowEx, SetWindowText natomiast w drugim przypadku to możesz przywrócić tamtą aplikację czyli znaleźć okno więc FindWindow a dalej co tam potrzebujesz SetForegroundWindow, SetActiveWindow, SetFocus.
Zresztą jeżeli chciałbyś np. automatycznie wypełniać formularz w przeglądarce to warto się zastanowić czy nie wygodniej użyć TWebBrowser (lub innego komponentu przeglądarki np. Delphi Chromium Embedded 3) i czy w ogóle do tego jest potrzebna przeglądarka a nie da się wysłać tych danych za pomocą zwykłego HTTP metodą POST .

0

Dzięki za odpowiedź.
Chodzi mi o tę pierwszą ewentualność, czyli zwykłą okienkową aplikację windowsową.

0

Dzięki ABRAKADABER o to by mi chodziło :) :)..... tylko jak to będzie w języku delphi????

void __fastcall TForm1::CreateParams(TCreateParams &Params)
{
    TForm::CreateParams(Params);
    Params.ExStyle|=WS_EX_NOACTIVATE;
}

SetWindowPos(Handle, HWND_TOPMOST, 0, 0, 100, 100, SWP_NOACTIVATE);

dodanie znacznika <code class="cpp"> - @furious programming

2

Chyba chodzi o coś takiego...

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    procedure FormCreate(Sender : TObject);
  protected
    procedure CreateParams(var Params : TCreateParams); override;
  private
  public
  end;

var
  Form1 : TForm1;

implementation

{$R *.dfm}

procedure TForm1.CreateParams(var Params : TCreateParams);
begin
  inherited CreateParams(Params);
  Params.ExStyle := Params.ExStyle or WS_EX_NOACTIVATE;
end;

procedure TForm1.FormCreate(Sender : TObject);
begin
  SetWindowPos(Handle, HWND_TOPMOST, 0, 0, 100, 100, SWP_NOACTIVATE);
end;

end.
0

Majstersztyk :) Dokładnie o to mi chodziło...........:).

Kod bezbłędny.
Plik exe zachowuje się podobnie do klawiatury ekranowej w W7.

Wielkie Dzięki

1 użytkowników online, w tym zalogowanych: 0, gości: 1