Taste betätigen am PC über Purebasic ?

Für allgemeine Fragen zur Programmierung mit PureBasic.
funkheld
Beiträge: 636
Registriert: 31.12.2009 11:58

Taste betätigen am PC über Purebasic ?

Beitrag von funkheld »

Hallo, guten Tag.

Ich sende ein Seriell-Signal zum Purebasic und möchte bitte, das jetzt eine Taste am PC betätigt wird für ein anders Programm was läuft.Die seriellen Daten senden habe ich fertig.

Wie geht das bitte mit der Taste?

Danke.
Gruss
ccode_new
Beiträge: 1214
Registriert: 27.11.2016 18:13
Wohnort: Erzgebirge

Re: Taste betätigen am PC über Purebasic ?

Beitrag von ccode_new »

Hallo funkheld,

wie sendest du das serielle Signal ?

Über COM-Port (USB/What ever)

Oder über Funk ?
Betriebssysteme: div. Windows, Linux, Unix - Systeme

no Keyboard, press any key
no mouse, you need a cat
funkheld
Beiträge: 636
Registriert: 31.12.2009 11:58

Re: Taste betätigen am PC über Purebasic ?

Beitrag von funkheld »

Code: Alles auswählen

 If port > 0
    While AvailableSerialPortInput(port)  
      ReadSerialPortData(port, @r_byte, 1)
    Wend 
  EndIf  
Ich empfange Daten vom Comport1 mit 9600Baud.
Wenn hier in r_byte ein bestimmter Wert drin ist, den ich auswerte soll eine bestimmte Taste betätigt werden von Purebasic.

Danke.
Gruss
ccode_new
Beiträge: 1214
Registriert: 27.11.2016 18:13
Wohnort: Erzgebirge

Re: Taste betätigen am PC über Purebasic ?

Beitrag von ccode_new »

Gut!

Also dann soll bei einem bestimmten empfangenen Wert eine bestimmte Taste simuliert werden. Richtig ?

Hierbei ist jetzt also nur dein Problem wie man eine\n Taste(ndruck) simulieren kann, oder ?

Suche mal nach "keybd_event" oder "Tasten simulieren", oder ähnlich hier im Forum.

Einfaches Beispiel:

Code: Alles auswählen

RunProgram("notepad.exe")
Delay(1000)
keybd_event_(#VK_A,0,0,0)
Dabei ist aber das größte Problem den fremden Eingabe-Fokus zu erlangen.

Oder wenn du einen fremden Button klicken möchtest wäre auch ein Simulieren eines Mausklicks sinnvoll.

Code: Alles auswählen

GetCursorPos_(xy.point)
mouse_event_(#MOUSEEVENTF_LEFTDOWN, xy\x,xy\y,0,0)
Hier einmal noch etwas komfortabler:

Code: Alles auswählen

Global TestMethode = 1

Procedure Taste(Taste.i, Gedrueckt.b = 1, Methode.b = 0, Zeichenmodus.b = 0)
  CompilerIf #PB_Compiler_OS = #PB_OS_Windows
    If Methode = 0
      Protected TipTap.INPUT
      TipTap\Type = #INPUT_KEYBOARD
      If Gedrueckt = 1
        If Zeichenmodus = 1
          TipTap\ki\wScan = Taste
          TipTap\ki\dwFlags = 4
        Else
          TipTap\ki\wVk = Taste
          TipTap\ki\dwFlags = 0
        EndIf
      ElseIf Gedrueckt = 0
        If Zeichenmodus = 1
          TipTap\ki\wScan = Taste
          TipTap\ki\dwFlags = 4 | #KEYEVENTF_KEYUP
        Else
          TipTap\ki\wVk = Taste
          TipTap\ki\dwFlags = #KEYEVENTF_KEYUP
        EndIf
      EndIf
      SendInput_(1, @TipTap, SizeOf(INPUT))
    ElseIf Methode = 1
      If Gedrueckt = 1
        If Zeichenmodus = 1
          keybd_event_(0, Taste,  4, 0)
        Else
          keybd_event_(Taste, 0, 0, 0)
        EndIf
      Else
        If Zeichenmodus = 1
          keybd_event_(0, Taste, 4 | #KEYEVENTF_KEYUP, 0)
        Else
          keybd_event_(Taste, 0, #KEYEVENTF_KEYUP, 0)
        EndIf
      EndIf
    EndIf
  CompilerEndIf
EndProcedure

Procedure Maus(PosX.i, PosY.i, Taste.w = 0, Gedrueckt.b = 1, Methode.b = 0) ;Taste = 0 (Left) / Taste = 1 (Right) / Taste = 2 (Middle)
  CompilerIf #PB_Compiler_OS = #PB_OS_Windows
    If Methode = 0
      Protected Miau.INPUT
      Miau\Type=#INPUT_MOUSE
      If Gedrueckt = 1
        If Taste = 0
          Miau\mi\dwFlags  = #MOUSEEVENTF_LEFTDOWN
        ElseIf Taste = 1
          Miau\mi\dwFlags  = #MOUSEEVENTF_RIGHTDOWN
        ElseIf Taste = 2
          Miau\mi\dwFlags  = #MOUSEEVENTF_MIDDLEDOWN
        EndIf
      Else
        If Taste = 0
          Miau\mi\dwFlags  = #MOUSEEVENTF_LEFTUP
        ElseIf Taste = 1
          Miau\mi\dwFlags  = #MOUSEEVENTF_RIGHTUP
        ElseIf Taste = 2
          Miau\mi\dwFlags  = #MOUSEEVENTF_MIDDLEUP
        EndIf
      EndIf
      SetCursorPos_(PosX, PosY)
      SendInput_(1, @Miau, SizeOf(INPUT))
    Else
      Protected MausSpielfeldBreite.i  = GetSystemMetrics_( #SM_CXSCREEN )-1
      Protected MausSpielfeldHoehe.i  = GetSystemMetrics_( #SM_CYSCREEN )-1
      Protected mx.i = PosX * (65535 / MausSpielfeldBreite)
      Protected my.i = PosY * (65535 / MausSpielfeldHoehe)
      If Gedrueckt = 1
        If Taste = 0
          mouse_event_(#MOUSEEVENTF_LEFTDOWN | #MOUSEEVENTF_MOVE | #MOUSEEVENTF_ABSOLUTE, mx, my, 0, 0)
        ElseIf Taste = 1
          mouse_event_(#MOUSEEVENTF_RIGHTDOWN | #MOUSEEVENTF_MOVE | #MOUSEEVENTF_ABSOLUTE, mx, my, 0, 0)
        ElseIf Taste = 2
          mouse_event_(#MOUSEEVENTF_MIDDLEDOWN | #MOUSEEVENTF_MOVE | #MOUSEEVENTF_ABSOLUTE, mx, my, 0, 0)
        EndIf
      Else
        If Taste = 0
          mouse_event_(#MOUSEEVENTF_LEFTUP | #MOUSEEVENTF_MOVE | #MOUSEEVENTF_ABSOLUTE, mx, my, 0, 0)
        ElseIf Taste = 1
          mouse_event_(#MOUSEEVENTF_RIGHTUP | #MOUSEEVENTF_MOVE  | #MOUSEEVENTF_ABSOLUTE, mx, my, 0, 0)
        ElseIf Taste = 2
          mouse_event_(#MOUSEEVENTF_MIDDLEUP | #MOUSEEVENTF_MOVE | #MOUSEEVENTF_ABSOLUTE, mx, my, 0, 0)
        EndIf
      EndIf
    EndIf
  CompilerEndIf
EndProcedure

RunProgram("notepad.exe")
Delay(3000)
; If TestMethode = 1
;   Maus(100, 100, 0, #True, #True)
;   Maus(100, 100, 0, #False, #True)
; Else
;   Maus(100, 100, 0, #True)
;   Maus(100, 100, 0, #False)
; EndIf
For i = 1 To 10
  If TestMethode = 1
    Taste(#VK_LSHIFT, #True, #True)
    Taste('R', #True, #True, #True)
    Taste(#VK_LSHIFT, #False, #True)
    Taste('R', #False, #True, #True)
    Taste('a', #True, #True, #True)
    Taste('a', #False, #True, #True)
  Else
    Taste('R', #True, #False, #True)
    Taste(#VK_A, #True, #False)
  EndIf
Next i
Betriebssysteme: div. Windows, Linux, Unix - Systeme

no Keyboard, press any key
no mouse, you need a cat
funkheld
Beiträge: 636
Registriert: 31.12.2009 11:58

Re: Taste betätigen am PC über Purebasic ?

Beitrag von funkheld »

Hallo, danke für die Hilfe.

Gruss
funkheld
Beiträge: 636
Registriert: 31.12.2009 11:58

Re: Taste betätigen am PC über Purebasic ?

Beitrag von funkheld »

Hallo, danke für die Hilfe.

Gruss
Benutzeravatar
RSBasic
Admin
Beiträge: 8022
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Taste betätigen am PC über Purebasic ?

Beitrag von RSBasic »

Hast du vergessen, dass du genau das gleiche am 07.01. geschrieben hast? :) Oder bist du ein Bot? :D
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Antworten