AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Wie sende ich tastaturanschläge?
Thema durchsuchen
Ansicht
Themen-Optionen

Wie sende ich tastaturanschläge?

Ein Thema von Rockett · begonnen am 4. Sep 2003 · letzter Beitrag vom 6. Sep 2003
Antwort Antwort
Rumpi

Registriert seit: 26. Aug 2003
Ort: Berlin
72 Beiträge
 
#1

Re: Wie sende ich tastaturanschläge?

  Alt 6. Sep 2003, 08:23
Hi,

versuchs mal damit

Delphi-Quellcode:
const
  KEYEVENTF_KEYDOWNUP = $FF;

function ForceForegroundWindow(hwnd: THandle): Boolean;
const
  SPI_GETFOREGROUNDLOCKTIMEOUT = $2000;
  SPI_SETFOREGROUNDLOCKTIMEOUT = $2001;
var
  ForegroundThreadID: DWORD;
  ThisThreadID: DWORD;
  timeout: DWORD;
begin
  if IsIconic(hwnd) then ShowWindow(hwnd, SW_RESTORE);

  if GetForegroundWindow = hwnd then Result := True
  else
  begin
    // Windows 98/2000 doesn't want to foreground a window when some other
    // window has keyboard focus

    if ((Win32Platform = VER_PLATFORM_WIN32_NT) and (Win32MajorVersion > 4)) or
      ((Win32Platform = VER_PLATFORM_WIN32_WINDOWS) and
      ((Win32MajorVersion > 4) or ((Win32MajorVersion = 4) and
      (Win32MinorVersion > 0)))) then
    begin
      // Code from Karl E. Peterson, [url]www.mvps.org/vb/sample.htm[/url]
      // Converted to Delphi by Ray Lischner
      // Published in The Delphi Magazine 55, page 16

      Result := False;
      ForegroundThreadID := GetWindowThreadProcessID(GetForegroundWindow, nil);
      ThisThreadID := GetWindowThreadPRocessId(hwnd, nil);
      if AttachThreadInput(ThisThreadID, ForegroundThreadID, True) then
      begin
        BringWindowToTop(hwnd); // IE 5.5 related hack
        SetForegroundWindow(hwnd);
        AttachThreadInput(ThisThreadID, ForegroundThreadID, False);
        Result := (GetForegroundWindow = hwnd);
      end;
      if not Result then
      begin
        // Code by Daniel P. Stasinski
        SystemParametersInfo(SPI_GETFOREGROUNDLOCKTIMEOUT, 0, @timeout, 0);
        SystemParametersInfo(SPI_SETFOREGROUNDLOCKTIMEOUT, 0, TObject(0),
          SPIF_SENDCHANGE);
        BringWindowToTop(hwnd); // IE 5.5 related hack
        SetForegroundWindow(hWnd);
        SystemParametersInfo(SPI_SETFOREGROUNDLOCKTIMEOUT, 0, TObject(timeout), SPIF_SENDCHANGE);
      end;
    end
    else
    begin
      BringWindowToTop(hwnd); // IE 5.5 related hack
      SetForegroundWindow(hwnd);
    end;

    Result := (GetForegroundWindow = hwnd);
  end;
end;


procedure SimulateKeystroke( bVK, bScan : byte; wFlags, wExtraInfo : DWORD);
const
  KEYEVENTF_KEYDOWN = 0; //KEYEVENTF_KEYUP = 2; // windows.pas
var
  ExtraInfo : Word;
begin
  //bScan := Lo(MapVirtualKey(bVK,0));
  if wExtraInfo = KEYEVENTF_KEYDOWNUP then
  begin
    ExtraInfo := 0;
    keybd_event(bVK, bScan, KEYEVENTF_KEYDOWN, ExtraInfo);
    keybd_event(bVK, bScan, KEYEVENTF_KEYUP , ExtraInfo);
  end
  else
    keybd_event(bVK, bScan, wFlags, wExtraInfo);
end;

procedure SendKeyTo( ClassName: String; bVK: Byte);
var
  hWnd, hSavedWnd : hWnd;
begin
  hWnd:= FindWindowEx( 0,0,PChar( ClassName ), nil );
  if Not (hWnd <> 0) then
    exit;

  hSavedWnd := GetForeGroundWindow;
  //SetForegroundWindow( hWnd );
  ForceForegroundWindow( hWnd );
  Application.ProcessMessages;
  try
    SimulateKeystroke( bVK, 0, 0, KEYEVENTF_KEYDOWNUP );
  finally
    Application.ProcessMessages;
    //SetForegroundWindow( hSavedWnd );
    ForceForegroundWindow( hSavedWnd );
  end;
end;

... SendKeyTo( '????', VK_Right );
Suche im Forum nach
SetForegroundWindow oder ForceForegroundWindow

Ich habe noch schnell den code von
ForceForegroundWindow dazu kopiert

mfg Rumpi und Pascal
  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 18:58 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz