Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » VC++ / MFC » Tastenereigniss werfen

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
05.05.2003, 21:07 Uhr
~SwordMaster
Gast


Ich habe in meinem Prog ein Handle auf ein Fenster (in meinem Fall das Wordpad - Fester)
mein Programm soll mir nun über
SendMessage(handle, ....)
die gleiche NACHRICHT an Wordpad senden, als die die gesendet wird wenn ich die "F"-Taste Drücke!
=> im WordPad Fenster steht dann "F" in dem eingabebereich!

Könnt ihr mir sagen wie ich das mache?!?!?
Wäre echt super!!!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
06.05.2003, 14:23 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


SendMessage(handle,WM_KEYDOWN,'F',0);
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
06.05.2003, 22:16 Uhr
Christian
C/C++ Master
(Operator)


Hi Flo!

Aber so einfach ist es nicht, da es nichts bringt, wenn man diese Nachricht einfach an Wordpad schickt. Ich habs auch probiert. Dann habe ich einmal das Handle des Richeditcontrols ermittelt; das bringt auch nichts diese Nachricht direkt an das Richeditctrl zu schicken.
Muss auch ganz ehrlich sagen, ich hab' keine Ahnung, warum das nicht will.
Ich habe es auch versucht zuerst dem Fenster den Fokus zu geben und in den Vordergrund zu hiefen, aber das wollte auch nicht...

Wie dem auch sei.
--
Grüße, Christian
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
06.05.2003, 22:48 Uhr
mike
Pinguinhüpfer
(Operator)


Hi!
Wieder ein Beschiss
Es wird dem Wordpad nicht der Tastendruck gesendet, sondern es wird direkt eingefügt

C++:
CWnd* pWnd = FindWindow(NULL, "Dokument - Wordpad");
CString s = "F";
if(pWnd) {
   CRichEditCtrl* pREdit = (CRichEditCtrl*)pWnd->GetDlgItem(0xE900);
   if(pREdit)
      pREdit->SendMessage(EM_REPLACESEL, 0, (LPARAM)s.GetBuffer(s.GetLength()));
}



oki doki

mfg mike
--
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
07.05.2003, 10:13 Uhr
~christian
Gast


Du sagst es, wieder ein Beschiss.
Ne, aber so wie du es machst, kann man es doch machen. Ist ja kein Problem dabei.

Aber ich verstehe nicht ganz, warum der andere Weg über WM_KEYDOWN nicht funktioniert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
07.05.2003, 12:36 Uhr
~SwordMaster
Gast


Versteh ich auch nicht....
ich habs sogar schon probiert ihm die nachrichtig
WM_KEYDOWN, und danach die Nachricht WM_KEYUP
zu schicken!
Da im prinzip ja beide nachrichten bei einem Tastendruck+Tastenloslassen geesendet werden...
aber egal wie ich es probier es geht einfach nicht! ((((
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
07.05.2003, 12:42 Uhr
~SwordMaster
Gast


Hab gerade erfanren dass man tasten auch mit "keybd_event" simulieren kann!

Aber ich check leider die funktion nicht1
könnt ihr es mal vesuchen und mir dann sagen ob ihrs hinkriegt???
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
07.05.2003, 14:08 Uhr
mike
Pinguinhüpfer
(Operator)


Hmmm....
Also wenn man einfach den KEYDOWN ans Programm sendet, weiß dieses - meiner Meinung nach - nicht, was es damit tun soll. Wenn dann im KEYDOWN Funktionsprototyp dann noch der Key nicht definiert wird, ist das ein big Problem. Mein obiges Bsp. funktioniert auch nur, weil CRichEditCtrl die Nachricht EM_REPLACESEL kennt.

Ist jetzt die Frage, obs auf nen anderen Weg geht


Zitat:

Vielleicht werden sie schon darüber gestolpert sein, dass die Sendkeys-Anweisung unter Windows 2000 manchmal nicht so funktioniert wie erwartet. Dahinter steckt ein Bug, der Microsoft bereits bekannt ist - der Artikel Q276346 der Knowledge-Base weist darauf hin. Darin werden auch Wege zur Umgehung des Problems angedeutet - sehr hilfreich und ein wirklicher Ersatz für die SendKeys-Anweisung sind sie jedoch nicht.

Der Ansatz, ein einzelnes Tastatur-Ereignis über die API-Funktion keybd_event zu versenden, ist allerdings goldrichtig. Dabei ist "Tastatur-Ereignis" durchaus wörtlich zu verstehen: Das Niederdrücken und das Loslassen einer Taste sind zwei verschiedene Ereignisse. Wie bei SendKeys auch werden die gesendeten Tastendrücke an das Fenster bzw. Steuerelement übergeben, das gerade den Fokus inne hat. Zum Simulieren des Niederdrückens einer Taste übergeben Sie der Funktion keybd_event im ersten Parameter den zu sendenden KeyCode der Taste - in den übrigen Parametern übergeben Sie 0. Zum Simulieren des Loslassens einer Taste übergeben Sie ebenfalls den KeyCode im ersten Parameter, und dazu im dritten Parameter die Konstante KEYEVENTF_KEYUP


Wie kann es auch anderes sein

mfg mike
--

Dieser Post wurde am 07.05.2003 um 14:09 Uhr von mike editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ VC++ / MFC ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: