AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Befehle an eine andere Anwendung versenden
Thema durchsuchen
Ansicht
Themen-Optionen

Befehle an eine andere Anwendung versenden

Ein Thema von delphi_newbie_123 · begonnen am 4. Dez 2004 · letzter Beitrag vom 4. Dez 2004
Antwort Antwort
Seite 1 von 2  1 2      
delphi_newbie_123

Registriert seit: 14. Jan 2004
181 Beiträge
 
Delphi 5 Enterprise
 
#1

Befehle an eine andere Anwendung versenden

  Alt 4. Dez 2004, 01:06
Hi,
hab jetzt mehrere stunden lang das inet und dieses forum durchsucht.
ich finde aber keine lösung
Delphi-Quellcode:
SendMessage(Edit1.Handle, WM_KEYDOWN, vkkeyscan('a'), 0);
SendMessage(Edit1.Handle, WM_KEYUP, vkkeyscan('a'), 0);
hier wird doch ein tastendruck an das edit geschickt nicht wahr?

nun lese ich alle aktiven anwendungen in die Combobox und will jetzt gerne an die ausgefählte anwendung diesen einen tastendruck abschicken

ich dachte mir, ich hole das handle durch den befehl findwindow, speichere es in eine variable und
rufe sendmessage auf, wobei ich nun als handle die neue variable nutze.

Delphi-Quellcode:
anwendung:=Name der Anwendung, die durch die combobox ausgesucht wird
var:=findwindow(anwendung,nil);
SendMessage(var, WM_KEYDOWN, vkkeyscan('a'), 0);
SendMessage(var, WM_KEYUP, vkkeyscan('a'), 0);
das klappt jedoch nicht und mir wird nicht klar warum, vielleicht ists einfach zu spät
wäre über hilfe sehr dankbar wie immer.

edit:
oh nö falsche kathegorie auch noch .
könnt das jemand vielelciht in programmieren allgemein verschieben? danke!
  Mit Zitat antworten Zitat
supermuckl

Registriert seit: 1. Feb 2003
1.340 Beiträge
 
FreePascal / Lazarus
 
#2

Re: Befehle an eine andere Anwendung versenden

  Alt 4. Dez 2004, 01:15
var ist ein reserviertes wort

nutze einen anderen namen für die variable
Das echte Leben ist was für Leute...
... die im Internet keine Freunde finden!
  Mit Zitat antworten Zitat
delphi_newbie_123

Registriert seit: 14. Jan 2004
181 Beiträge
 
Delphi 5 Enterprise
 
#3

Re: Befehle an eine andere Anwendung versenden

  Alt 4. Dez 2004, 01:17
hi, danke, war schelcht von mir in dem beispiel.
var soll nur eine variable symboliesieren
hier nochmal der code:
Delphi-Quellcode:
procedure TForm1.Timer16Timer(Sender: TObject);
var
handle:integer;
begin
 handle:=findwindow(nil, pchar(anwendung));
 SendMessage(handle, WM_KEYDOWN, vkkeyscan('a'), 0);
 SendMessage(handle, WM_KEYUP, vkkeyscan('a'), 0);
end;
anwendung ist ein string, der den namen der betroffenen anwendung trägt
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

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

Re: Befehle an eine andere Anwendung versenden

  Alt 4. Dez 2004, 01:27
Moin Delphi Newbie,

wenn Du eine spezielle Taste drücken willst, würde ich es lieber so schreiben:

SendMessage(handle, WM_KEYDOWN, vkkeyscan('a') and $00FF, 0); bzw.

SendMessage(handle, WM_KEYDOWN, ord('A'), 0); Natürlich jeweils auch noch einmal mit WM_KEYUP.
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
delphi_newbie_123

Registriert seit: 14. Jan 2004
181 Beiträge
 
Delphi 5 Enterprise
 
#5

Re: Befehle an eine andere Anwendung versenden

  Alt 4. Dez 2004, 01:34
hi,
danke erstmal habs mit ord auch schon probiert doch beides funktioniert nciht.
gibts da vielelciht einen anderen befehl mit dem ich einen tastendruck an eine application schicken kann?
  Mit Zitat antworten Zitat
Benutzerbild von Sprint
Sprint

Registriert seit: 18. Aug 2004
Ort: Edewecht
712 Beiträge
 
Delphi 5 Professional
 
#6

Re: Befehle an eine andere Anwendung versenden

  Alt 4. Dez 2004, 01:41
@delphi_newbie_123: Wenn alle deine Bemühungen fehlschlagen, könnte es dann nicht sein, das du einfach nur das falsche Handle erwischt hast?
Ciao, Sprint.

"I don't know what I am doing, but I am sure I am having fun!"
  Mit Zitat antworten Zitat
delphi_newbie_123

Registriert seit: 14. Jan 2004
181 Beiträge
 
Delphi 5 Enterprise
 
#7

Re: Befehle an eine andere Anwendung versenden

  Alt 4. Dez 2004, 01:47
nein ich glaube nicht, da bei dem versuch VK_F10 einzusetzen statt ORD('A') sich was im notepad getan hat.
wenn man F10 drückt wird Datei links oben ein bisschen eingedrückt und das war der fall jedesmal wenn man den button gedrückt hat.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#8

Re: Befehle an eine andere Anwendung versenden

  Alt 4. Dez 2004, 02:32
F10 ist dafür reserviert des Menü zu aktivieren. Und da das Menü zum Hauptfenster gehört, ist klar, dass es Funktioniert, wenn du dir das Handle mit FindWindow holst. Das Edit ist aber ein Kindfenster vom Hauptfenster, dass heißt du musst dir erst mit FindWindowEx das handle vom Edit holen. Insofern hat Sprint schon recht, dass du sehr wahrscheinlich das falsche Handle hast.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von The-X
The-X

Registriert seit: 31. Aug 2003
Ort: Woffelsbach / user.exe ;)
377 Beiträge
 
Delphi 7 Personal
 
#9

Re: Befehle an eine andere Anwendung versenden

  Alt 4. Dez 2004, 02:40
Das Problem bei Notepad wird sein, das du die Tasten an das Hauptfenster sendest und diese Die Tasten nicht an das "Memo" weitergibt... versuch für Notepad mal folgendes

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
Var hNotepad,hMemo,I:Integer;
begin
hNotepad:=FindWindow(nil,'Unbenannt - Editor');
If (hNotepad<>0) then begin
  hMemo:=FindWindowEx(hNotepad,0,'Edit',nil);
  if hMemo<>0 Then begin
    For I:=1 to Length(Edit1.Text) do begin
      SendMessage(hMemo, WM_CHAR, ord(Edit1.text[i]), 0);
    end;
  end;
end;
end;
Mit WM_KEYDOWN/UP kommte ich auch nicht in notepad Schreiben obwohl ich das richtige Handle hatte
(siehe Abbruchbedingungen)

aber mit WM_CHAR (hab ich im SDK gefunden ) landete alles in Notepad so wie ich wollte

vllt geht's auch ohne FindWindowEx probier ich auch dann mal aus

[edit]
hab's ohne FindWindowEx getestet .. funktioniert nicht
& Luckie war mal wieder schneller als ich
[/edit]
WGET ftp://root@fbi.us.gov/secret/worldreign.exe <- damit werde ich die Weltherrschaft an mich reissen!
=> irc://irc.quakenet.eu.org:6667/delphi.de da werden Sie auch (manchmal) geholfen
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

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

Re: Befehle an eine andere Anwendung versenden

  Alt 4. Dez 2004, 03:18
Moin The-X,

mit der API Funktion GetGUIThreadInfo kann man direkt das Handle des Fenster ermitteln, dass zum einen den Keyboardfokus, und zum anderen das Caret beinhaltet, also ein Eingabefeld ist.

Z.B. so:

Delphi-Quellcode:
var
  gtiWork : TGUITHREADINFO;

 
      if not GetGUIThreadInfo(0,gtiWork) then exit;
      if (gtiWork.flags and GUI_CARETBLINKING) = 0 then exit; // Kein Caret => Kein Eingabefeld
      if (gtiWork.hwndCaret = INVALID_HANDLE_VALUE) or // Kein Caret => Kein Eingabefeld
         (gtiWork.hwndCaret = 0) or // " "
         (gtiWork.hwndCaret <> gtiWork.hwndFocus) then exit; // Fenster mit Caret hat nicht den Fokus
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
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 03:08 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