Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Fokussiertes Fenster einer Windows 10 App ermitteln (https://www.delphipraxis.net/186183-fokussiertes-fenster-einer-windows-10-app-ermitteln.html)

amigage 11. Aug 2015 10:36

Fokussiertes Fenster einer Windows 10 App ermitteln
 
Hallo,

ich möchte Daten an ein Eingabefeld senden.
In "normalen" Windows-Programmen kann ich dies über folgenden Code durchführen.

Delphi-Quellcode:
  function GetFocussedWindow(ParentWnd:HWnd):HWnd;
    var OtherThreadID,Buffer:DWord;
  begin
    OtherThreadID := GetWindowThreadProcessID(ParentWnd, @Buffer);
    if AttachThreadInput(GetCurrentThreadID, OtherThreadID, true) then
    begin
      Result := GetFocus;
      AttachThreadInput(GetCurrentThreadID, OtherThreadID, false);
    end
    else
    begin
      Result:=0;
    end;
  end;


var
  ActWindow, TargetWindow: HWND;
  KeyData : packed record
    RepeatCount : word;
    ScanCode : byte;
    Bits : byte;
  end;
  Character : byte;

begin
  ActWindow := GetForegroundWindow;
  if ActWindow <> 0 then
    TargetWindow:= GetFocussedWindow(ActWindow);
    if TargetWindow <> 0 then
    //...
      PostMessage(TargetWindow, wm_char, Character, LongInt(KeyData));
    //...
    begin
  end;
end;
Das funktioniert seit Jahren unter Windows, auch bei Programmen unter Windows 10.
Aber leider nicht mehr in den Windows 10 Apps, wie z.B. Edge

Delphi-Quellcode:
ActiveWindow
lässt sich ermitteln, aber nicht das für
Delphi-Quellcode:
Postmessage
notwendig Handle.

Weiß zufälligerweise jemand Bescheid, wie man das Handle in einer Windows 10 App ermittelt?

Beste Grüße
amigage

Der schöne Günther 11. Aug 2015 10:45

AW: Fokussiertes Fenster einer Windows 10 App ermitteln
 
Kenne mich damit (noch) nicht aus, aber das klassische Konzept von HWNDs, Kindfenstern und allem greift doch da nicht mehr, oder?

Nur kurz überflogen:
https://social.msdn.microsoft.com/Fo...appswithcsharp

und

http://stackoverflow.com/questions/9629282/


Vergleiche doch mal die Fensterstruktur von z.B. Edge mit dem normalen Explorer oder Notepad mit z.B. WinSpy.

amigage 11. Aug 2015 11:07

AW: Fokussiertes Fenster einer Windows 10 App ermitteln
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hm, WinSpy gibt folgendes aus.
Es ist definitiv ein andere Struktur, mit der ich aber leider überhaupt nichts anfangen kann...

HolgerX 11. Aug 2015 18:03

AW: Fokussiertes Fenster einer Windows 10 App ermitteln
 
Hallo..

hmm..
Meine Erfahrung : PostMessage mit WMChar funktioniert nicht mit allen Fenstern/Programmen/Controlls.

Wenn Du nur an das derzeit aktive Fenster/Control eine Tastatur-Eingabe erzeugen willst, dann nehme besser die Windows-Api 'SendInput'.

Diese funktioniert sogar mit ActiveX-Controlls zuverlässig, da diese eine RAW- Eingabe simuliert, wie wenn der Char von einer Tastatur kommt.

Bei ActiveX-Contrls wird (wenn ich mich richtig erinnere) eine Tastatureingabe von Fenster selber verarbeitet und an sein Child geschickt. Oder die Tastatureingaben werden direkt als RAW-Input verarbeitet, dann werden alle Windows-Messages komplett ignoriert.

Und ich vermute, das es bei Edge ähnlich ist.

amigage 12. Aug 2015 09:34

AW: Fokussiertes Fenster einer Windows 10 App ermitteln
 
Hallo,

danke für den Hinweis. Ich werde es mal mit "SendInput" probieren und berichten.

Amigage

amigage 12. Aug 2015 14:24

AW: Fokussiertes Fenster einer Windows 10 App ermitteln
 
:-D

Es war der richtige Tipp. Mit SendInput funktioniert es auch in Metro Apps.

Und mit dem Wrapper SendInputHelper war es auch ein Kinderspiel, es umzusetzen.
http://www.delphipraxis.net/154931-s...reinfacht.html

Besten Dank für die richtige Spur.

Amigage


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:14 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz