AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Fokussiertes Fenster einer Windows 10 App ermitteln
Thema durchsuchen
Ansicht
Themen-Optionen

Fokussiertes Fenster einer Windows 10 App ermitteln

Ein Thema von amigage · begonnen am 11. Aug 2015 · letzter Beitrag vom 12. Aug 2015
Antwort Antwort
amigage

Registriert seit: 11. Nov 2005
Ort: Leipzig
272 Beiträge
 
Delphi 11 Alexandria
 
#1

Fokussiertes Fenster einer Windows 10 App ermitteln

  Alt 11. Aug 2015, 11:36
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

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

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

Beste Grüße
amigage
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.156 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: Fokussiertes Fenster einer Windows 10 App ermitteln

  Alt 11. Aug 2015, 11:45
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.
  Mit Zitat antworten Zitat
amigage

Registriert seit: 11. Nov 2005
Ort: Leipzig
272 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Fokussiertes Fenster einer Windows 10 App ermitteln

  Alt 11. Aug 2015, 12:07
Hm, WinSpy gibt folgendes aus.
Es ist definitiv ein andere Struktur, mit der ich aber leider überhaupt nichts anfangen kann...
Miniaturansicht angehängter Grafiken
winspy.png  
  Mit Zitat antworten Zitat
HolgerX

Registriert seit: 10. Apr 2006
Ort: Leverkusen
969 Beiträge
 
Delphi 6 Professional
 
#4

AW: Fokussiertes Fenster einer Windows 10 App ermitteln

  Alt 11. Aug 2015, 19:03
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.
  Mit Zitat antworten Zitat
amigage

Registriert seit: 11. Nov 2005
Ort: Leipzig
272 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Fokussiertes Fenster einer Windows 10 App ermitteln

  Alt 12. Aug 2015, 10:34
Hallo,

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

Amigage
  Mit Zitat antworten Zitat
amigage

Registriert seit: 11. Nov 2005
Ort: Leipzig
272 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Fokussiertes Fenster einer Windows 10 App ermitteln

  Alt 12. Aug 2015, 15:24


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
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:30 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