AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Tasten an Handle senden

Ein Thema von theomega · begonnen am 1. Jan 2005 · letzter Beitrag vom 14. Jan 2005
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von theomega
theomega

Registriert seit: 18. Jun 2002
684 Beiträge
 
#1

Tasten an Handle senden

  Alt 1. Jan 2005, 16:49
Hallo Leute,
ich verwende diese Funktion, um einen Tastendruck an ein Window zu senden:
Delphi-Quellcode:
procedure sendvk(vk:integer);
var wnd: HWND;
begin
  wnd := FindWindow('{DA7CD0DE-1602-45e6-89A1-C2CA151E008E}', nil);
  if wnd <> 0 then
  begin
    PostMessage(wnd, WM_KEYDOWN, vk, 0);
  end;
end;
aufgerufen wird das dann mit z.b.
sendvk(ord('V')); Funktioniert auch problemlos, das problem ist: Ich will nichtnur einfache Tastendrücke (wie in dem Fall 'V' simulieren, sondern auch ALT+V. Wie geht das?

Danke
TO
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.117 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Tasten an Handle senden

  Alt 1. Jan 2005, 16:55
Moin The Omega,

dann musst Du, um bei Deinem Beispiel zu bleiben, erst einmal das Drücken von ALT, dann das Drücken von V, dann das Loslassen von V, und anschliessend das Loslassen von ALT senden.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von theomega
theomega

Registriert seit: 18. Jun 2002
684 Beiträge
 
#3

Re: Tasten an Handle senden

  Alt 1. Jan 2005, 17:01
das hatte ich auch schon probiert, alledings auch nicht hinbekommen:
Delphi-Quellcode:
    PostMessage(wnd, WM_KEYDOWN, VK_SHIFT, 0);
    PostMessage(wnd, WM_KEYDOWN, ord('V'), 0);
zu einen WM_KEYUP komm ich garnicht, die Anwendung reagiert sofort und zwar mit einen V und nicht einen SHIFT+V.
Hatte mich oben vertippt, ich will kein ALT+V sondern ein Shift+V. Das ganze dient zum fernsteuern eines Mediaplayers!

Danke schonmal
TO
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#4

Re: Tasten an Handle senden

  Alt 1. Jan 2005, 17:05
wie löst du das ganze aus? über einen Buttonclick? wenn ja versuchs mal per timer ansonsten ist ja die maustaste zu dem zeitpunkt gedrückt was das ganze beeiflussen kann
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.117 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: Tasten an Handle senden

  Alt 1. Jan 2005, 17:06
Moin The Omega,

Zitat von theomega:
zu einen WM_KEYUP komm ich garnicht,
wieso?
Wenn Du die Message mit PostMessage verschickst läuft Dein Programm doch weiter.
Das das andere Programm halt schon beim Drücken, von SHIFT-V reagiert, und nicht erst beim Lösen kann damit eigentlich nichts zu tun haben, und dürfte sich auch nicht beeinflussen lassen.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von theomega
theomega

Registriert seit: 18. Jun 2002
684 Beiträge
 
#6

Re: Tasten an Handle senden

  Alt 1. Jan 2005, 17:09
also, ich löse das ganze per button aus, und das empfangende programm scheint nicht zu merken, dass shift auchnoch gedrückt ist und statt zum vorherigen song (SHIFT+V) zu springen, springt es zum nächsten (V). Un ob ich jetzt noch ein KEYUP mache oder nicht ändert garnichts an der Situation!
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.117 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: Tasten an Handle senden

  Alt 1. Jan 2005, 17:13
Moin The Omega,

merkwürdig.
Dafür fällt mir jetzt so keine Lösung ein.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von theomega
theomega

Registriert seit: 18. Jun 2002
684 Beiträge
 
#8

Re: Tasten an Handle senden

  Alt 1. Jan 2005, 17:16
mir erschien die sache auch nicht logisch so, weil: damit werden doch nacheinander die tastendrück simuliert. Und vermutlich sag sich das programm als erstes: "Aha, ein shift, aber damit fang ich wenig an" und dann kommt das V rein und das Programm macht das, was das V normalerweise tut! Ich denke das wird nicht gleichzeitig gemacht!
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#9

Re: Tasten an Handle senden

  Alt 1. Jan 2005, 17:24
es liegt mit gaaaaaaaaanz hoher wahrscheinlichkeit an dem buttonclick. Du sendest mit PostMessage die Shifttaste, als nächstes wird der focus wieder an dein Programm gegeben (weil maus down) und somit ist die aktion abgeschlossen. Du könntest versuchen die Tasten verzögert per timer zu senden (wenn die maustaste auf deinem button nicht mehr down ist) oder das ganze mal mit SendMessage versuchen
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von theomega
theomega

Registriert seit: 18. Jun 2002
684 Beiträge
 
#10

Re: Tasten an Handle senden

  Alt 1. Jan 2005, 18:23
gut, also ich hab ein bischen rumprobiert: postmessage oder sendmessage macht keine unterschied. Ob Button oder Timer macht auch keinen!
ich habe dann noch diesen Code hier konstruiert, der hilft aber auch nicht!
Delphi-Quellcode:
procedure prev();
var wnd: HWND;
KeyBrdSt : TKeyboardState;
begin;
  wnd := FindWindow('{DA7CD0DE-1602-45e6-89A1-C2CA151E008E}', nil);
  if wnd <> 0 then
  begin
    GetKeyboardState( KeyBrdSt );
    KeyBrdSt[ VK_SHIFT ] := $80;
    SetKeyboardState( KeyBrdSt );
    SendMessage(wnd, WM_KEYDOWN, ord('V'), 0);
    KeyBrdSt[ VK_SHIFT ] := $00;
    SetKeyboardState( KeyBrdSt );
  end;
end;
hat sonst noch jemand nen guten tip?

Danke
TO
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 07:57 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