text an anderes Programm übertragen und mit enter bestätigen

kmaisch

Grünschnabel
hallo,

ich habe ein problem mit dem Verhalten eines kleinen Programmes, welches ich geschrieben habe.

aber zunächst noch etwas mehr Erleuterungen dazu:
ich lese mit einem Sensorsystem Barcodes aus. Mein Programm simuliert einen Server, an den die Information aus dem Barcode gelesen wird ( funktioniert über standard winsock code). desweiteren nimmt mein Programm den benötigten Teil des Informationsstrings heraus und schickt diesen per Sendkeys an ein anderes Programm.
dies funktioniert auch bestens. Normalerweise müsste man jetzt noch diese Codeeingabe in dem anderen Programm mit Enter bestätigen. Dies würde ich auch gerne automatisieren, indem ich an die andere Anwendung noch ein Enter schicke. Und genau hier liegt mein Problem.

wenn ich das Enter einfach an den String anhänge ( durch "{Enter}") wird im anderen programm zwar auch das Enter ausgelöst, jedoch meldet dieses andere Programm dann einen Error. Ich nehme an, dass also der Code nicht richtig oder vollständig eingelesen wurde, bevor das Enter gesendet wurde.

ich habe auch schon diese methode versucht um windows die möglichkeit zu übergeben noch aktionen auszuführen:
Code:
Sendkeys "der zu übertragendeCode"
DoEvents
Sendkeys "{Enter}"
allerdings ist hier der fall, dass es manchmal funktioniert, wie es soll, allerdings in der mehrzahl der Fälle das Programm wieder einen Error meldet.

ebenfall hab ich versucht, an das Sendkeys "CodeString", das wait = True anzuhängen, um zu warten, das die Zeichenfolge erst abgearbeitet wird. jedoch auch ohne erfolg

Durch Sleep() das programm für kurze zeit anzuhalten, bis die zeichenfolge gesendet worden wäre, hat ebenfalls nicht funktioniert.

Hier noch der Code, wenn mein Programm von dem Scanner den String erhält und ihn an das andere Programm weiterschickt:
Code:
Private Sub Winsock_DataArrival(ByVal bytesTotal As Long) 'defines the behaviour for data arrival
    Dim Result As String
    Dim receivedData As String
    Dim inBuffer As String
    
    Winsock.PeekData receivedData   'copy the data in 'receivedData' but doesnt delete it from the input queue
    Result = InStr(1, receivedData, vbCrLf, vbTextCompare)
    If Result > 0 Then
        ' Now remove the result string from the input queue
        Winsock.GetData receivedData, , (Result + 1)
                
        ' If the received string was not the idling string then write it to the keyboard buffer.
        If InStr(1, receivedData, Mid("\r\n", 1, Len("\r\n") - 4) & vbCrLf, vbTextCompare) <> 1 Then
            inBuffer = Mid(receivedData, 1, Result - 1)
                                    
            txtCode.Text = inBuffer
            'if the recieved string contains '+','(' or ')' they should be replaced with curly braces around them
            inBuffer = Replace(inBuffer, "+", "{+}", , , vbTextCompare)
            inBuffer = Replace(inBuffer, "(", "{(}", , , vbTextCompare)
            inBuffer = Replace(inBuffer, ")", "{)}", , , vbTextCompare)
            If InStr(1, inBuffer, "1P6ES7", vbTextCompare) = 1 Then     'errors wont be send
                SendKeys (inBuffer)
            End If
        End If
    End If
End Sub

so langsam bin ich wirklich am verzweifeln. Vielleicht fällt euch ja eine lösung dafür ein, oder könnt mir wenigstens sagen wieso es sich so verhält....

gruß Kmaisch
 
Wenn Du uns schreibst, was für einen Error Du bekommst, können wir uns vielleicht überlegen, wodurch dieser erzeugt wird.

ronaldh
 
Das andere Programm zeigt einfach nur "Error " an. also wird meiner meinung nach der Error deshalb verursacht, dass der CodeString, welcher sich in dem Eingabefeld des anderen Programms befindet nicht gültig ist, wenn das "Enter" zum bestätigen geschickt wird.
Allerdings steht in der Variable "inBuffer" welche ich an das andere Programm schicke definitiv der richtige Code drin.
 
Das sieht ja erstmal alles richtig aus, und Du hast ja auch schon eine Menge probiert, ohne dadurch das Problem lösen zu können.

Vielleicht solltest Du mal probieren, statt Sendkey die Daten per API zu schicken. Hier wird beschrieben, wie Du das machen kannst. Wenn man statt VB-Funktionen API's nutzt, ist dies häufig schneller, und vielleicht liegt hier ja wirklich ein Timing-Problem vor.

Viele Grüsse
ronaldh
 
Zurück