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