Simulierung der Tastatureingabe

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

Psionwelt
*
Beiträge: 10
Registriert: So, 30.01.2005 18:56

Simulierung der Tastatureingabe

Beitrag von Psionwelt »

Hallo,

habe seit des Umstiegs von Ooo 1.1.3 auf 1.1.4 ein Problem.
Ich benutze ein Programm, dass in allen Anwendungen funktionieren soll und wie folgt arbeitet:

1. Ein Name wird eingetippt.
2. Das Programm wird per Hotkey gestartet.
3. Das Programm markiert mit Ctrl+Shift+Left den Namen
4. Das Programm kopiert den Namen mit Ctrl+C in die Zwischenablage
5. Das Programm fügt mit Ctrl+V einen Text in das Dokument ein.

Wie gesagt, das Programm soll in allen Anwendungen funktionieren. Es funktioniert in Oo Calc, in Word, im Notepad, aber NICHT in Oo Text.

Folgendes geschieht:
Nach dem Programmaufruf springt der Cursor links neben den Namen. Und das wars. Der Name wird nicht markiert, er wird auch nicht in die Zwischenablage kopiert.
Warum nicht? In Version 1.1.3 hat es doch noch funktioniert. Womit kann das zusammenhängen?

Psionwelt
Psionwelt
*
Beiträge: 10
Registriert: So, 30.01.2005 18:56

Beitrag von Psionwelt »

Na gut, das war vielleicht etwas wenig Futter.

Hier also der entscheidende Ausschnitt aus dem Programm:
void CWndCatchMsg::SendCopyMsg(HWND _hWndFG)
{
m_hWndFG = _hWndFG;
::SetForegroundWindow(m_hWndFG);

m_bAwaitingData = TRUE;

keybd_event(VK_CONTROL, SCAN, KEYEVENTF_EXTENDEDKEY | 0, 0);
keybd_event(VK_SHIFT, SCAN, KEYEVENTF_EXTENDEDKEY | 0, 0);
keybd_event(VK_LEFT, SCAN, KEYEVENTF_EXTENDEDKEY | 0, 0);
keybd_event(VK_LEFT, SCAN, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, 0);
keybd_event(VK_SHIFT, SCAN, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, 0);
keybd_event(VK_CONTROL, SCAN, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, 0);

keybd_event(VK_CONTROL, SCAN, KEYEVENTF_EXTENDEDKEY | 0, 0);
keybd_event('C', SCAN, KEYEVENTF_EXTENDEDKEY | 0, 0);
keybd_event('C', SCAN, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, 0);
keybd_event(VK_CONTROL, SCAN, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, 0);
}
Wie der Fachmann sicherlich sofort erkennt, handelt es sich um C++.
Kompiliert wird das Programm mit dem Microsoft C++ 6 Compiler.

Verblüffenderweise scheint OpenOffice die Aufhebung der Steuertasten als Befehl zu interpretieren; jedenfalls springt der Cursor nach dem Markieren des Wortes links vor das Wort, bevor etwas in den Zwischenspeicher übergeben wird.

Irgendeine Idee?

Psionwelt
Antworten