1. Dashboard
  2. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team
    4. Mitgliedersuche
  3. Forenregeln
  4. Forum
    1. Unerledigte Themen
  • Anmelden
  • Registrieren
  • Suche
Alles
  • Alles
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
  1. AutoIt.de - Das deutschsprachige Forum.
  2. Mitglieder
  3. Texos

Beiträge von Texos

  • Hilfe bei der Automatisierung: Wie greife ich auf Felder in einer Herstellersoftware zu?

    • Texos
    • 26. November 2024 um 04:09

    Hier ein kleines Beispiel von mir. Du musst so gesehen hierarchisch dort von Anfang an dorthin navigieren, kannst dir aber bestimmte Bereiche als $Parent speichern um von dort in eine andere Richtung zu suchen. Sprich wenn du ein Tree-Item möchtest, musst du erst mal das 1. Fenster referenzieren vom Desktop oder der Anwendung an sich heraus. Dann das darin liegende Fenster in dem der Tree liegt und dann vom Tree aus in die Zeilen und dort dann erst das finale Item suchen. Du kannst auch direkt vom Parent bis zum Item in einer Build condition und search condition suchen, das verursacht aber unnötigen Headspace da er alles scannen muss weil er das was du willst im $Parent nicht kennt und er vom angegebenen Parent aus dann solange Childs untersucht bis er es hat. Daher lieber den richtigen Referer bereits lokalisieren und nutzen, sprich hierarchich dorthin navigieren, siehe Beispiel 2.

    Das Program UIA_Spy hilft dir dabei fast alles auszulesen, es kann auch Code erstellen, finde ich aber nicht so effizient gestaltet.

    Hier noch ein paar Beispiele mit Builder-Funktionen von mir selbst, schon lange her das ich diese benutzt hatte:

    Sorry für die Unordnung, grade schnell alles hier zusammengefügt zum präsentieren. Vlt. verstehst du es so.

    AutoIt
    Global $oParent = init_uia("Microsoft Dynamics Navision")
    
    main_test()
    
    Func main_test()
       ; Suche Fenster Umfüllauftragskarte anhand ID und 2 weiteren checkups
       Local $aConditions = [[$UIA_AutomationIdPropertyId, "{004EED9C-0000-0000-0108-0000836BD2D2}"], _
    						[$UIA_ClassNamePropertyId, "WindowsForms10.Window.8.app.0.2004eee"], _
    						[$UIA_ControlTypePropertyId, $UIA_WindowControlTypeId]]
       $parent_datagrid = build_condition($oParent, $aConditions)
       If Not IsObj($parent_datagrid) Then Return -1
    
       ; Extrahiere die UF-Nummer
       Local $result_UF_nr = get_propertie_value($parent_datagrid, $UIA_LegacyIAccessibleNamePropertyId)
       $result_UF_nr = StringSplit($result_UF_nr, " ")
       If Not IsArray($result_UF_nr) Then Return -1
    
       return $result_UF_nr
    Endfunc
    
    Func init_uia($handleName)
        ; Create UI Automation object
        Global $oUIAutomation = ObjCreateInterface( $sCLSID_CUIAutomation, $sIID_IUIAutomation, $dtagIUIAutomation )
        If Not IsObj( $oUIAutomation ) Then Return ConsoleWrite( "$oUIAutomation ERR" & @CRLF )
    
        Local $mainwindow
        $UIA_oUIAutomation.ElementFromHandle(WinGetHandle($handleName), $mainwindow)
        Global $hwnd = ObjCreateInterface($mainwindow, $sIID_IUIAutomationElement, $dtagIUIAutomationElement)
    	If Not IsObj( $hwnd ) Then Return ConsoleWrite( "$hwnd ERR" & @CRLF )
    	   
    	Return $hwnd
    EndFunc
    
    Func build_condition($oParent, $aConditions)
       If Not IsArray($aConditions) Then Return False
       If Not IsObj($oParent) Then Return False
       Local $iParts = Ubound($aConditions)
       Local $pCondition0, $pCondition1, $pAndCondition1
    
       ; Build first condition
       $oUIAutomation.CreatePropertyCondition($aConditions[0][0], $aConditions[0][1], $pAndCondition1 )
       If Not $pAndCondition1 Then Return ConsoleWrite( "$pAndCondition1 ERR" & @CRLF )
    
       ; create variables and build next conditions by array
       If $iParts > 1 Then
    	  For $i = 1 To $iParts-1
    		 $oUIAutomation.CreatePropertyCondition($aConditions[$i][0], $aConditions[$i][1], $pCondition1)
    		 If Not $pCondition1 Then Return ConsoleWrite(String($aConditions[$i][0]) & " -> " & $aConditions[$i][1] & "$pCondition ERR" & @CRLF )
    
    		 $oUIAutomation.CreateAndCondition($pCondition1, $pAndCondition1, $pAndCondition1)
    		 If Not $pAndCondition1 Then Return ConsoleWrite( "$pAndCondition1 ERR" & @CRLF )
    	  Next
       EndIf
    
       Local $pObj1, $oObj1
       $oParent.FindFirst( $TreeScope_Descendants, $pAndCondition1, $pObj1 )
       $oObj1 = ObjCreateInterface( $pObj1, $sIID_IUIAutomationElement, $dtagIUIAutomationElement )
       If Not IsObj( $oObj1 ) Then Return ConsoleWrite( "$oObj1 ERR" & @CRLF )
    
       Return $oObj1
    EndFunc
    
    Func get_propertie_value($oElement, $iPropertie)
       If Not IsObj($oElement) Then Return False
       Local $sValueValue2
       $oElement.GetCurrentPropertyValue($iPropertie, $sValueValue2)
       Return $sValueValue2
    EndFunc
    Alles anzeigen


    AutoIt
    - UIAWrappers.au3
    - UIA_Functions.au3
    
    ; UIA variablen wie benötigt setzen
    _UIA_setVar("Global.Debug", false)
    _UIA_setVar("Global.Debug.File", false)
    _UIA_setVar("Global.Highlight", true)
    
    ; Hilft beim Navigieren mit UIA anhand Titelnamen falls mehrere Fenster simultan offen sein können.
    Opt("WinTitleMatchMode", 2)
    
    ; Main:
    WinActivate("Microsoft Dynamics NAV") ; Beispiel für MS Navision
    Local $mainwindow
    $UIA_oUIAutomation.ElementFromHandle(WinGetHandle("Microsoft Dynamics NAV"), $mainwindow)
    Global $hwnd = ObjCreateInterface( $mainwindow, $sIID_IUIAutomationElement, $dtagIUIAutomationElement)
    
    _navigatemenuitem("Startseite") ; Beispiel Klick auf Startseite
    
    Func _navigatemenuitem($menuitemname)
      WinActivate("Microsoft Dynamics NAV")
      WinWaitActive("Microsoft Dynamics NAV")
      
     ; Create UI Automation object
     Local $oUIAutomation = ObjCreateInterface( $sCLSID_CUIAutomation, $sIID_IUIAutomation, $dtagIUIAutomation)
     If Not IsObj( $oUIAutomation ) Then Return ConsoleWrite( "$oUIAutomation ERR" & @CRLF )
     ConsoleWrite( "$oUIAutomation OK" & @CRLF )
     
     ; Get Desktop element
     Local $pDesktop, $oDesktop
     $oUIAutomation.GetRootElement( $pDesktop )
     $oDesktop = ObjCreateInterface( $pDesktop, $sIID_IUIAutomationElement, $dtagIUIAutomationElement )
     If Not IsObj( $oDesktop ) Then Return ConsoleWrite( "$oDesktop ERR" & @CRLF )
     ConsoleWrite( "$oDesktop OK" & @CRLF )
     
      ; --- Find window/control ---
      ConsoleWrite( "--- Build check conditions ---" & @CRLF )
      ; $UIA_AutomationIdPropertyId needs to be "{DF1AA864-6D25-4f2a-8620-C078B7B4CA17}" and will be saved as $pCondition0
      ; $UIA_ControlTypePropertyId needs to be $UIA_PaneControlTypeId and will be saved as $pCondition1
      ; CreateAndCondition concatenates $pCondition0 and $pCondition1 which results in $pAndCondition1
      
      Local $pCondition0, $pCondition1, $pAndCondition1
      $oUIAutomation.CreatePropertyCondition( $UIA_AutomationIdPropertyId, "{DF1AA864-6D25-4f2a-8620-C078B7B4CA17}", $pCondition0 )
      $oUIAutomation.CreatePropertyCondition( $UIA_ControlTypePropertyId, $UIA_PaneControlTypeId, $pCondition1 )
      $oUIAutomation.CreateAndCondition( $pCondition0, $pCondition1, $pAndCondition1 )
      If Not $pAndCondition1 Then Return ConsoleWrite( "$pAndCondition1 ERR" & @CRLF )
      ConsoleWrite( "$pAndCondition1 OK" & @CRLF )
      
      ; With the $pAndCondition1 we have been build up, we now look for the Pane element
      ; Search in the root $hwnd the Pane with the conditions we setup
      
      Local $pPane1, $oPane1
      $hwnd.FindFirst( $TreeScope_Descendants, $pAndCondition1, $pPane1 )
      $oPane1 = ObjCreateInterface( $pPane1, $sIID_IUIAutomationElement, $dtagIUIAutomationElement )
      If Not IsObj( $oPane1 ) Then Return ConsoleWrite( "$oPane1 ERR" & @CRLF )
      ConsoleWrite( "$oPane1 OK" & @CRLF )
      
      ; --- Find window/control ---
      ConsoleWrite( "--- Build next check conditions ---" & @CRLF )
      ; we build up the next condition to look for the final element we need from the $oPane Object we referenced -> the CustomControl.
      
      Local $pCondition4, $pCondition5, $pAndCondition5
      $oUIAutomation.CreatePropertyCondition( $UIA_ControlTypePropertyId, $UIA_CustomControlTypeId, $pCondition4 )
      $oUIAutomation.CreatePropertyCondition( $UIA_NamePropertyId, $menuitemname, $pCondition5 )
      $oUIAutomation.CreateAndCondition( $pCondition4, $pCondition5, $pAndCondition5 )
      If Not $pAndCondition5 Then Return ConsoleWrite( "$pAndCondition5 ERR" & @CRLF )
      ConsoleWrite( "$pAndCondition5 OK" & @CRLF )
      
      ; With the condition, search in the Pane1 for the 
      
      Local $pCustom1, $oCustom1
      $oPane1.FindFirst( $TreeScope_Descendants, $pAndCondition5, $pCustom1 )
      $oCustom1 = ObjCreateInterface( $pCustom1, $sIID_IUIAutomationElement, $dtagIUIAutomationElement )
      If Not IsObj( $oCustom1 ) Then Return ConsoleWrite( "$oCustom1 ERR" & @CRLF )
      ConsoleWrite( "$oCustom1 OK" & @CRLF )
      
      ; --- Element Properties (information) ---
      ; click coordinates extracted from the final item in simple way
      Local $asBoundingRectangle1
      $oCustom1.GetCurrentPropertyValue( $UIA_BoundingRectanglePropertyId, $asBoundingRectangle1 )
      MouseClick("left", $asBoundingRectangle1[0]+$asBoundingRectangle1[2]/2, $asBoundingRectangle1[1]+$asBoundingRectangle1[3]/2, 1 , 0)
      
      WinWaitActive("Microsoft Dynamics NAV")
    EndFunc
    Alles anzeigen
  • Prozess-Handles rausfinden (Win-Funktion)

    • Texos
    • 21. Juni 2021 um 21:49

    Hallo,

    mit dem Prozess Explorer ist es möglich die Handles eines Prozesses anzuzeigen.

    Dabei werden diese in mehrere Spalten gegliedert (Type | Name | Handle Value | Access Mask usw)

    Der Type ist nochmals unterteilt in verschiedene Sektoren: Directory, Event, File, Key, Mutant, Thread usw.

    File C:\Users\xyz\AppData\Local\Temp\xyz.tmp

    File \Device\NamedPipe\mojo.xyz

    Key HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options

    Key HKLM\SYSTEM\ControlSet001\Control\Nls\Sorting\Versions

    Key HKLM\SYSTEM\ControlSet001\Control\SESSION MANAGER

    Event \KernelObjects\MaximumCommitCondition

    Event \BaseNamedObjects\xyz

    Event \Sessions\1\BaseNamedObjects\xyz

    Thread xyz(4148): 10168

    Da ich rein keinen Anhaltspunkt habe wo sich diese Einträge befinden wollte ich mal Fragen ob ihr mir da weiterhelfen könntet.

  • [Python] Neural Network

    • Texos
    • 14. Dezember 2020 um 01:48

    Hi Mars, Andy,

    Mars: Danke für dein Feedback, ich schätze auch den Output zwischen 0 und 1 zu skalieren ist wohl am besten. Hab die Output Daten jetzt mal über die Standardisierungsformel y = (x - min) / (max - min) eingespielt. Somit kann man sie auch später gut zurückrechnen. Finde ich besser als den min/max Wert vom aktuellen Trainingsset da es unmöglich wird wenn höhere oder tiefere Werte reinkommen. So habe ich definitiv einen Minimal- und Maximalwert den ich selbst bestimmen und sagen kann: Das sind die Grenzen.

    Andy: Du täuschst dich :). Ein Neuronales Netz ist genau dafür bekannt aus mehreren Inputs einen Output zu generieren. Diese künstlichen Netze sind aufgebaut wie unser Gehirn. Vergleichen wir einen Apfel und eine Birne. Ich möchte nun wissen welche Frucht am "zärtesten" ist. Bekommt das Netz einen Apfel als Bildinput, generiert es einen ganz anderen Output als bei einem Apfel. Dabei spielen die Form, die Größe, die Farbe etc. alles eine Rolle. Jedes Neuron hat unterschiedliche Gewichte, sieht es an der Form dass es rund ist (Apfel) werden andere Zweige genommen was ein anderes resultat ergibt als wenn die Form nicht rund wäre. Schwer zu erklären wenn du dich damit nicht auskennst :)


    Aber es geht mir in diesem Sinne auch nicht nur um die Destillationsanlage sondern eher um ein Konstrukt zu bauen dass auf vielen Anwendungsbeispielen genutzt werden kann. (Ein Neuronales Netz dass eigenständig nach dem bestmöglichen Setup sucht, egal ob es jetzt eine Destillationsanlage oder eine XOR-Funktion ist, die "gelernt" werden soll. Die Input-Daten müssen natürlich vorher richtig ausgewählt werden. Würde man bei einer Destillationsanlage die Temperatur des Verdampfers nicht im Input haben, dann würde es nie eine Lösung finden um Vorhersagen treffen zu können. Natürlich wird es lange dauern bis man für sein Projekt dann ein passendes Setup gefunden hat, aber nehmen wir einfach mal an wir hätten einen Supercomputer und es wäre in 1 Minute berechnet :). Darauf soll dieses Projekt hinauslaufen. Es geht mir nicht darum ob es Zeit in Anspruch nimmt sondern dass das Ergebnis dem entspricht was man erwartet. Inputs => Outputs.

    Was ich noch gerne implementieren würde wäre eine Funktion die beschreibt ob das Setup "gut" ist. Wo könnte man da ansetzen? Erstmal verschiedene Loss-Funktionen einbauen (Beispiel siehe Aktivierungsfunktionen)

    Den aktuell berechneten Loss pro Epoch in einer List speichern und dann per Median im abstand von 20-30 Epochen schauen ob es "besser" wird? Aber was tun wenn sich das neuronale Netz umentscheidet und der Loss einen Sprung nach oben macht aber danach wieder kontinuierlich sinkt? Wie könnte man am besten solche Ausreißer als "unkritisch" ansehen. Vlt. wenn die Loss-Funktion auf X-Epochen gesehen nach diesem Sprung besser wird einfach den abort_counter wieder auf 0 setzen?

    Ergibt es Sinn die Funktion Layernorm auf die Hidden Layer anzuwenden? Habe die Chance derzeit mal auf 0 gestellt und die Dropout-Layer chance auf eine Chance zwischen 0 und 100 mit zufälligem Dropout Parameter 0.1 bis 0.5 gesetzt.

    Fragen über Fragen :) Es kann jeder seine Ideen mit einbringen ;)

  • [gelöst] SQL - Positionsabfrage von rechts?

    • Texos
    • 10. Dezember 2020 um 19:52

    Noch ein anderer Vorschlag.

    Diese Funktionen können zu Firebird konvertiert werden, musst dafür nur die entsprechenden "Synonyme" aufrufen :)

    SQL
    SELECT
        SUBSTRING_INDEX(name1, " ", -1) as NACHNAME,
        REVERSE(SUBSTRING(REVERSE(name1), INSTR(REVERSE(name1), " "))) as VORNAME
    FROM
        Kunden
    WHERE 1
  • [Python] Neural Network

    • Texos
    • 9. Dezember 2020 um 18:13

    Hi Zusammen,

    da ich kein richtiges Forum finde und meine ersten Erfahrungen im Programmieren mit AutoIt gemacht habe und auch heute noch sehr viel benutze, entscheide ich mich einfach mal dazu dieses Forum zu nutzen :)

    Vielleicht gibt es ja den ein oder anderen der auch schon mit neuronalen Netzwerken zu tun hatte und kann seine Meinung oder Verbesserungen abgeben.

    Programmiert wird auf der PyCharm Community Edition mit anaconda3 auf Python 3.7 basis.

    Ich habe mich mal dran versucht ein dynamisches Modell zu bauen dass nach bestmöglichen Modellen sucht. Man muss sagen, ich bin noch relativ unerfahren im Aufbau der neuronalen Netzwerken, habe jedoch schon durch mehrere Tutorials ein wenig wissen aufgebaut. Ob meine programmierung jedoch stimmt sei dahingestellt ;) Es läuft, bringt aber nicht die gewünschten Ergebnissen.

    Das neuronale Netz soll anhand von mehreren Inputs einen Output berechnen. Dieser Output ist eine Zahl zwischen 50 und ca. 250 und wird einfach durch 100 geteilt um dem neuronalen Netz es zu vereinfachen über die Neuronen und Bias etc. Somit haben wir als Output eine Zahl zwischen 0.05 und 2.5.

    Der Code ist um gottes Willen nicht perfekt und sehr verbesserungswürdig. Aber genau deswegen bin ich hier.

    Ich möchte gerne ein Konstrukt bauen, dass selbstständig nach dem besten Setup sucht und falls ein Setup "schlecht" ist es verworfen wird und ein neues beginnt. Activation Func in Output? Lieber Linear oder Non-Linear(mit activation)...

    Beschreibung: Destillationsanlage mit Rückführung. Es soll eine bestimmte Menge Destillat(Output) produziert werden. Dabei spielt die Eingangsmenge "Feed", die Temperatur des Verdampfers und das wieder in die Anlage zurückgeführte Destillat "Reflux" eine große Rolle. Die Parameter A bis E geben jeweils die Zusammensetzung des Stoffes an. Parameter A, B und E destillieren z.B. bei einer geringeren Temperatur. C und D haben im Destillat nichts zu suchen. Durch die Rückführung wird z.B. der Anteil an A, B und E erhöht und somit der Ausgangsstoff "verdünnt" wodurch die Parameter C und D extrahiert werden. Destillationsanlage eben ;).

    Verbesserungen und Ideen sind erwünscht! Die Dynamische Erstellung kann natürlich auch auf weitere andere Layer erweitert werden. Das Setup muss natürlich zu der Eingabe passen. Bildbearbeitung hat natürlich einen anderen Ansatz, falls man die Conv. Layer aber auch hier einbinden könnte, her damit. Danke :)

    Beispielcode 5 Zeilen Input:

    tensor([[3.5000000000e+02, 3.1950000000e+02, 2.4680000305e+02, 2.9270000458e+00,

    2.7205999374e+01, 3.4679999352e+00, 2.6322999954e+01, 3.1165000916e+01],

    [3.8000000000e+02, 3.1950000000e+02, 2.4700000000e+02, 2.7620000839e+00,

    2.9021999359e+01, 3.6809999943e+00, 2.6806999207e+01, 2.8224000931e+01],

    [2.2000000000e+02, 3.5300000000e+02, 2.4400000000e+02, 4.9959998131e+00,

    2.8895000458e+01, 9.1900002956e-01, 6.2230000496e+00, 5.2880001068e+01],

    [2.3000000000e+02, 2.6800000000e+02, 2.4750000000e+02, 9.3000002205e-02,

    3.8362998962e+01, 5.2449998856e+00, 3.8039001465e+01, 1.6130000353e+00],

    [3.8000000000e+02, 3.2550000000e+02, 2.4700000000e+02, 2.7620000839e+00,

    2.9021999359e+01, 3.6809999943e+00, 2.6806999207e+01, 2.8224000931e+01]])

    Beispielcode 5 Zeilen passender Output:

    tensor([[1.1399999857],

    [1.1549999714],

    [1.1900000572],

    [0.8399999738],

    [1.1000000238]])

    Python
    import torch
    import torch.nn as nn
    import random
    import torch.optim as optim
    from torch.optim import lr_scheduler
    from torch.autograd import Variable
    import pandas as pd
    from visdom import Visdom
    
    import os
    import numpy as np
    
    # Default Configuration
    #random.seed(1)
    PATH = 'state_dict_model.pt'
    n_epochs = 999999999
    batch_size = 18
    use_gpu = False
    torch.set_printoptions(precision=10)
    num_hidden_layers = random.randint(1, 5)
    optimizer_model = 0
    sgd_momentum = random.randint(20, 70) / 100
    learningrate_init = random.uniform(0, 1)
    learningrate = learningrate_init
    max_abort = 50
    cur_abort = 0
    last_loss = 999999999 # startindex
    last_epoch = 0
    allowed_abort_reset = 5
    cur_abort_reset = 0
    
    activation_funcs = ["ELU", "Hardshrink", "Hardsigmoid", "Hardtanh", "Hardswish",
                        "LeakyReLU", "LogSigmoid", "PReLU", "ReLU", "ReLU6", "RReLU",
                        "SELU", "CELU", "GELU", "Sigmoid", "SiLU", "Softplus", "Softshrink",
                        "Softsign", "Tanh", "Tanhshrink", "Softmin", 'Softmax', 'Softmax2d',
                        "LogSoftmax"
                        ]
    
    dropout_layers = ["Alphadropout", "Dropout"]
    
    activation_funcs.remove("Softmax2d")
    activation_funcs.remove("Softmin")
    activation_funcs.remove("Softmax")
    activation_funcs.remove("LogSoftmax")
    
    #python -m visdom.server
    global plotter
    plotter = VisdomLinePlotter(env_name='Neural_Network_Distillationprocess')
    
    # determine the supported device
    def get_device():
        if torch.cuda.is_available() and use_gpu:
            device = torch.device('cuda:0')
        else:
            device = torch.device('cpu') # don't have GPU
        return device
    
    
    # convert a df to tensor to be used in pytorch
    def df_to_tensor(df):
        device = get_device()
        return torch.from_numpy(df.values).float().to(device)
    
    class VisdomLinePlotter(object):
        """Plots to Visdom"""
        def __init__(self, env_name='main'):
            self.viz = Visdom()
            self.env = env_name
            self.plots = {}
        def plot(self, var_name, split_name, title_name, x, y):
            if var_name not in self.plots:
                self.plots[var_name] = self.viz.line(X=np.array([x,x]), Y=np.array([y,y]), env=self.env, opts=dict(
                    legend=[split_name],
                    title=title_name,
                    xlabel='Epochs',
                    ylabel=var_name
                ))
            else:
                self.viz.line(X=np.array([x]), Y=np.array([y]), env=self.env, win=self.plots[var_name], name=split_name, update = 'append')
    
    
    class MeinNetz(nn.Module):
        def __init__(self, input_num, hidden_num, output_num):
            global current_model
            super(MeinNetz, self).__init__()
            #torch.save(MeinNetz.state_dict(self), PATH)
    
            self.training = True
            self.index = 1
            self.configuration = {"last_out_features": output_num,
                                  "next_out_features": "",
                                  "min_hidden_neuron": 2,
                                  "max_hidden_neuron": 10,
                                  "chance_for_dropout": 20, # 20%
                                  "chance_hidden_norm": 5 # 20%
                                  }
            self.configuration["next_out_feature"] = random.randint(self.configuration["min_hidden_neuron"], self.configuration["max_hidden_neuron"])
            self.forwarding_struc = torch.nn.Sequential()
    
            # Add normalized Input Layer # Add Activation
            MeinNetz.add_layer(self, type="Linear", in_features=input_num, out_features=self.configuration["next_out_feature"], bias=True if random.randint(0,1) == 1 else False, norm=True)
            MeinNetz.add_activation(self, func=random.choice(activation_funcs), inplace=True if random.randint(0,1) == 1 else False)
    
            for i in range(1, hidden_num+1):
                # Add normalized Hidden Layer # Add Activation
                self.configuration["last_out_features"] = self.configuration["next_out_feature"]
                self.configuration["next_out_feature"] = random.randint(self.configuration["min_hidden_neuron"], self.configuration["max_hidden_neuron"])
    
                MeinNetz.add_layer(self, type="Linear", in_features=self.configuration["last_out_features"], out_features=self.configuration["next_out_feature"], bias=True if random.randint(0,1) == 1 else False, norm=True if random.randint(1,100) <= self.configuration["chance_hidden_norm"] else False)
                MeinNetz.add_activation(self, func=random.choice(activation_funcs), inplace=True if random.randint(0,1) == 1 else False)
                if random.randint(1,100) <= self.configuration["chance_for_dropout"]:
                    MeinNetz.add_dropout(self, func=random.choice(dropout_layers), p=random.randint(1, 5)/10)
    
            # Add Output Layer
            MeinNetz.add_layer(self, type="Linear", in_features=self.configuration["next_out_feature"], out_features=output_num, bias=True if random.randint(0,1) == 1 else False, norm=False)
            # Add Activation
            MeinNetz.add_activation(self, func=random.choice(activation_funcs), inplace=True if random.randint(0,1) == 1 else False)
            
            for p in self.parameters():
                p.data.fill_(random.randint(30, 60) / 100)
    
        def add_layer(self, **kwargs):
            if kwargs["norm"] == True:
                self.forwarding_struc.add_module(str(self.index), nn.LayerNorm(kwargs["in_features"]))
                self.index += 1
    
            if kwargs["type"] == "Linear":
                self.forwarding_struc.add_module(str(self.index),  nn.Linear(kwargs["in_features"], kwargs["out_features"], kwargs["bias"]))
                self.index += 1
    
        def add_activation(self, **kwargs):
            default_parameterlist = {'alpha': 1.0, 'inplace': True, 'lambd': 0.5, 'min_val': -1,
                                     'max_val': 1, 'negative_slope': 1e-2, 'num_parameters': 1, 'init': 0.25,
                                     'lower': 0.125, 'upper': 1/3, 'beta': 1, 'treshold': 20, 'dim': None}
    
            for key in default_parameterlist:
                if key not in kwargs:
                    kwargs[key] = default_parameterlist[key]
    
            if kwargs["func"] in activation_funcs:
                if kwargs["func"] == "ELU":
                        self.forwarding_struc.add_module(str(self.index), nn.ELU(kwargs["alpha"], kwargs["inplace"]))
                        self.index += 1
                elif kwargs["func"] == "Hardshrink":
                        self.forwarding_struc.add_module(str(self.index), nn.Hardshrink(kwargs["lambd"]))
                        self.index += 1
                elif kwargs["func"] == "Hardsigmoid":
                        self.forwarding_struc.add_module(str(self.index), nn.Hardsigmoid(kwargs["inplace"]))
                        self.index += 1
                elif kwargs["func"] == "Hardtanh":
                        self.forwarding_struc.add_module(str(self.index), nn.Hardtanh(kwargs["min_val"], kwargs["max_val"], kwargs["inplace"]))
                        self.index += 1
                elif kwargs["func"] == "Hardswish":
                        self.forwarding_struc.add_module(str(self.index), nn.Hardswish(kwargs["inplace"]))
                        self.index += 1
                elif kwargs["func"] == "LeakyReLU":
                        self.forwarding_struc.add_module(str(self.index), nn.LeakyReLU(kwargs["negative_slope"], kwargs["inplace"]))
                        self.index += 1
                elif kwargs["func"] == "LogSigmoid":
                        self.forwarding_struc.add_module(str(self.index), nn.LogSigmoid())
                        self.index += 1
                elif kwargs["func"] == "PReLU":
                        self.forwarding_struc.add_module(str(self.index), nn.PReLU(kwargs["num_parameters"], kwargs["init"]))
                        self.index += 1
                elif kwargs["func"] == "ReLU":
                        self.forwarding_struc.add_module(str(self.index), nn.ReLU(kwargs["inplace"]))
                        self.index += 1
                elif kwargs["func"] == "ReLU6":
                        self.forwarding_struc.add_module(str(self.index), nn.ReLU6(kwargs["inplace"]))
                        self.index += 1
                elif kwargs["func"] == "RReLU":
                        self.forwarding_struc.add_module(str(self.index), nn.RReLU(kwargs["lower"], kwargs["upper"], kwargs["inplace"]))
                        self.index += 1
                elif kwargs["func"] == "SELU":
                        self.forwarding_struc.add_module(str(self.index), nn.SELU(kwargs["inplace"]))
                        self.index += 1
                elif kwargs["func"] == "CELU":
                        self.forwarding_struc.add_module(str(self.index), nn.CELU(kwargs["alpha"], kwargs["inplace"]))
                        self.index += 1
                elif kwargs["func"] == "GELU":
                        self.forwarding_struc.add_module(str(self.index), nn.GELU())
                        self.index += 1
                elif kwargs["func"] == "Sigmoid":
                        self.forwarding_struc.add_module(str(self.index), nn.Sigmoid())
                        self.index += 1
                elif kwargs["func"] == "SiLU":
                        self.forwarding_struc.add_module(str(self.index), nn.SiLU())
                        self.index += 1
                elif kwargs["func"] == "Softplus":
                        self.forwarding_struc.add_module(str(self.index), nn.Softplus(kwargs["beta"], kwargs["treshold"]))
                        self.index += 1
                elif kwargs["func"] == "Softshrink":
                        self.forwarding_struc.add_module(str(self.index), nn.Softshrink(kwargs["lambd"]))
                        self.index += 1
                elif kwargs["func"] == "Softsign":
                        self.forwarding_struc.add_module(str(self.index), nn.Softsign())
                        self.index += 1
                elif kwargs["func"] == "Tanh":
                        self.forwarding_struc.add_module(str(self.index), nn.Tanh())
                        self.index += 1
                elif kwargs["func"] == "Tanhshrink":
                        self.forwarding_struc.add_module(str(self.index), nn.Tanhshrink())
                        self.index += 1
                elif kwargs["func"] == "Softmin":
                        self.forwarding_struc.add_module(str(self.index), nn.Softmin(kwargs["dim"]))
                        self.index += 1
                elif kwargs["func"] == "Softmax":
                        self.forwarding_struc.add_module(str(self.index), nn.Softmax(kwargs["dim"]))
                        self.index += 1
                elif kwargs["func"] == "Softmax2d":
                        self.forwarding_struc.add_module(str(self.index), nn.Softmax2d())
                        self.index += 1
                elif kwargs["func"] == "LogSoftmax":
                        self.forwarding_struc.add_module(str(self.index), nn.LogSoftmax(kwargs["dim"]))
                        self.index += 1
    
        def add_dropout(self, **kwargs):
            default_parameterlist = {'p': 0.5, 'inplace': False}
            for key in default_parameterlist:
                if key not in kwargs:
                    kwargs[key] = default_parameterlist[key]
    
            if kwargs["func"] in dropout_layers:
                if kwargs["func"] == "AlphaDropout":
                        self.forwarding_struc.add_module(str(self.index), nn.AlphaDropout(kwargs["p"], kwargs["inplace"]))
                        self.index += 1
                elif kwargs["func"] == "Dropout":
                        self.forwarding_struc.add_module(str(self.index), nn.Dropout(kwargs["p"], kwargs["inplace"]))
                        self.index += 1
    
        def forward(self, x):
            return self.forwarding_struc(x)
    
    
    useddevice = get_device()
    if os.path.isfile(PATH) and False:
        netz = torch.load(PATH)
    else:
        netz = MeinNetz(8, random.randint(1, 7), 1).to(useddevice)
    
    if optimizer_model == 0:
        optimizer = optim.SGD(netz.parameters(), lr=learningrate, momentum=sgd_momentum)
    elif optimizer_model == 1:
        optimizer = optim.ASGD(netz.parameters(), lr=learningrate)
    elif optimizer_model == 2:
        optimizer = optim.Adam(netz.parameters(), lr=learningrate)
    elif optimizer_model == 3:
        optimizer = optim.Adamax(netz.parameters(), lr=learningrate)
    elif optimizer_model == 4:
        optimizer = optim.Adagrad(netz.parameters(), lr=learningrate)
    
    scheduler = lr_scheduler.StepLR(optimizer, step_size=.001, gamma=0.05)
    
    readCSV_train = pd.read_csv('train.csv')
    X_train = df_to_tensor(pd.DataFrame(readCSV_train, columns=['Feed', 'Reflux', 'TEvaporator', 'A', 'B','C','D','E']))
    y_train = df_to_tensor(pd.DataFrame(readCSV_train, columns=['Distillate']))
    
    for epoch in range(n_epochs):
        permutation = torch.randperm(X_train.size()[0]).to(useddevice)
        # Iterate X batch size
        for i in range(0, X_train.size()[0], batch_size):
            indices = permutation[i:i + batch_size]
            batch_x, batch_y = X_train[indices], y_train[indices]
            if (str(useddevice) == "cpu"):
                input = Variable(torch.FloatTensor(batch_x), requires_grad=True)
            else:
                input = Variable(torch.cuda.FloatTensor(batch_x), requires_grad=True)
    
            out = netz(input)
    
            if (str(useddevice) == "cpu"):
                target = Variable(torch.FloatTensor(batch_y), requires_grad=True)
            else:
                target = Variable(torch.cuda.FloatTensor(batch_y), requires_grad=True)
    
            criterion = nn.MSELoss(None, None, 'sum')
            loss = criterion(out, target)/batch_size
            loss.backward()
        optimizer.step()
        netz.zero_grad()
        scheduler.step()
    
        last_epoch += 1
    
        if last_loss < 5:
            plotter.plot('loss', 'train', 'Class Loss', epoch, loss.item())
    
        if epoch%300 == 0:
            torch.save(netz, PATH)
            print(target)
            print(out)
            print(epoch, last_loss, loss)
    
        if loss.item() > 0 and loss.item() < last_loss:
            #print(out[35:, :5][:, :9])
            last_loss = loss.item()
            cur_abort = 0
        else:
            cur_abort += 1
            if cur_abort >= max_abort and cur_abort_reset <= allowed_abort_reset:
                cur_abort = 0
                cur_abort_reset += 1
                last_loss = loss.item()
    
        if (loss.item() > 0.09 and last_epoch%300 == 0) or loss.item() > 0.005 and cur_abort >= max_abort:
            last_epoch = 0
            cur_abort = 0
            last_loss = 9999999
            netz = MeinNetz(8, random.randint(3, 7), 1).to(useddevice)
            if optimizer_model == 0:
                optimizer = optim.SGD(netz.parameters(), lr=learningrate, momentum=sgd_momentum)
            elif optimizer_model == 1:
                optimizer = optim.ASGD(netz.parameters(), lr=learningrate)
            elif optimizer_model == 2:
                optimizer = optim.Adam(netz.parameters(), lr=learningrate)
            elif optimizer_model == 3:
                optimizer = optim.Adamax(netz.parameters(), lr=learningrate)
            elif optimizer_model == 4:
                optimizer = optim.Adagrad(netz.parameters(), lr=learningrate)
            scheduler = lr_scheduler.StepLR(optimizer, step_size=.01, gamma=0.1)
    Alles anzeigen
  • DllStruct to bitmap

    • Texos
    • 28. Mai 2020 um 00:08

    Hey,

    weiß zufällig jemand wie man ein DllStruct in eine Bitmap umwandelt?

    DllStruct wird erstellt durch:

    Code
    $tPixel = DllStructCreate("dword[" & $iWidth * $iHeight & "];", DllStructGetData($tBitmapData, "Scan0"))

    Danach werden die Pixel je nach Algorithmus durch andere ersetzt und dafür bräuchte ich eine Möglichkeit wie man jetzt auf einfachem Wege das Struct nochmals als gleicher Typ der Variable $tBitmapData neu zuweist. ImageSaveToStream bekomm ich nicht zum Laufen, zeigt alles schwarz an

  • RGB (Grün)Farbenmischer besserer Speed möglich?

    • Texos
    • 10. Mai 2020 um 02:37

    Hat sich schon erledigt.

    Code
    Func get_gcolor_checksum($start_x, $start_y, $end_x, $end_y)
        _GDIPlus_Startup()
    
        Local $hBMP = _ScreenCapture_Capture("", $start_x, $start_y, $end_x, $end_y)
        Local $pBitmap = _GDIPlus_BitmapCreateFromHBITMAP($hBMP)
    
        Local $iWidth = abs($end_x-$start_x+1)
        Local $iHeight = abs($end_y-$start_y+1)
        Local $iSum = $iWidth*$iHeight
        Local $iGreen = 0
    
        Local $tBitmapData = _GDIPlus_BitmapLockBits($pBitmap, 0, 0, $iWidth, $iHeight, $GDIP_ILMREAD, $GDIP_PXF32RGB)
        Local $tPixel = DllStructCreate("dword[" & $iWidth * $iHeight & "];", DllStructGetData($tBitmapData, "Scan0"))
        For $iX = 0 To $iWidth - 1
            For $iY = 0 To $iHeight - 1
                $iGreen += Dec(StringMid(Hex(BitAND(DllStructGetData($tPixel, 1, $iY * $iWidth + $iX + 1), 0xFFFFFF), 6), 3, 2))
            Next
        Next
        _GDIPlus_BitmapUnlockBits($pBitmap, $tBitmapData)
    
        _GDIPlus_BitmapDispose($pBitmap)
        _WinAPI_DeleteObject($hBMP)
        _GDIPlus_Shutdown()
        Return "00" & Hex(BitAND($iGreen/$iSum, 255), 2) & "00"
    EndFunc
    Alles anzeigen
  • RGB (Grün)Farbenmischer besserer Speed möglich?

    • Texos
    • 10. Mai 2020 um 00:59

    Moin,

    Weiß jemand zufällig wie ich diesen Code in der Berechnung schneller machen könnte? Gibt es vlt. Dll's auf die man da zurückgreifen kann oder habt ihr eine Idee?

    Die Funktion ermittelt in einem angegebenen Bereich die Grünwerte und verrechnet diese zu einem "Mittelwert".

    Die Funktion benötigt derzeit für ein (5x5 Feld 25 Pixel) 643ms und für ein (10x10 Feld 100 Pixel) 2565ms

    Edit: Durch ändern der inneren Funktion auf $green += Dec(StringMid(PixelGetColor($x, $y), 3, 2)) komme ich auf 2069ms bei 100 Pixel

    Code
    Func get_gcolor_checksum($start_x, $start_y, $end_x, $end_y)
        Local $sum = abs($end_x-$start_x+1)*abs($end_y-$start_y+1)
        Local $green = 0
        For $y = $start_y To $end_y
            For $x = $start_x To $end_x
                $green += Dec(StringMid(PixelGetColor($x, $y), 3, 2))
            Next
        Next
        Return "00"&Hex(BitAND($green/$sum, 255), 2)&"00"
    EndFunc
  • Winkelfunktionen - Richtungspfeile am Rand

    • Texos
    • 26. März 2016 um 10:44

    Hui, das sieht super aus, super Beispielcode und danke auch an die anderen. :)

  • Winkelfunktionen - Richtungspfeile am Rand

    • Texos
    • 25. März 2016 um 12:36

    Nicht falsch verstehen, ich schau mir deinen Beitrag später in Ruhe an, wollte aber noch was beifügen das mir noch eingefallen ist. Bin noch auf der Arbeit, ;)

    Andy: Der Richtungszeiger soll nur am Ende als kleines Symbol dargestellt werden, jenachdem wie der Winkel zum Anderen Spieler ist. Er soll nicht auf dem Radius liegen sondern an den Kanten des Quadrats.

  • Winkelfunktionen - Richtungspfeile am Rand

    • Texos
    • 25. März 2016 um 10:33

    Damit würde ich die Diagonale bekommen die bis in die Ecke geht, fehlt nurnoch der Raum dazwischen den man mit PI im laufschritt verkleinern könnte jenachdem welchen winkel man hat?

    Dateien

    pft.gif 5,92 kB – 523 Downloads
  • Winkelfunktionen - Richtungspfeile am Rand

    • Texos
    • 25. März 2016 um 08:18

    Moin moin,

    Mir fällt leider keine direkte Überschrift dazu ein, ich versuchs euch aber mal zu erklären.

    Ich habe ein Quadrat und die Mitte des Quadrads gibt die Position des Spielers an. Das Quadrad ist unterteilt in mehrere kleinere Quadrate (Felder). Spieler die sich außerhalb der Sichtweite befinden würde ich gerne Kennzeichnen und mit einem Richtungspfeil anzeigen lassen.

    Was ich besitze: Den Winkel zum Spieler hin, die Pixellänge in 180* bzw 90* sagen wir einfach mal 200px. Das Problem jedoch ist, zeichne ich jetzt den Pfeil und der spieler hat einen Winkel von 135 (Diagonal linksoben) Dann würde der Pfeil miten im Quadrad iegen und nicht in der Ecke wo es hin soll.

    Jedes Feld im "großen Quadrat" ist 20x20px

    Hättet ihr ne möglichkeit dies zu lösen?

  • AutoIT MsgBox Problem

    • Texos
    • 4. Januar 2014 um 18:53

    was soll der Code bewirken? 8|

  • Multithreading in autoit

    • Texos
    • 1. November 2013 um 15:57
    Zitat von minx

    Benutze den OnEvent-Modus für die Verarbeitung / update während der Berechnung / arbeite die Rechnung in die Schleife ein.

    Die GUI soll eben auch dann während der Berechnung noch auf andere Buttons reagieren können und dann seperat eben noch kleine Funktionen ausführen können während das große am laufen ist.

  • Multithreading in autoit

    • Texos
    • 1. November 2013 um 15:33

    Hey leute :S

    Ist es möglich, autoit multithread-fähig zu machen?

    Sagen wir, es befinden sich 3 Funktionen im Script:

    [autoit]


    Func _test1()
    ConsoleWrite("test1"&@CRLF)
    Sleep(5000)
    EndFunc

    [/autoit][autoit][/autoit][autoit]

    Func _test2()
    ConsoleWrite("test2"&@CRLF)
    Sleep(5000)
    EndFunc

    [/autoit][autoit][/autoit][autoit]

    Func _test3()
    ConsoleWrite("test3"&@CRLF)
    Sleep(5000)
    EndFunc

    [/autoit]


    Funktionsaufruf _test1(), _test2(), _test3() bräuchte also minimal 15sek. wegen dem internen Sleep.
    Ist es möglich, Funktionen Parallel ablaufen zu lassen?
    Weshalb ich das frage:
    Wenn ich eine GUI basteln möchte in der ein Button ist der eine lange Berechnung durchführt, sollte trotzdem die GUI auch noch für andere Bereiche zugängig sein und nicht total abschalten bis die Funktion durchgelaufen ist.
    Lg!

    Edit: Über externe Scripts diese Funktionen einzeln aufzurufen wäre möglich, doch genau das möchte ich nicht, es soll alles in einem Script passieren ;)
    Dachte da vlt. an dll callen oder so etwas, aber keine Ahnung ob das geht, deswegen wollte ich erstmal euch fragen ;)

  • Wegfindung

    • Texos
    • 24. August 2013 um 18:32

    Du hast die ganzen Fields doch in einem Array gespeichert? Wenn nicht, ab ins Array damit.(x,y)
    [0]=x
    [1]=y
    [2]=begehbar oder nicht

    Jedes Feld das eingefügt wird und das "begehbar" ist, im Array den Indexwert [2] auf True setzen, ansonsten False
    Da es ja nur eine Wegstrecke gibt, kannst du dann ganz einfach immer den Wert True auslesen und ein Neues Array mit den Koords anlegen.

    Hoffe habe nix übersehen :)

    Lg

  • Problem mit _HexToString

    • Texos
    • 27. Mai 2013 um 18:29

    Ich möchte mich in Wireshark vertiefen und teste ein paar Spiele durch. Derzeit Diablo 2 Lord of Destruction.

  • Problem mit _HexToString

    • Texos
    • 27. Mai 2013 um 18:12

    also verschlüsselt kann da dann nix sein oder so?

    edit:

    Hexacode: 0xFF5034000000000036385849505832440D00000045446564C0A8B21588FFFFFF0704000007040000444555004765726D616E7900
    Text: ÿP4�����68XIPX2D���EDedÀ¨²ˆÿÿÿ����DEU�Germany�

  • Problem mit _HexToString

    • Texos
    • 27. Mai 2013 um 17:52

    Hexacode: 0xFF331E000400008000000000626E7365727665722D443244562E696E6900

    Text: ?ÿ3���€����bnserver-D2DV.ini�

    woran kann das liegen?
    bzw wie komme ich an den kompletten text?

  • WinHttp Cookies

    • Texos
    • 9. April 2013 um 16:23

    Bitteschön

    Aufgerufen:

    [autoit]

    _WinHTTP_Session_Cookie_Add($hSession, 'www.google.de', 'PHPSESSID=123456')

    [/autoit]

    Funktion:

    Spoiler anzeigen
    [autoit]

    Func _WinHTTP_Session_Cookie_Add(ByRef $hSession, $sHost, $sCookie)
    Local $iPort, $hConnect, $hRequest, $sTempName
    Local $hTCP_Server, $hTCP_Client
    Local $sTCP_Read, $sTCP_Request, $sTCP_Response

    [/autoit] [autoit][/autoit] [autoit]

    TCPStartup()
    Do
    $iPort = Random(30000, 65000, 1)
    $hTCP_Server = TCPListen('127.0.0.1', $iPort)
    Until $hTCP_Server <> -1
    TCPCloseSocket($hTCP_Server)
    TCPShutdown()

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Do
    $sTempName &= Chr(Random(65, 90, 1))
    Until Not FileExists(@TempDir & '\' & $sTempName & '.au3')

    [/autoit] [autoit][/autoit] [autoit]

    FileWrite(@TempDir & '\' & $sTempName & '.au3', _
    "Global $sHost = $CmdLine[1], $sCookie = $CmdLine[2], $iPort = $CmdLine[3]" & @CRLF & _
    "Global $hTCP_Server, $hTCP_Client, $sTCP_Read, $sTCP_Request" & @CRLF & _
    "TCPStartup()" & @CRLF & _
    "$hTCP_Server = TCPListen('127.0.0.1', $iPort)" & @CRLF & _
    "Do" & @CRLF & _
    "$hTCP_Client = TCPAccept($hTCP_Server)" & @CRLF & _
    "Sleep(10)" & @CRLF & _
    "Until $hTCP_Client <> -1" & @CRLF & _
    "Do" & @CRLF & _
    "$sTCP_Read = TCPRecv($hTCP_Client, 1024)" & @CRLF & _
    "If @error Then ExitLoop" & @CRLF & _
    "$sTCP_Request &= $sTCP_Read" & @CRLF & _
    "Until StringInStr($sTCP_Request, @CRLF & @CRLF)" & @CRLF & _
    "If StringRight($sCookie, 1) <> ';' Then $sCookie &= ';'" & @CRLF & _
    "TCPSend($hTCP_Client, 'HTTP/1.1 200 OK' & @CRLF & _" & @CRLF & _
    "'Host: ' & $sHost & @CRLF & _" & @CRLF & _
    "'Set-Cookie: ' & $sCookie & _" & @CRLF & _
    "' expires=Thu, 31-Dec-2099 00:00:01 GMT; path=/; domain=' & $sHost & @CRLF & @CRLF)" & @CRLF & _
    "Sleep(1000)" & @CRLF & _
    "TCPCloseSocket($hTCP_Client)" & @CRLF & _
    "TCPCloseSocket($hTCP_Server)" & @CRLF)

    [/autoit] [autoit][/autoit] [autoit]

    Run('"' & @AutoItExe & '" /AutoIt3ExecuteScript "' & @TempDir & '\' & $sTempName & '.au3' & '" "' & $sHost & '" "' & $sCookie & '" "' & $iPort & '" ')

    [/autoit] [autoit][/autoit] [autoit]

    _WinHTTP_SetProxy($hSession, '127.0.0.1', $iPort)
    $hConnect = _WinHttpConnect($hSession, $sHost)
    _WinHttpSimpleRequest($hConnect, 'GET', '/')
    _WinHttpCloseHandle($hConnect)
    _WinHTTP_SetProxy($hSession)

    [/autoit] [autoit][/autoit] [autoit]

    Do
    FileDelete(@TempDir & '\' & $sTempName & '.au3')
    Until Not FileExists(@TempDir & '\' & $sTempName & '.au3')
    EndFunc ;==>_WinHTTP_Session_Cookie_Add

    [/autoit] [autoit][/autoit] [autoit]

    Func _WinHTTP_SetProxy($hSession, $sIP = Default, $sPort = Default)
    Local $tWINHTTP_PROXY_INFO[2]
    Local $iAccesstype = $WINHTTP_ACCESS_TYPE_NAMED_PROXY, _
    $sProxyChars = $sIP & ':' & $sPort

    [/autoit] [autoit][/autoit] [autoit]

    $tWINHTTP_PROXY_INFO[0] = DllStructCreate("DWORD dwAccessType;ptr lpszProxy;ptr lpszProxyBypass;")
    $tWINHTTP_PROXY_INFO[1] = DllStructCreate('wchar proxychars[' & StringLen($sProxyChars) + 1 & ']; wchar proxybypasschars[10]')

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    If IsKeyword($sIP) Then
    $sProxyChars = ''
    $iAccesstype = $WINHTTP_ACCESS_TYPE_DEFAULT_PROXY
    EndIf

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    DllStructSetData($tWINHTTP_PROXY_INFO[0], "dwAccessType", $iAccesstype)
    DllStructSetData($tWINHTTP_PROXY_INFO[0], "lpszProxy", DllStructGetPtr($tWINHTTP_PROXY_INFO[1], 'proxychars'))
    DllStructSetData($tWINHTTP_PROXY_INFO[0], "lpszProxyBypass", DllStructGetPtr($tWINHTTP_PROXY_INFO[1], 'proxybypasschars'))
    DllStructSetData($tWINHTTP_PROXY_INFO[1], "proxychars", $sProxyChars)
    DllStructSetData($tWINHTTP_PROXY_INFO[1], "proxybypasschars", "localhost")

    [/autoit] [autoit][/autoit] [autoit]

    _WinHttpSetOption($hSession, $WINHTTP_OPTION_PROXY, $tWINHTTP_PROXY_INFO[0])
    EndFunc ;==>_WinHTTP_SetProxy

    [/autoit]

    Edit:
    Und um einen Proxy in WinHttp einzuschleußen, kann folgende Funktion genutzt werden:

    [autoit]

    _SetProxy("xxx.xxx.xxx.xxx:yyyy", $Session)

    [/autoit][autoit][/autoit][autoit][/autoit]
    Spoiler anzeigen
    [autoit]

    Func _SetProxy($ProxyIP, $Session)
    Local $tWINHTTP_PROXY_INFO[2] = [DllStructCreate("DWORD dwAccessType;ptr lpszProxy;ptr lpszProxyBypass;"), DllStructCreate('wchar proxychars[' & StringLen($ProxyIP) + 1 & ']; wchar proxybypasschars[10]')]
    DllStructSetData($tWINHTTP_PROXY_INFO[0], "dwAccessType", $WINHTTP_ACCESS_TYPE_NAMED_PROXY)
    DllStructSetData($tWINHTTP_PROXY_INFO[0], "lpszProxy", DllStructGetPtr($tWINHTTP_PROXY_INFO[1], 'proxychars'))
    DllStructSetData($tWINHTTP_PROXY_INFO[0], "lpszProxyBypass", DllStructGetPtr($tWINHTTP_PROXY_INFO[1], 'proxybypasschars'))
    DllStructSetData($tWINHTTP_PROXY_INFO[1], "proxychars", $ProxyIP)
    DllStructSetData($tWINHTTP_PROXY_INFO[1], "proxybypasschars", "localhost")
    _WinHttpSetOption($Session, $WINHTTP_OPTION_PROXY, $tWINHTTP_PROXY_INFO[0])
    EndFunc ;==>_SetProxy

    [/autoit]

Spenden

Jeder Euro hilft uns, Euch zu helfen.

Download

AutoIt Tutorial
AutoIt Buch
Onlinehilfe
AutoIt Entwickler
  1. Datenschutzerklärung
  2. Impressum
  3. Shoutbox-Archiv
Community-Software: WoltLab Suite™