Alles gute ihr beiden
Beiträge von Greek
-
-
Ich glaub nicht das dies geht, es gibt Funktionspointer, aber selbst die ruft man wieder mit () auf und in einer struct funktionieren sie so auch nicht.
Aber du könntest im Konstruktor die value mitgeben, dann kann man es als Property machen:
Spoiler anzeigen
Code
Alles anzeigen#include <iostream> double half(double a) { return a/2; }; int main() { // Funktionspointer double value = 12; double (*HALF)(double) = ½ std::cout << HALF(value) << std::endl; // So: struct Calculator { double HALF; double DOUBLE; Calculator(double value) : HALF(value / 2), DOUBLE(value * 2) {}; }; Calculator myCalculator(12); std::cout << myCalculator.HALF << " " << myCalculator.DOUBLE << std::endl; system("pause"); return 0; }
( Ist C++, kann kein Lua )
Gruß Greek
-
Alles gute water
-
Die Funktion hat bei mir auch nie funktioniert, hab immer falsche Werte bekommen.
Probier es mal damit, die Funktion hat zumindest bei mir jedes mal die richtigen Werte zurückgeliefert:
Edit BugFix: Code entfernt -- Don't feed the troll!
[CLOSED] -
-
Weis nicht ob i2c das mit dem Link zeigen wollte, aber kann ja sein das du es übersiehst:
ZitatAutoIt Previous Versions – v3.2.12.1 was the last version that was compatible with Windows 95 and Windows NT 4.0.
Gruß Greek
-
Hier ein Beispiel noch mit xPath:
Spoiler anzeigen
[autoit]; create object
[/autoit] [autoit][/autoit] [autoit]
$xml = ObjCreate("Msxml2.DOMDocument")If IsObj($xml) Then
[/autoit] [autoit][/autoit] [autoit]
$xml.load('C:\Users\Norman\Desktop\text.xml')
$xml.setProperty("SelectionLanguage","XPath")$path="//data/video";
[/autoit] [autoit][/autoit] [autoit]
$nodes = $xml.selectNodes($path)Local $i=0
[/autoit] [autoit][/autoit] [autoit]
While $i<$nodes.lengthLocal $j=0
[/autoit] [autoit][/autoit] [autoit]
While $j<$nodes($i).childNodes.length
ConsoleWrite($nodes($i).childNodes($j).childNodes(0).nodeValue & @CRLF)
$j += 1
WEnd$i += 1
[/autoit] [autoit][/autoit] [autoit]
WEndElse
[/autoit]
MsgBox(0,"","error")
EndIfAufbau meiner XML Datei ( ungefähr so wie deine
Spoiler anzeigen
XML
Alles anzeigen<?xml version="1.0" encoding="ISO-8859-1"?> <data> <video> <Kunde>Klaus</Kunde> <Objektnummer>12345</Objektnummer> <Objektnummer>54815</Objektnummer> </video> <video> <Kunde>Peter</Kunde> <Objektnummer>45678</Objektnummer> </video> <video> <Kunde>Hans</Kunde> <Objektnummer>35653</Objektnummer> <Objektnummer>78987</Objektnummer> </video> <video> <Kunde>Paul</Kunde> <Objektnummer>83534</Objektnummer> <Objektnummer>63455</Objektnummer> <Objektnummer>28563</Objektnummer> </video> </data>
Der Link zu dem XML Parser ist leider nicht mehr verwendbar, da fehlt irgendwie die hälfte, also einfach das benutzen was ich benutz hab.
Gruß Greek
-
Wie ließt du bis jetzt aus?
Hab das Problem nicht genau verstanden, hier schau dir mal den XML Parser an:
https://raw.github.com/Silvernine0S/F…LDomWrapper.au3
[autoit]#include "_XMLDomWrapper.au3"
[/autoit][autoit][/autoit][autoit]_XMLFileOpen("deineDatei.xml")
[/autoit][autoit][/autoit][autoit]...
[/autoit] -
Zitat
Dazu habe ich eine Funktion geschrieben die die Verbindung zum Server überprüft und die ich gern alle X Minuten aufrufen möchte
Glaub du suchst das:
[autoit]AdlibRegister("_test",250)
[/autoit][autoit][/autoit][autoit]while 1
[/autoit][autoit][/autoit][autoit]Sleep(10)
[/autoit][autoit][/autoit][autoit][/autoit][autoit]
WEndFunc _test()
[/autoit]
ConsoleWrite("test");
EndFuncUnterbricht die While Schleife alle 250ms und führt die Funktion aus
-
Send kann man schon benutzen, ist zwar sch*** aber egal
Du hast bei WinWaitActive kein Timeout angegeben, vielleicht wartet er da ewig. Allgemein kannst du in dein Script Msgbox(0,"","Line: etc") machen um zu sehen wie weit er kommt.
Das hier:
[autoit]WinActivate($Titel)
[/autoit]
If Not (WinWaitActive($Titel)) Then
$vError=1
ElseBrauchst du auch denk ich nicht jedesmal machen, einmal am Anfang reicht.
Ansonsten noch zu den Operatoren:
Zitat= Tests if two values are equal. e.g. If $var= 5 Then (true if $var equals 5). Case insensitive when used with strings.
Zitat== Tests if two strings are equal. Case sensitive. The left and right values are converted to strings if they are not strings already. This operator should only be used for string comparisons that need to be case sensitive
Also in AutoIt kannst du auch = verwenden.
-
-
-
Bei mir matcht das _StringBetween garnicht ?
Man sollte vl. noch die Beschreibung mit speichern, ich hab 3 Stück drin. Wär vl. mit RegEx einfacher:
[autoit]#include <Constants.au3>
[/autoit][autoit][/autoit][autoit]
#include <array.au3>
#include <string.au3>Dim $cmd = 'ipconfig /all'
[/autoit][autoit][/autoit][autoit]
Dim $pid = Run(@ComSpec & " /c " & $cmd, "", @SW_HIDE,$STDOUT_CHILD)
Dim $output = ""While ProcessExists($pid)
[/autoit][autoit][/autoit][autoit]
$output &= StdoutRead($pid)
WEndConsoleWrite($output & @CRLF)
[/autoit][autoit][/autoit][autoit]$aResult = StringRegExp($output,"Beschreibung.*?:\s(.+?)\r\n.+?:\s(.+?)\s",3)
[/autoit]
_ArrayDisplay($aResult) -
Zitat
Hab ich das so weit richtig verstanden?
Nein,
der 1. Parameter ist dein Kompletter Text.
das Ergebnis steht dann zwischen dem Text von Parameter 3 und Parameter 4.
In der Hilfe ist ein Beispiel:
[autoit]#include <String.au3>
[/autoit][autoit][/autoit][autoit]
#include <Array.au3>_Main()
[/autoit][autoit][/autoit][autoit]Func _Main()
[/autoit]
Local $aArray1 = _StringBetween('[18][20][3][5][500][60]', '[', ']')
_ArrayDisplay($aArray1, 'Default Search')
EndFunc ;==>_MainGibt also alles zwischen [ und ] aus.
-
Hier:
[autoit]#include <Array.au3>
[/autoit][autoit][/autoit][autoit]$sLog = FileRead("deinLog.txt")
[/autoit][autoit][/autoit][autoit]$aRegEx1 = StringRegExp($sLog,"(?s)(?<=\[).+?(?=End)",3)
[/autoit][autoit][/autoit][autoit]_ArrayDisplay($aRegEx1)
[/autoit][autoit][/autoit][autoit]$aRegEx2 = StringRegExp($sLog,"(?s)\^\d+\s(.*?)\s.*?\s.*?\s.*?\s(.*?)\s",3)
[/autoit][autoit][/autoit][autoit]_ArrayDisplay($aRegEx2)
[/autoit]Noch nen hübsches Schleifchen drum machen und fertig.
Datum hab ich weg gelassen, das ist ja trivial.Edit:
Sehe gerade das du RegEx noch nicht so kannst, also hier nochmal gleich mit Datum:
[autoit](?s)(?<=\[)(.+?)\s(.+?)\s(.+?)(?=End)
[/autoit]( Datum und Uhrzeit hab ich mal getrennt, je nach dem wie du es willst )
-
Dann habe ich noch eine Frage. Wo bestimmst du in deinem Bespiel mit der Uhr die Position der Uhr auf dem Desktop?
[autoit]
[/autoit]
$hGui=GUICreate("Uhr", $GUIBreite, $GUIHoehe, Default, Default, $WS_POPUP, BitOR($WS_EX_LAYERED,$WS_EX_TOOLWINDOW,$WS_EX_TOPMOST))
GUISetBkColor(0x000000)Sind das hier die Default Einträge?
Steht in der Hilfe bei GUICreate
Zitatleft [optional] The left side of the dialog box. By default (-1), the window is centered. If defined, top must also be defined.
top [optional] The top of the dialog box. Default (-1) is centered-1 kann man auch statt Default schreiben.
-
Gelöst:
[autoit](?:startString|\G)[^<>]*+\K(?:<a>([^<>]++)</a>)(?=(?:(?!startString).)*?endString)
[/autoit]Modifier: s und i
Gruß Greek
-
Wie name22 schon sagt, mach es mit GDIp
"Löschen" kann man das alte gezeichnet übrigens nicht, man muss einfach nochmal ( in deinem Beispiel jedenfalls ) mit schwarz drüber zeichnen.
Hab noch was gefunden, was ich vor 3-4 Jahren mal gemacht hab, zur Veranschaulichung:
Spoiler anzeigen
[autoit];Author: Greek
[/autoit] [autoit][/autoit] [autoit]
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#Include <GDIPlus.au3>HotKeySet ("{ESC}","_CleanEnd")
[/autoit] [autoit][/autoit] [autoit]Global $GUIBreite=400
[/autoit] [autoit][/autoit] [autoit]
Global $GUIHoehe=150$hGui=GUICreate("Uhr", $GUIBreite, $GUIHoehe, Default, Default, $WS_POPUP, BitOR($WS_EX_LAYERED,$WS_EX_TOOLWINDOW,$WS_EX_TOPMOST))
[/autoit] [autoit][/autoit] [autoit]
GUISetBkColor(0x000000)
GUICtrlCreateLabel("", 0, 0, $GUIBreite, $GUIHoehe, -1, $GUI_WS_EX_PARENTDRAG)
GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
_WinAPI_SetLayeredWindowAttributes($hGui, 0x000000, 0,0x01)
_GuiRoundCorners($hGui,0,0,400,150)
GUISetState()_GDIPlus_Startup()
[/autoit] [autoit][/autoit] [autoit]$hGraphic=_GDIPlus_GraphicsCreateFromHWND($hGui)
[/autoit] [autoit][/autoit] [autoit]
$hBrush = _GDIPlus_BrushCreateSolid (0xFF00FF00)
$hFormat = _GDIPlus_StringFormatCreate ()
$hFamily = _GDIPlus_FontFamilyCreate ("Arial")
$hFont = _GDIPlus_FontCreate ($hFamily, 40, 2)
$tLayout = _GDIPlus_RectFCreate (85, 40, 300, 100)
_GDIPlus_GraphicsDrawStringEx ($hGraphic, @HOUR&":"&@MIN&":"&@SEC, $hFont, $tLayout, $hFormat, $hBrush)AdlibRegister("_Update",1000)
[/autoit] [autoit][/autoit] [autoit]While 1
[/autoit] [autoit][/autoit] [autoit]
Sleep ( 200 )
WEndFunc _Update()
[/autoit] [autoit][/autoit] [autoit]
_GDIPlus_GraphicsClear($hGraphic,0xFF000000)
_GDIPlus_GraphicsDrawStringEx ($hGraphic, @HOUR&":"&@MIN&":"&@SEC, $hFont, $tLayout, $hFormat, $hBrush)
EndFuncFunc _CleanEnd()
[/autoit] [autoit][/autoit] [autoit]
_GDIPlus_FontDispose ($hFont)
_GDIPlus_FontFamilyDispose ($hFamily)
_GDIPlus_StringFormatDispose ($hFormat)
_GDIPlus_BrushDispose ($hBrush)
_GDIPlus_GraphicsDispose ($hGraphic)
_GDIPlus_Shutdown ()
Exit
EndFuncFunc _GuiRoundCorners($hWnd, $x1, $y1, $x3, $y3)
[/autoit]
Local $pos, $ret, $ret2
$pos = WinGetPos($hWnd)
$ret = DllCall('gdi32.dll', 'long', 'CreateRoundRectRgn', 'long', $x1, 'long', $y1, 'long', $pos[2], 'long', $pos[3], 'long', $x3, 'long', $y3)
If $ret[0] Then
$ret2 = DllCall('user32.dll', 'long', 'SetWindowRgn', 'hwnd', $hWnd, 'long', $ret[0], 'int', 1)
If $ret2[0] Then
Return 1
Else
Return 0
EndIf
Else
Return 0
EndIf
EndFunc_GDIPlus_GraphicsClear($hGraphic,0xFF000000)
[/autoit]Der Befehl zeichnet nochmal über alles drüber mit schwarz, dadurch verschwindet die alte Zeit immer.
[autoit]_WinAPI_SetLayeredWindowAttributes($hGui, 0x000000, 0,0x01)
[/autoit]
Hier sag ich noch das die Farbe Schwarz transparent sein soll.Gruß Greek
-
Hiho,
lern gerade ein wenig RegExp und habe folgenden Text :
Spoiler anzeigen
<a>willichnicht</a>
startString
testyo
<a>willichhaben1</a>
mehr tests
<a>willichhaben2</a>
endString
stblub
<a>willichnicht</a>
startString
testyo
<a>willichhaben3</a>
mehr tests
<a>willichhaben4</a>
endString
stblub
<a>willichnicht</a>So könnte man es machen:
[autoit]$aExp1 = StringRegExp($file,"(?s)(?<=startString).+?(?=endString)",3);
[/autoit][autoit][/autoit][autoit]
$aExp2 = StringRegExp($aExp1[0],"<a>(.+?)</a>",3); // und noch für $aExp1[1]_ArrayDisplay($aExp2)
[/autoit]Ich frag mich ob man das auch in einem Ausdruck machen kann?
Meine Ansätze:
[autoit]StringRegExp($file,"(?s)(?<=startString).+?<a>(.+?)</a>.+?(?=endString)",3);
[/autoit]
StringRegExp($file,"(?s)(?<=startString).+?(<a>(.+?)</a>.+?)+(?=endString)",3);Das erste gibt aber nur den 1. und das 2. gibt nur den 2. . Gibts auch einen der alle matcht?
Gruß Greek
-
Hi,
du kannst auch einfach auf ein transparentes Fenster zeichnen.
Beispiel:
Spoiler anzeigen
[autoit]#include <GUIConstantsEx.au3>
[/autoit] [autoit][/autoit] [autoit]
#include <WindowsConstants.au3>
#include <GDIPlus.au3>
#include <timers.au3>
#include <Misc.au3>$dll = DllOpen("user32.dll")
[/autoit] [autoit][/autoit] [autoit]Global $ballpos1=@DesktopWidth/2
[/autoit] [autoit][/autoit] [autoit]
Global $ballpos2=@DesktopHeight/2
Global $BewegungSenkrecht=Random(5, 7, 1)
Global $BewegungWagrecht=Random(5, 7, 1)
Global $Speed=10_GDIPlus_Startup()
[/autoit] [autoit][/autoit] [autoit]Global $hGui = GUICreate("Rahmen", @DesktopWidth, @DesktopHeight, -1, -1, $WS_POPUP, $WS_EX_LAYERED)
[/autoit] [autoit][/autoit] [autoit]
GUISetBkColor(0xABCDEF)
_WinAPI_SetLayeredWindowAttributes($hGui, 0xABCDEF, 255)
GUISetState()
Global $hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGui)
$Pinsel = _GDIPlus_PenCreate(0xFF0000FF, 20)
Global $vanish = _GDIPlus_PenCreate(0xFF000000, 20)
$t1 = _Timer_SetTimer(0, 10, "move")
$begin=TimerInit()AdlibRegister ( "_check", 50 )
[/autoit] [autoit][/autoit] [autoit]While 1
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
$nmsg=GUIGetMsg()
Switch $nmsg
Case $gui_event_close
Exit
EndSwitch
WEndFunc _ende()
[/autoit] [autoit][/autoit] [autoit]
_GDIPlus_GraphicsClear ( $hGraphic, 0xFFABCDEF )
_GDIPlus_PenDispose($Pinsel)
_GDIPlus_PenDispose($vanish)
_GDIPlus_GraphicsDispose($hGraphic)
_GDIPlus_Shutdown()
Exit
EndFunc ;==>_endeFunc move($a, $b, $c, $d)
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
_GDIPlus_GraphicsDrawLine ( $hGraphic, $ballpos1, $ballpos2, $ballpos1+50, $ballpos2+50, $vanish )
$ballpos1+=$BewegungWagrecht * $Speed
$ballpos2+=$BewegungSenkrecht * $Speed
_GDIPlus_GraphicsDrawLine ( $hGraphic, $ballpos1, $ballpos2, $ballpos1+50, $ballpos2+50, $Pinsel )
If $ballpos1 >= @DesktopWidth - 80 And $BewegungWagrecht > 0 Then $BewegungWagrecht = Random(-7, -5, 1)
If $ballpos1 < 10 And $BewegungWagrecht < 0 Then $BewegungWagrecht = Random(5, 7, 1)
If $ballpos2 >= @DesktopHeight - 95 And $BewegungSenkrecht > 0 Then $BewegungSenkrecht = Random(-7, -5, 1)
If $ballpos2 < 30 And $BewegungSenkrecht < 0 Then $BewegungSenkrecht = Random(5, 7, 1)
If _GDIPlus_PenGetColor ( $vanish )=0xFF000000 Then
_GDIPlus_PenSetColor ( $vanish, 0xFFFFFF00 )
ElseIf _GDIPlus_PenGetColor ( $vanish )=0xFFFFFF00 Then
_GDIPlus_PenSetColor ( $vanish, 0xFFFF0000 )
ElseIf _GDIPlus_PenGetColor ( $vanish )=0xFFFF0000 Then
_GDIPlus_PenSetColor ( $vanish, 0xFF00FF00 )
ElseIf _GDIPlus_PenGetColor ( $vanish )=0xFF00FF00 Then
_GDIPlus_PenSetColor ( $vanish, 0xFF000000 )
EndIf
;~ $dif=TimerDiff( $begin )
;~ If $dif>12000 Then
;~ _GDIPlus_GraphicsClear ( $hGraphic, 0xFFABCDEF )
;~ $begin=TimerInit()
;~ EndIf
EndFunc ;==>moveFunc _check()
[/autoit]
If _IsPressed ( "1B", $dll ) Then
_ende()
EndIf
EndFuncGruß Greek
Edit:
Ah hab was vergessen, man kann nicht mehr hindurch drücken, dafür gibts aber eine Lösung - moment.
Edit2:
Spoiler anzeigen
[autoit];### UDF Start
[/autoit] [autoit][/autoit] [autoit]
#Include <WinAPI.au3>
#include <WindowsConstants.au3>Global Const $GWL_EXSTYLE = -20
[/autoit] [autoit][/autoit] [autoit];===============================================================================
[/autoit] [autoit][/autoit] [autoit]
;
; Function Name: _Win_SetClickThrough($hWnd,$noclic = True)
; Description:: Makes a window to not receive mouse input
; Parameter(s): $title -> Title or hWnd of Window
; $text [Optional] -> Text in Window
; $noclic [Optional] -> If False, the window regains MouseInput otherwise it will loose it, defalut: True
; Requirement(s): <WINApi.au3>
; Return Value(s): Success: 1, Error0 and @error
; @error Values: 1 -> Window does not exist
; 2 -> Error in Setting the Styles
; Author(s): Prog@ndy
;
;===============================================================================
;
Func _Win_SetClickThrough($title,$text = "",$noclic = True)
Local $hWnd = WinGetHandle($title,$text)
If @error Then Return SetError(1,0,0)
If $noclic Then
_WinAPI_SetWindowLong($hWnd,$GWL_EXSTYLE,BitOR(_WinAPI_GetWindowLong($hWnd,$GWL_EXSTYLE),$WS_EX_TRANSPARENT))
If @error Then Return SetError(2,0,0)
WinSetTrans($hWnd,"",255) ; Sets the Layered Attribute, but still shows the window
If @error Then Return SetError(2,0,0)
Else
_WinAPI_SetWindowLong($hWnd,$GWL_EXSTYLE,BitAND(_WinAPI_GetWindowLong($hWnd,$GWL_EXSTYLE),BitNOT($WS_EX_TRANSPARENT)))
If @error Then Return SetError(2,0,0)
EndIf
Return 1
EndFunc
;### UDF END;Example:
[/autoit] [autoit][/autoit] [autoit]
$win = WinGetHandle("Unbenannt")If @error = 1 Then
[/autoit] [autoit][/autoit] [autoit]
Run("notepad.exe")
WinWait("Unbenannt")
$win = WinGetHandle("Unbenannt")
EndIfWinActivate($win)
[/autoit]
_Win_SetClickThrough($win)
MsgBox(0, '', "Notepad receives no Mouse Clicks anymore, Click OK to Restore")
_Win_SetClickThrough($win,"",0)