Moin Xeno!
Alles Gute zu Deinem 30. Geburtstag.
Moin Xeno!
Alles Gute zu Deinem 30. Geburtstag.
Um bei StringRegExp zu bleiben:
[autoit]
$Text = "Moin!!!" & @CRLF & "Wie gehts?"
$Text2 = StringRegExp($Text, "(?s)!!!(.*?)\z", 3)
MsgBox(0, "", $Text2[0])
Entscheidend ist: "(?s)" am Anfang des Pattern.
Oh mann, na klar. Bin ich blöd! "Keyboard not found! Press F1 to continue." ![]()
![]()
Hab's noch etwas bearbeitet. Neue Version in Post #1.
Mir ist noch eine andere Möglichkeit eingefallen. Die ist so einfach, das ich erst gar nicht drauf gekommen bin.
- Man startet mein Programm (neue Version siehe Post #1). Das packt sich in den Tray und aktiviert einen Hotkey [Alt] + [e].
- Dann holt man das Programm in den Vordergrund, wohin die Eingabe gesendet werden soll (z.B. Notepad).
- Danach öffnet man mein Eingabefenster per Hotkey. Dabei wird vor dem öffnen das aktive Fenster sowie das aktive Control-Element abgefragt. Und an das wird dann die Eingabe gesendet.
eukalyptus: Das ist dann aber nicht in AutoIt. ![]()
Raupi : Habe versucht eine Eingabefenster-Erkennung zu machen, aber das war nicht sehr erfolgreich. Ich denke, es wird bei der ClipPut-Version bleiben müssen. ![]()
Es gibt jetzt aber eine zusätzliche [LOCK]-Taste, mit der man dauerhaft auf Großschreibung umschalten kann. Die [SHIFT]-Taste hat nun nämlich die Funktion, um nur die nächste Taste in Groß zu schreiben und schaltet danach automatisch wieder auf Kleinschreibung.
Ich finde das so praktischer.
So:
[autoit]WinGetTitle("[active]")
[/autoit]Na gut, es scheint die Zeit für virtuelle Tastaturen zu sein.
Hab mir gedacht, dass das doch auch kürzer gehen muss. Hier also meine Version:
Screenshot:
Script:
#include <Constants.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <GUIConstantsEx.au3>
Opt('GUIOnEventMode', 1)
Opt('TrayMenuMode', 1)
Global $bShift = False, $bLock = False, $bOld = False, $ahKeys[57], $wHWND, $cHWND
Global $sTitle = 'Mouse-Keyboard v1.3 by Oscar (http://www.autoit.de)'
Global $aKeys[57][6] = [ _
['^', '°', 010, 060, 32, 32],['1', '!', 044, 060, 32, 32],['2', '"', 078, 060, 32, 32],['3', '§', 112, 060, 32, 32], _
['4', '$', 146, 060, 32, 32],['5', '%', 180, 060, 32, 32],['6', '&&', 214, 060, 32, 32],['7', '/', 248, 060, 32, 32], _
['8', '(', 282, 060, 32, 32],['9', ')', 316, 060, 32, 32],['0', '=', 350, 060, 32, 32],['ß', '?', 384, 060, 32, 32], _
['´', '`', 418, 060, 32, 32],['<-', '<-', 452, 060, 66, 32], _
['q', 'Q', 010, 100, 32, 32],['w', 'W', 044, 100, 32, 32],['e', 'E', 078, 100, 32, 32],['r', 'R', 112, 100, 32, 32], _
['t', 'T', 146, 100, 32, 32],['z', 'Z', 180, 100, 32, 32],['u', 'U', 214, 100, 32, 32],['i', 'I', 248, 100, 32, 32], _
['o', 'O', 282, 100, 32, 32],['p', 'P', 316, 100, 32, 32],['ü', 'Ü', 350, 100, 32, 32],['*', '+', 384, 100, 32, 32], _
['@', '|', 418, 100, 32, 32],['[', '\', 452, 100, 32, 32],[']', '~', 486, 100, 32, 32], _
['a', 'A', 010, 140, 32, 32],['s', 'S', 044, 140, 32, 32],['d', 'D', 078, 140, 32, 32],['f', 'F', 112, 140, 32, 32], _
['g', 'G', 146, 140, 32, 32],['h', 'H', 180, 140, 32, 32],['j', 'J', 214, 140, 32, 32],['k', 'K', 248, 140, 32, 32], _
['l', 'L', 282, 140, 32, 32],['ö', 'Ö', 316, 140, 32, 32],['ä', 'Ä', 350, 140, 32, 32],['#', "'", 384, 140, 32, 32], _
['LOCK', 'LOCK', 418, 140, 100, 32], _
['y', 'Y', 010, 180, 32, 32],['x', 'X', 044, 180, 32, 32],['c', 'C', 078, 180, 32, 32],['v', 'V', 112, 180, 32, 32], _
['b', 'B', 146, 180, 32, 32],['n', 'N', 180, 180, 32, 32],['m', 'M', 214, 180, 32, 32],[',', ';', 248, 180, 32, 32], _
['.', ':', 282, 180, 32, 32],['-', '_', 316, 180, 32, 32],['<', '>', 350, 180, 32, 32],['€', 'µ', 384, 180, 32, 32], _
['SHIFT', 'SHIFT', 418, 180, 100, 32], _
['SPACE', 'SPACE', 10, 220, 406, 32],['ENTER', 'ENTER', 418, 220, 100, 32] _
]
$hGui = GUICreate($sTitle, 530, 280)
GUISetOnEvent($GUI_EVENT_CLOSE, '_End')
GUISetIcon('shell32.dll', -174, $hGui)
GUISetBkColor(0xCCCCCC)
GUICtrlCreateLabel('Send input to (Window-Title):', 10, 10, 500, 16)
$hSendWindow = GUICtrlCreateLabel('', 10, 30, 508, 18, $SS_SUNKEN)
GUICtrlSetFont(-1, 9, 400, 0, 'Arial')
For $i = 0 To UBound($aKeys) - 1
$ahKeys[$i] = GUICtrlCreateButton($aKeys[$i][0], $aKeys[$i][2], $aKeys[$i][3], $aKeys[$i][4], $aKeys[$i][5])
GUICtrlSetFont(-1, 14, 400, 0, 'Courier New')
GUICtrlSetOnEvent(-1, '_Key')
Next
$hStatus = GUICtrlCreateLabel(' Status: NORMAL', -2, 264, 534, 16, Default, $WS_EX_STATICEDGE)
GUICtrlSetBkColor(-1, 0xBBBBBB)
TraySetIcon('shell32.dll', -174)
TraySetClick(16)
TrayCreateItem($sTitle)
TrayItemSetState(-1, $TRAY_DISABLE)
TrayCreateItem('')
TrayCreateItem('Exit')
TrayItemSetOnEvent(-1, '_End')
GUISetState()
WinSetOnTop($hGui, '', 1)
While True
If $wHWND <> WinGetHandle('') And WinGetHandle('') <> $hGui Then
$wHWND = WinGetHandle('')
$cHWND = ControlGetFocus($wHWND)
GUICtrlSetData($hSendWindow, WinGetTitle($wHWND))
Else
Sleep(100)
EndIf
WEnd
Func _End()
Exit
EndFunc ;==>_End
Func _Key()
Local $sKey = GUICtrlRead(@GUI_CtrlId)
Switch $sKey
Case '<-'
ControlSend($wHWND, '', $cHWND, '{BACKSPACE}')
Case 'LOCK'
$bShift = False
$bLock = True
GUICtrlSetData($hStatus, ' Status: CAPS LOCK')
_Shift()
Case 'SHIFT'
GUICtrlSetData($hStatus, ' Status: SHIFT')
_Shift()
$bLock = False
Case 'SPACE'
ControlSend($wHWND, '', $cHWND, '{SPACE}')
Case 'ENTER'
ControlSend($wHWND, '', $cHWND, '{ENTER}')
Case '&&'
ControlSend($wHWND, '', $cHWND, '{&}')
If $bShift And Not $bLock Then _Shift()
Case Else
ControlSend($wHWND, '', $cHWND, $sKey)
If $bShift And Not $bLock Then _Shift()
EndSwitch
EndFunc ;==>_Key
Func _Shift()
$bShift = Not $bShift
If Not $bShift Then GUICtrlSetData($hStatus, ' Status: NORMAL')
If $bShift = $bOld Then Return
$bOld = $bShift
For $i = 0 To UBound($aKeys) - 1
GUICtrlSetData($ahKeys[$i], $aKeys[$i][$bShift])
Next
EndFunc ;==>_Shift
Edit: Version 1.3
Jetzt neue/geänderte Tasten:
[Del] löscht das Eingabefeld, [<-] löscht das letzte Zeichen, [SHIFT] aktiviert Großschreibung für die nächste Taste und mit [LOCK] wird die Großschreibung dauerhaft aktiviert.
2. Ändere den Titel im 1. Post von "VirtuelleKeyboard" bitte auf "Virtuelles Keyboard", das tut beim Anschauen schon weh.
Also, wenn schon ändern, dann aber richtig:
Entweder "Virtual Keyboard" oder "Virtuelle Tastatur". ![]()
@Nilo: Na, da hast Du beim abkupfern aber nicht richtig aufgepasst (Script von achim89 nicht verstanden).
Das Array "$feld" hat 3 Dimensionen. Die dritte unterscheidet zwischen dem Feld-Index und dem Feld-Inhalt. So, wie Du das übernommen hast, geht das nicht.
BTW: Wenn Du schon derart viel übernimmst, könntest Du ein Dankeschön an den Author im Script unterbringen.
In Zeile 10 darf nach "Then" nicht direkt eine Anweisung folgen. Erst in der nächsten Zeile:
Func _checkVPNprocesses($processname, $searchstring)
Global $readedRegkey
If ProcessExists($processname) Then
$readedRegkey = RegRead("HKEY_CURRENT_USER\Software\Classes\Software\Microsoft\XLive", "ConnectionOverride")
GUICtrlSetData($input, GUICtrlRead($input) & @CRLF & "Connectionoverride-key is current:" & $readedRegkey)
_SearchNetworknamesNoListView($searchstring)
If $readedRegkey <> $networkname Then
GUICtrlSetData($input, GUICtrlRead($input) & @CRLF & "Connectionoverride-key not equal to started networkadapter!")
_SearchNetworknamesNoListView($searchstring)
If $NetworkreadyFlag = ("YES") Then
RegWrite("HKEY_CURRENT_USER\Software\Classes\Software\Microsoft\XLive", "ConnectionOverride", "REG_SZ", $networkname)
GUICtrlSetData($input, GUICtrlRead($input) & @CRLF & "Writing (XLive) connectionoverride registration key:" & $networkname)
GUICtrlSetData($input, GUICtrlRead($input) & @CRLF & "Writing to registration done!")
Else
GUICtrlSetData($input, GUICtrlRead($input) & @CRLF & "No running Proceess called:" & $processname & " or Networkname found!")
EndIf
Else
EndIf
Else
EndIf
EndFunc
Hab den Beitrag wiederhergestellt.
In Zeile 118 ist Dir ein Flüchtigkeitsfehler unterlaufen:
[autoit]$feld[$bombe_pos[0] + $x][$bombe_pos[1]][0] = $boden
[/autoit]
das muss richtig so aussehen:
$feld[$bombe_pos[0] + $x][$bombe_pos[1]][1] = $boden
[/autoit]Übrigens: Nettes Spiel hast Du da gescriptet. ![]()
Oder so:
HotKeySet('{ESC}', '_End')
While True
$countdown = Int(10 - _Timer_GetMouseIdleTime() / 1000)
ToolTip('Noch ' & $countdown & ' sekunden bis zum runterfahren.')
If $countdown <= 0 Then
MsgBox(0, 0, 'Rechner herunterfahren!')
Exit
EndIf
Sleep(20)
WEnd
Func _Timer_GetMouseIdleTime()
If Not IsDeclared('aMousePosOld') Then Global $aMousePosOld = MouseGetPos()
If Not IsDeclared('iTimer') Then Global $iTimer = TimerInit()
Local $aMousePos = MouseGetPos()
If $aMousePos[0] <> $aMousePosOld[0] Or $aMousePos[1] <> $aMousePosOld[1] Then
$aMousePosOld = $aMousePos
$iTimer = TimerInit()
EndIf
Return Int(TimerDiff($iTimer))
EndFunc
Func _End()
Exit
EndFunc
Wenn du eine Frage an google hast, setzt du dich dann auf einen Stuhl und tust nichts ausser nur dazusitzen und zu warten bis irgendwann dein Rechner piept und auf dem Monitor ein Fenster aufgeht wo drinsteht "Hallo , hier ist Google! Sie haben eine Frage?"
Ich schmeiss mich weg.
Herrlich, Du hast immer so tolle Vergleiche. ![]()
@Reaker: Eigentlich beschreibt dieser Vergleich genau die Problematik und ich hoffe, dass Du das nun verstanden hast, weil mir sonst auch nichts einfällt, wie man das noch einfacher beschreiben kann.
Ich wollte den "Fehler" gerade mal nachvollziehen, aber bei mir tritt er gar nicht auf?!
Mit diesem Script:
GUICreate('Test', 640, 480)
$sText = FileRead('test.log')
$hEdit = GUICtrlCreateEdit($sText, 5, 5, 630, 470)
GUISetState()
Do
Until GUIGetMsg() = -3
habe ich eine Logdatei (409 KB, mehr als 4000 Zeilen) eingelesen und angezeigt bekommen.
Nachdem ich das gerade mal auf meinem anderen Rechner getestet habe, liegt das wohl an der 64Bit-Version.
Also mit der 64Bit-Version funktioniert obiges bei mir einwandfrei, aber mit der X86-Version muss das so aussehen:
GUICreate('Test', 640, 480)
$sText = FileRead('test.log')
$hEdit = GUICtrlCreateEdit('', 5, 5, 630, 470)
GUICtrlSetLimit(-1, 99999)
GUICtrlSetData(-1, $sText)
GUISetState()
Do
Until GUIGetMsg() = -3
Nanu?
Vorgestern erzählte mir ein Arbeitskollege von einem ähnlichen Problem. Immer wenn er bei YouTube ein Video ansehen will, wird das Video erst nach 20 sek. gestartet.
Ich hatte erst vermutet, dass er sich irgendein "Optimierungsprogramm" installiert hat. Aber jetzt, wo ich das hier lese...
Mein Arbeitskollege hat nämlich auch einen Internetzugang über Kabel-Deutschland.
Vielleicht suchst Du mal in dieser Richtung?!
Für so ein Konzept ist doch das klassische "ein Server/viele Clients" geeignet. Die Clients verbinden sich (sobald sie gestartet sind) mit dem Server und der verteilt dann die Befehle.
Im umgekehrten Fall (wenn die "Clients" als Server fungieren) besteht doch eine viel größere Missbrauchsgefahr, weil sich dann jeder dort "einloggen" kann.
@Reaker: Wenn Du vorhast dort Befehle auszuführen, dann bau aber unbedingt eine Sicherheitsabfrage (Passwort) ein. Oder nimm gleich ein fertiges Programm (VNC). Gerade wenn das irgendwelche Firmenrechner sind. ![]()
Ja klar, und 20 Dyndns-Namen und 20 mal den Router konfigurieren (Portweiterleitung). ![]()
@Reaker: Was soll das eigentlich werden?
Meinst Du die Icons? Das geht mit _GUICtrlTreeView_SetIcon().
Für die GUI-Größenfestlegung hier ein Beispiel:
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
Opt('GUIOnEventMode', 1)
If Not IsDeclared('WS_EX_COMPOSITED') Then Global Const $WS_EX_COMPOSITED = 0x02000000
Global $hGUI = GUICreate('Test', 600, 600, -1, 0, BitOR($WS_MAXIMIZEBOX, $WS_SIZEBOX), $WS_EX_COMPOSITED)
GUISetOnEvent($GUI_EVENT_CLOSE, '_End')
GUISetState()
GUIRegisterMsg($WM_GETMINMAXINFO, "MY_WM_GETMINMAXINFO")
While True
Sleep(100)
WEnd
Func _End()
Exit
EndFunc ;==>_End
Func MY_WM_GETMINMAXINFO($hWnd, $msg, $wParam, $lParam)
If $hWnd = $hGUI Then
Local $minmaxinfo = DllStructCreate("int;int;int;int;int;int;int;int;int;int", $lParam)
DllStructSetData($minmaxinfo, 7, 400) ; min X
DllStructSetData($minmaxinfo, 8, 400) ; min Y
DllStructSetData($minmaxinfo, 9, 800) ; max X
DllStructSetData($minmaxinfo, 10, 800) ; max Y
EndIf
EndFunc ;==>MY_WM_GETMINMAXINFO
Ich denke, Du verstehst das Konzept nicht. Nicht der Server verbindet sich mit den Clients, sondern genau umgekehrt.
Der Server muss erstmal darauf warten, dass sich die Clients mit ihm verbinden und wenn das geschehen ist, dann kann der Server auch Nachrichten an die Clients verschicken.