Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Simulation Strg+C geht nicht mehr unter Vista (https://www.delphipraxis.net/116047-simulation-strg-c-geht-nicht-mehr-unter-vista.html)

toms 22. Jun 2008 19:03

Re: Simulation Strg+C geht nicht mehr unter Vista
 
Zitat:

Zitat von Logic
Ihr sagt immer schaut doch in der Hilfe, aber genau in den Hälfte der Threads genau das gleiche drin... aber gut gesucht hatte ich ja schon, das Ergebnis liefert 45 Treffern... soderle dann bin ich von oben nach unten druchgegangen.


Wenn man nach Bei Google suchenSendInput Delphi sucht, findet man eine Procedur SendAltTab.

Diese Procedur zeigt, wie man SendInput() verwenden kann.

Ich habe die Procedur ein wenig angepasst und daraus eine SendCtrlC Procedur gemacht.

Delphi-Quellcode:
procedure SendCtrlC();
var
  KeyInputs: array of TInput;
{$J+}const
  KeyInputCount: Integer = 0;{$J-}

procedure KeybdInput(VKey: Byte; Flags: DWORD);
  begin
    Inc(KeyInputCount);
    SetLength(KeyInputs, KeyInputCount);
    KeyInputs[KeyInputCount - 1].Itype := INPUT_KEYBOARD;
    with KeyInputs[KeyInputCount - 1].ki do
    begin
      wVk := VKey;
      wScan := MapVirtualKey(wVk, 0);
      dwFlags := KEYEVENTF_EXTENDEDKEY;
      dwFlags := Flags or dwFlags;
      time := 0;
      dwExtraInfo := 0;
    end;
  end;
begin
  KeybdInput(VK_CONTROL, 0);
  KeybdInput(Ord('C'), 0);
  KeybdInput(Ord('C'), KEYEVENTF_KEYUP);
  KeybdInput(VK_CONTROL, KEYEVENTF_KEYUP);
  SendInput(KeyInputCount, KeyInputs[0], SizeOf(KeyInputs[0]));
end;

Logic 16. Jul 2008 00:38

Re: Simulation Strg+C geht nicht mehr unter Vista
 
Hallo toms,

vielen Dank für deine Antwort und erstmal sorry, dass es so lang gedauert hat, bis ich antworten konnte.

Also der Code funktioniert perfekt danke. Habe aber durch einen Zufall herausgefunden, dass der alte Code dennoch funktioniert, es für mich aber den Anschein hatte, dass er es nicht täte.
Wenn das Programm gestartet wird wird der Focus von dem makierten Text dann weggenommen. Und das STRG+C sozusagen ins Leere geht.

(Zur Info, wenn das Programm gestartet wird, soll es eine Nummer die zuvor in einem anderen Programm makiert wurde, per STRG+C in die Zwischenablage holen).

Gibt es eine Möglichkeit vll. das zu verhindern?

toms 16. Jul 2008 06:02

Re: Simulation Strg+C geht nicht mehr unter Vista
 
Zitat:

Zitat von Logic
Gibt es eine Möglichkeit vll. das zu verhindern?

Hallo, beim Start deines Programms den Fokus ermitteln und vor dem Ctrl+C den Fokus zurück setzen.

stoxx 5. Feb 2009 03:56

Re: Simulation Strg+C geht nicht mehr unter Vista
 
Handle ermitteln, und weiter mit Postmessage arbeiten...
Da braucht das Fenster keinen Focus und muss auch nicht im Vordergrund sein...


so dann ...

Delphi-Quellcode:
procedure sim_CtrlC;
begin
    keybd_event(VK_CONTROL, MapVirtualKey(VK_CONTROL, 0), 0, 0);


    PostMessage(TargetHandle, WM_KEYDOWN, ord('C'), MapVirtualKey(ord('C'),0));
    PostMessage(TargetHandle, WM_KEYUP, ord('C'), MapVirtualKey(ord('C'),0));


    keybd_event(VK_CONTROL, MapVirtualKey(VK_CONTROL, 0), KEYEVENTF_KEYUP, 0)
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:10 Uhr.
Seite 2 von 2     12   

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