über eine externe Hardware bekomme ich einen Triggerimpuls,
wobei ich den zuvor markierten Text (egal in welcher Anwendung)
in die Zwischenablage kopiere und dadurch weiterverarbeiten kann.
Prinzipiell klappt das schon. Aber aus irgendwelchen Gründen kann
ich keine Texte aus der eigenen Anwendung kopieren.
Das Prinzip ist ganz einfach: "CTRL+C" emulieren, kurz warten und dann Clipboard lesen.
Manchmal braucht Windows 2-3x Emulationen, bis diese ausgeführt wird. Darum in einer
Endlosschleife mit Timeout.
Code: Alles auswählen
EnableExplicit
Declare.s CatchMarkedText()
Procedure.s CatchMarkedText()
Protected ems.q = ElapsedMilliseconds(), ems2.q
ClearClipboard()
While(Not Len(GetClipboardText()) And ElapsedMilliseconds() < ems + 200) ; Text in Zwischenablage enthalten? (oder Timeout)
keybd_event_(#VK_CONTROL, 0, 0, 0) ; CTRL gedrückt
keybd_event_(67, 0, 0, 0) ; C gedrückt
keybd_event_(67, 0, #KEYEVENTF_KEYUP, 0) ; C losgelassen
keybd_event_(#VK_CONTROL, 0, #KEYEVENTF_KEYUP, 0) ; CTRL losgelassen
ems2 = ElapsedMilliseconds()
While(ElapsedMilliseconds() < ems2 + 10) : Wend ; Zwischen CTRL+C und Abfrage der Zwischenablage warten
Wend
ProcedureReturn GetClipboardText()
EndProcedure
CompilerIf #PB_Compiler_IsMainFile
OpenWindow(0, 0, 0, 400, 300, "Test", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
Define Event.l
StringGadget(0, 15, 15, 250, 20, "Testtext0815")
AddWindowTimer(0, 1, 250)
Repeat
Event = WaitWindowEvent(15)
If Event = #PB_Event_Timer And EventTimer() = 1
Debug Str(ElapsedMilliseconds())+" ->"+CatchMarkedText()
EndIf
Until Event = #PB_Event_CloseWindow
CompilerEndIf
keine Texte kopiert werden können? Oder gibt es eine elegantere Möglichkeit?
Danke im Voraus!