Hi Jimmy,
du kannst SendInput() oder keybd_event() nehmen.
Beide Funktionen simulieren Tastatureingaben, und SendInput() kann noch mehr.
Um "CTRL+ALT+F" zu senden, muß per Funktionsaufruf Schritt für Schritt nachvollzogen werden, was du als Bediener manuell tun würdest.
1. "Strg" drücken und gedrückt halten
2. "Alt" drücken und gedrückt halten
3. "F" drücken und gedrückt halten
4. "F" loslassen
5. "Alt" loslassen
6. "Strg" loslassen
Code: Alles auswählen
( mit keybd_event() )
#define VK_SHIFT 0x10
#define VK_CONTROL 0x11 // STRG
#define VK_MENU 0x12 // ALT
#define VK_RMENU 0xA5 // ALT GR
#define KEYEVENTF_KEYUP 0x0002
// Tasten drücken
keybd_event( VK_CONTROL, 0, 0, 0)
keybd_event( VK_MENU, 0, 0, 0)
keybd_event( asc("F"), 0, 0, 0)
// Tasten wieder loslassen
keybd_event( asc("F"), 0, KEYEVENTF_KEYUP, 0)
keybd_event( VK_MENU, 0, KEYEVENTF_KEYUP, 0)
keybd_event( VK_CONTROL, 0, KEYEVENTF_KEYUP, 0)
Der Dll-Aufruf dazu:
FUNCTION keybd_event( nVk, nScan, nFlags, nExtraInfo )
STATIC keybd_event
IF keybd_event = NIL
keybd_event := DllPrepareCall( "user32.dll", ;
DLL_STDCALL, "keybd_event" )
ENDIF
RETURN DllExecuteCall( keybd_event, nVk,;
nScan, nFlags, nExtraInfo )
Falls du SendInput() verwendest, reicht ein einziger Funktionsaufruf; du mußt dann die Tastenfolge als Array von Strukturen (nach C-Konvention) übergeben. Pablo Botellas Beispiel in der Newsgroup hat alles was dazu gebraucht wird
Das Fenster, bei dem die Tastatureingaben ankommen sollen, muß den Eingabefokus haben.
Ist dieses ffdshow ein eigenständiges Programm mit eigenem Hauptfenster, oder ein ActiveX-Control, das in deine Anwendung eingebettet ist
Davon hängt ab, wie man an das betreffende Fensterhandle herankommt und welche Funktionsaufrufe nötig sind, um den Fokus zu setzen.
Gruß,
Günter