---
title: "\"fake tangentbordstryckingar\""
type: "forum-thread"
url: "https://www.webforum.nu/amne/programmering/50628-fake-tangentbordstryckingar"
topic: "Programmering"
topic_url: "https://www.webforum.nu/amne/programmering"
author: "Alpha II"
published: "2002-08-17T23:06:33.000Z"
updated: "2002-08-19T20:30:00.000Z"
replies: 10
views: 435
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/programmering/50628-fake-tangentbordstryckingar"
---

# "fake tangentbordstryckingar"

## #1 — Alpha II, 2002-08-17T23:06Z

Hur kan jag göra så att datorn tror att vissa tangenter(bokstäver) trycks ner?

Permalänk: https://www.webforum.nu/p/50628

## #2 — Marcus E, 2002-08-18T06:15Z

Varför? Ofta finns det betydligt bättre sätt att styra program från andra program, än att gå via användargränsnittet.

Du använder Windows API-funktionerna keybd_event eller SendInput. SendInput finns endast till Windows 98 och Windows NT 4 SP3 och senare.

Exempel för C finns i dokumentationen för keybd_event. Porta till Pascal och använd.

```
   #include <windows.h>

   void SetNumLock( BOOL bState )
   {
      BYTE keyState[256];

      GetKeyboardState((LPBYTE)&keyState);
      if( (bState && !(keyState[VK_NUMLOCK] & 1)) ||
          (!bState && (keyState[VK_NUMLOCK] & 1)) )
      {
      // Simulate a key press
         keybd_event( VK_NUMLOCK,
                      0x45,
                      KEYEVENTF_EXTENDEDKEY | 0,
                      0 );

      // Simulate a key release
         keybd_event( VK_NUMLOCK,
                      0x45,
                      KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP,
                      0);
      }
   }

   void main()
   {
      SetNumLock( TRUE );
   }
```

Permalänk: https://www.webforum.nu/p/755734

## #3 — Lasp, 2002-08-18T07:51Z

Sök på Sendkey
Exempelvis här <http://www.geocities.com/SiliconValley/Vista/2964/applications.html>

Permalänk: https://www.webforum.nu/p/755735

## #4 — Alpha II, 2002-08-18T22:47Z

Brukar spela ett spel där man ibland måste säga en sak många gånger i chaten och det finns ingen kopiera klistar in funktion så jag tänkte att jag skulle göra ett program för att göra det enklare (jag är lat). Nu är det klart och det verkar funka bra.

Finns det nått annat sätt man skulle kunna göra det på?

Permalänk: https://www.webforum.nu/p/756034

## #5 — jt, 2002-08-19T06:55Z

Kan du få  tag i rätt fönster handle så borde exemplet nedan fungera.  Exemplet skickar text till notepad.

var
  S: string;
  wnd: Hwnd;
  i: integer;
begin
wnd := FindWindow( 'notepad', Nil );
wnd := GetWindow( wnd, GW_CHILD );
s := 'AAAA';
SendMEssage( wnd, WM_SETTEXT, 0, longint( PChar( S )));
s := 'BBBB';
for i:= 1 to length(S) do
  SendMessage( wnd, WM_CHAR, Ord(S*), 0 );
end;*

Permalänk: https://www.webforum.nu/p/756087

## #6 — Alpha II, 2002-08-19T10:21Z

har hittat det där exemplet också... bytte ut notepad till titeln som spelet har men det fungerade inte :( Kan det bero på att fönstret inte är själva spelet utan bara öppnar en sida med spelet som ett applet?

Permalänk: https://www.webforum.nu/p/756181

## #7 — Marcus E, 2002-08-19T10:57Z

Det kan bero på flera saker. Det kan också bero på att fönstret vill ha WM_KEYDOWN istället.

Använder du keybd_event skickas rätt meddelanden till det aktiva fönstret.

Permalänk: https://www.webforum.nu/p/756208

## #8 — jt, 2002-08-19T11:15Z

Det kan vara lite lurigt att på ett enkelt sätt få tag i rätt handle. Kanske kan du få lite hjälp genom att testa detta program <http://www.greatis.com/windowse.htm.>
Första parametern i findwindow är inte titeln på fönstret utan klassnamnet.

Permalänk: https://www.webforum.nu/p/756224

## #9 — Alpha II, 2002-08-19T18:00Z

Kan klassen verkligen heta "Afx:400000:b:10011:340185"??? Det ändras när man startar om spelet också..... Detr fungerar fö. inte heller... :(

Permalänk: https://www.webforum.nu/p/756417

## #10 — Marcus E, 2002-08-19T18:19Z

> **Alpha II skrev:**
>
> Kan klassen verkligen heta "Afx:400000:b:10011:340185"???

Jodå, det kan heta vad som helst. Det viktiga i det här fallet är att klass-namnet ändras varje gång och därför kan du inte söka efter det.

Du kan bl.a. låta användaren själv aktivera programmet som ska styras och låta ditt program använda keybd_event i ett visst tidsintervall.

Permalänk: https://www.webforum.nu/p/756427

## #11 — Alpha II, 2002-08-19T20:30Z

Kan man på nått sätt inte söka efter det med titeln eller nått?

Permalänk: https://www.webforum.nu/p/756483

---

Tråden på webben: https://www.webforum.nu/amne/programmering/50628-fake-tangentbordstryckingar
