Problem mit keybd_event



  • Hi!

    Ich möchte, das mein Prog ein Wort in MS Word oder Editor etc reinschreibt. Hab das mit keybd_event probiert, aber es erscheint nur der erste Buchstabe und dann Unsinn, zum Beispiel das heutige Datum oder Buchstabensalat. Wenn ich ihn die Buchstaben mit ShowMessage anzeigen lass, sind es auch die richtigen, aber einfügen tut er was anderes.

    void __fastcall TForm1::ApplicationEntriesDblClick(TObject *Sender)
    {
     SendString = ApplicationEntries->Items->Strings[ApplicationEntries->ItemIndex];
     SetForegroundWindow(AppHandle);
     ShowMessage ("SendString = " + SendString);
     int cont = SendString.Length();
     ShowMessage ("cont = " + IntToStr(cont));
     String s, ausgabe;
     unsigned char ch;
     for (int e=1; e <= cont; e++)
     {
      SetForegroundWindow(AppHandle);
      s = SendString.SubString(e, 1);
      ch = s[1];
      keybd_event(ch, 0, 0, NULL);
      keybd_event (ch, 0, KEYEVENTF_KEYUP, 0);
      ausgabe = "s = " +  s + "\n ch = " + ch;
      ShowMessage (ausgabe);
     }
    }
    

    Kann mir jemand helfen? Ich bin schon am verzweifeln! 😕

    Danke!

    kaljinka



  • Also ich habe das bei mir so gelöst:

    void PressKeys(AnsiString AString)
    {
       // Tastendruck simulieren
       for (int i=1; i<=AString.Length(); ++i)
       {
          char letter = AString[i];
          unsigned short vkCode = VkKeyScan(letter);
          int vkKey = (vkCode << 8) >> 8;
          int vkShiftState = vkCode >> 8;
          if (vkShiftState & 0x1U)
             keybd_event(VK_SHIFT, 0, 0, 0);
          if (vkShiftState & 0x2U)
             keybd_event(VK_CONTROL, 0, 0, 0);
          if (vkShiftState & 0x4U)
             keybd_event(VK_MENU, 0, 0, 0);
          keybd_event(vkKey, 0, 0, 0);
          keybd_event(vkKey, 0, KEYEVENTF_KEYUP, 0);
          if (vkShiftState & 0x1U)
             keybd_event(VK_SHIFT, 0, KEYEVENTF_KEYUP, 0);
          if (vkShiftState & 0x2U)
             keybd_event(VK_CONTROL, 0, KEYEVENTF_KEYUP, 0);
          if (vkShiftState & 0x4U)
             keybd_event(VK_MENU, 0, KEYEVENTF_KEYUP, 0);
       }
    }
    

    Ich glaube allerdings, daß ich meinen Code auch nur von Code hier aus dem Forum abgeleitet
    hatte.

    Gruß,

    Alexander



  • Das funktioniert einwandfrei.

    Vielen Dank!!! 🙂

    Kaljinka


Anmelden zum Antworten