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. HassanMullah

Beiträge von HassanMullah

  • Bekomme einfache HTML Seite im IE nicht aktiviert und in den Fokus

    • HassanMullah
    • 5. November 2010 um 12:41

    Hallo zusammen,

    brauche dringend und schnell mal Eure Hilfe.

    Habe eine Test HTML Seite, welche nur 2 Eingabe Felder hat.

    Diese möchte ich gerne beschreiben oder auch daraus lesen

    Leider bekomme ich das Fenster, welches bereits geöffnet ist nicht aktivier.

    Hier mal die verschiedenen Möglichkeiten, welche ich versucht habe:

    [autoit]

    WinWaitActive("Test Waage - Windows Internet Explorer")
    WinWaitActive("[CLASS:IEFrame]")
    WinActivate("Test Waage - Windows Internet Explorer")
    WinSetState("Test Waage - Windows Internet Explorer",Default,@SW_MAXIMIZE)
    WinSetState("Test Waage - Windows Internet Explorer",Default,@SW_SHOW)
    WinSetState("Test Waage - Windows Internet Explorer",Default,@SW_ENABLE)

    [/autoit]

    Was mache ich falsch ?

    Gruss Hassan

  • Step by Step Debugging in AutoIT

    • HassanMullah
    • 3. November 2010 um 10:01

    peethebee :

    Hört sich ja gut an. Mal testen..


    Nachtrag am 09.11.2010: Ich glaube damit kann man leben

    Danke

    Gruss Hassan

  • UAC (user access control) mit AutoIT

    • HassanMullah
    • 3. November 2010 um 08:19

    AntiSpeed:

    Sorry, aber Deine Antwort verstehe ich gerade gar nicht - stehe vermutlich auf dem Schlauch.

    Bitte kurz erläutern.

    Gruss Hassan

  • Step by Step Debugging in AutoIT

    • HassanMullah
    • 3. November 2010 um 07:34

    Guten Morgen,

    gibt es in AutoIT eine Möglichkeit, das Script per z.B. Funktionstaste, oder was auch immer, Zeile für Zeile ab zu arbeiten.

    Folgender Gedankengang:

    Man hat ein AutoIT Script geschrieben, welches irgendwelche Dinge mit einem zweiten Programm macht. Jetzt wurde an dem zweiten Programm was nach - sagen wir mal einem Jahr - verändert. Plötzlich geht das alte AutoIT Script nicht mehr, und so richtig daran erinnen kann man sich vielleicht trotz Bemerkungszeilen auch nicht mehr daran, was man sich damals gedacht hat.

    Hier wäre es jetzt schön, das AutoIT Script Zeilenweise abarbeiten zu können, um zu sehen, wann es an die Wand fährt.

    Gruss Hassan

  • UAC (user access control) mit AutoIT

    • HassanMullah
    • 2. November 2010 um 13:47

    TheLuBu:

    Das ging mal in die richtige Richtung, wenn es auch noch nicht ganz passt.

    Dafür bin ich heute wegen des Artikels über das Suchprogramm Everything gestoßen. Das ist echt richtig schnell !!

    @all other:

    Sicherlich gibt es viele Dinge "die man weiss" aber es bringt mir hier nichts, das ganze so Tröpfenweise zu bekommen. Da muss doch irgendwo eine Liste im Netz stecken, die das alles listet ?(

    Trotzdem vielen Dank an alle

  • UAC (user access control) mit AutoIT

    • HassanMullah
    • 2. November 2010 um 11:58

    Hallo TheLuBu,

    vielen Dank für den Tip.

    Ich poste mal einen Auschnitt aus der Hilfe:

    Zitat

    "Windows Vista bringt neue Sicherheitsfunktionen mit, um das Ausführen von Dateien, die Administratorrechte benötigen, zu erschweren. Auch Administratoren werden jedesmal um Erlaubnis gefragt, wenn eine ausführbare Datei versucht, administrative Operationen auszuführen (wie z.B. Schreibzugriffe in die Registry unter HKEY_LOCAL_MACHINE oder ins Verzeichnis C:\Windows). Das wird als Benutzerkontensteuerung (UAC) bezeichnet."

    Hier kommen wir meiner Frage schon sehr auf die Spur.

    Gibt es eine Liste von AutoIT Operationen, welche als "administrative" bezeichnet werden können.

    Ich möchte ja das Gegenteil erreichen, also dass das Script, bzw. die EXE NICHT von UAC angetriggert wird.

    Gruss Hassan

  • UAC (user access control) mit AutoIT

    • HassanMullah
    • 2. November 2010 um 10:33

    Ich habe selbst schon eine Teillösung gefunden:

    http://www.winfaq.de/faq_html/Conte…p?h=tip2534.htm


    Laut verschiedenen Foreneinträgen scheint das nicht immer zu gehen, jedoch habe ich das Gefühl, das man hier auch eventuelle abhängige Dateien mit berücksichtigen muss.

    Aber mal eine ganz andere Frage zu UAC.

    Ich habe heute meine Computeraccount vom Administrator zum Benutzer heruntergestuft. Wenn ich z.B. als dieser normale Benutzer die Datei "Bildschirm-Lineal.au3" in eine EXE kompiliere, und diese dann ausführe, bekomme ich KEINE UAC Anzeige. Ich habe die EXE NICHT wie oben beschrieben in der DB bekannt gemacht.

    Von daher würde mich mal interessieren, welche Bedingungen in einer EXE vorhanden sein müssen, damit UAC zu ziehen beginnt ?

    Gruss Hassan

  • UAC (user access control) mit AutoIT

    • HassanMullah
    • 2. November 2010 um 07:46

    Guten Morgen,

    nachdem ich über die Formumssuche nicht wirklich was gefunden habe, hier mal folgendes Fragen

    Ich erstelle mit AutoIT zwei Script/EXE, welche NUR aus einer INI Datei Werte auslesen, bzw. zurück schreiben. Die Aufgabe der EXE ist einer Firma XYZ bekannt, und von dieser ist die EXE auch freigegeben, d.h. in deren Netzwerk "erlaubt"

    Kann ich diese EXE Windows Vista / Windows 7 "bekannt machen", damit UAC nicht anspringt.

    Folgender Hintergrund

    Wir haben eine Java Anwendung (btw: hier ist es ja auch eine java.exe oder javaw.exe, welche gestartet wird und von UAV nicht "gestoppt" wird), welche wenn Sie gestartet ist, über Control Buttons, die AutoIT EXEcutables starten soll.

    Hier der logische Workflow:

    • Java startet und erzeugt aus einer remoten DB eine lokale INI
    • Java startet 1. AutoIT EXE, welche aus lokaler INI liest und eine Aktion damit ausführt und danach Werte in die INI zurückschreibt
    • Java startet 2. AutoIT EXE, welche ebenfalls aus lokaler INI liest und eine Aktion damit ausführt und danach Werte in die INI zurückschreibt
    • Java liest lokale INI aus und schreibt in die DB zurück.

    Jetzt startet unsere Java Anwendung unter Windows 7 "ohne UAC", aber wenn ich dann von dort aus die AutoIT EXE starten möchte, "gehe ich mal davon aus", das UAV hochpoppt.

    Kann man irgendwo eine Liste definieren, welche EXE von UAC ignoriert werden ?

    Gruss Hassan

  • Wie erstellt man einen einfach Debug Output in ein Textfile

    • HassanMullah
    • 26. Oktober 2010 um 15:39

    Hallo Ihr Beiden,

    ich habe mir das mal angeschaut.

    Xenobiologist : Soweit ich das richtig interpretiere, muss ich für jede Zeile einzeln, die ich wissen will, mit den Befehlen umgehen, oder ? Das wäre dann nicht die Lösung, die ich suche.

    @Milla: Die "Technik" kommt dem was ich suche sehr nahe, das Ergebnis leider jedoch nicht.
    Also so einen "einfachen" Knopf drücken und dann ALLES debuggen was kommt, ist das was ich suche.

    Ich habe mal kurz folgendes Script zusammen geklopft:

    [autoit]

    Dim $var1, $var2, $var3, $var4
    $var1 = "2"
    $var2 = "4"
    For $i = 0 To 5 Step 1
    $var3 = $i * $var1 + $var2
    $var4 = $var3 * $i
    MsgBox(0, "Info", "var3 = " & $var3 & @CRLF & "var4 = " & $var4, 1)
    Next
    MsgBox(0, "Info", "Fertig", 5)

    [/autoit]

    An den Messagboxen werden pro Durchlauf unterschiedliche Werte angezeigt.

    Wenn ich jetzt via Tools => Trace: Add Trace Lines aktiviere, sieht der Output so aus:

    Spoiler anzeigen
    Code
    >"C:\Program Files (x86)\AutoIt3\SciTE\AutoIt3Wrapper\AutoIt3Wrapper.exe" /run /prod /ErrorStdOut /in "Z:\PAKETIERUNG\WORK\autoit\AutoIT Scripte\test.au3" /autoit3dir "C:\Program Files (x86)\AutoIt3" /UserParams    
    +>15:32:54 Starting AutoIt3Wrapper v.2.0.1.24    Environment(Language:0407  Keyboard:00000407  OS:WIN_7/  CPU:X64 OS:X64)
    >Running AU3Check (1.54.19.0)  from:C:\Program Files (x86)\AutoIt3
    +>15:32:55 AU3Check ended.rc:0
    >Running:(3.3.6.1):C:\Program Files (x86)\AutoIt3\autoit3_x64.exe "Z:\PAKETIERUNG\WORK\autoit\AutoIT Scripte\test.au3"    
    >Error code: 0
    
    
    @@ Trace(3) :    $var1 = "2"
    >Error code: 0
    
    
    @@ Trace(5) :    $var2 = "4"
    >Error code: 0
    
    
    @@ Trace(7) :    For $i = 0 To 5 Step 1
    >Error code: 0
    
    
    @@ Trace(9) :    	$var3 = $i * $var1 + $var2
    >Error code: 0
    
    
    @@ Trace(11) :    	$var4 = $var3 * $i
    >Error code: 0
    
    
    @@ Trace(13) :    	MsgBox(0, "Info", "var3 = " & $var3 & @CRLF & "var4 = " & $var4, 1)
    >Error code: 0
    
    
    @@ Trace(15) :    Next
    >Error code: 0
    
    
    @@ Trace(9) :    	$var3 = $i * $var1 + $var2
    >Error code: 0
    
    
    @@ Trace(11) :    	$var4 = $var3 * $i
    >Error code: 0
    
    
    @@ Trace(13) :    	MsgBox(0, "Info", "var3 = " & $var3 & @CRLF & "var4 = " & $var4, 1)
    >Error code: 0
    
    
    @@ Trace(15) :    Next
    >Error code: 0
    
    
    @@ Trace(9) :    	$var3 = $i * $var1 + $var2
    >Error code: 0
    
    
    @@ Trace(11) :    	$var4 = $var3 * $i
    >Error code: 0
    
    
    @@ Trace(13) :    	MsgBox(0, "Info", "var3 = " & $var3 & @CRLF & "var4 = " & $var4, 1)
    >Error code: 0
    
    
    @@ Trace(15) :    Next
    >Error code: 0
    
    
    @@ Trace(9) :    	$var3 = $i * $var1 + $var2
    >Error code: 0
    
    
    @@ Trace(11) :    	$var4 = $var3 * $i
    >Error code: 0
    
    
    @@ Trace(13) :    	MsgBox(0, "Info", "var3 = " & $var3 & @CRLF & "var4 = " & $var4, 1)
    >Error code: 0
    
    
    @@ Trace(15) :    Next
    >Error code: 0
    
    
    @@ Trace(9) :    	$var3 = $i * $var1 + $var2
    >Error code: 0
    
    
    @@ Trace(11) :    	$var4 = $var3 * $i
    >Error code: 0
    
    
    @@ Trace(13) :    	MsgBox(0, "Info", "var3 = " & $var3 & @CRLF & "var4 = " & $var4, 1)
    >Error code: 0
    
    
    @@ Trace(15) :    Next
    >Error code: 0
    
    
    @@ Trace(9) :    	$var3 = $i * $var1 + $var2
    >Error code: 0
    
    
    @@ Trace(11) :    	$var4 = $var3 * $i
    >Error code: 0
    
    
    @@ Trace(13) :    	MsgBox(0, "Info", "var3 = " & $var3 & @CRLF & "var4 = " & $var4, 1)
    >Error code: 0
    
    
    @@ Trace(15) :    Next
    >Error code: 0
    
    
    @@ Trace(17) :    MsgBox(0, "Info", "Fertig", 5)
    +>15:33:06 AutoIT3.exe ended.rc:0
    >Exit code: 0    Time: 12.370
    Alles anzeigen

    Ich sehe zwar den Namen der Variablen, aber nicht den Wert.

    Ich möchte jedoch gerne auf einfache Art und Weise die Veränderung der Werte protokollieren.

    Gruss Hassan

  • Wie erstellt man einen einfach Debug Output in ein Textfile

    • HassanMullah
    • 26. Oktober 2010 um 14:48

    Hallo zusammen,

    ich finde es etwas zeitaufwändig und nervig, zum debuggen sich mit Messageboxen die Variablen anzeigen zu lassen, zumal diese "nicht druckbare Zeichen" nicht anzeigen.

    Es gibt im Include Verzeichnis eine Debug.au3. Was kann die, bzw. wie wende ich die an ?

    Folgende Idee würde mir vorschweben, vielleicht hat von Euch jemand ja sowas schon entwickelt oder angefangen:

    Man bindet eine "mydebug.au3" via include ein, welche folgende Funktion hat:

    Immer wenn eine Variable in einer Codezeile erscheint, wird in ein vorher definiertes Textfile die Zeilennummer, der Name der Variablen und der Wert der Variablen rausgepipt.

    Wenn man das dann z.B. mit notepad++ anschaut, sieht man auch die "nicht druckbare Zeichen"

    Hört sich vermutlich einfach an, wird es aber wahrscheinlich nicht sein :wacko:

    Freue mich schon auf Eurer Feedback

    Gruss Holger

  • Brauche Hilfe zur Erstellung einer Funktion zum Auslesen einer INI Datei

    • HassanMullah
    • 26. Oktober 2010 um 11:51
    Zitat von m-obi

    ... es sei denn man nutzt es öfters im Script.

    Erraten :rock:

  • Brauche Hilfe zur Erstellung einer Funktion zum Auslesen einer INI Datei

    • HassanMullah
    • 26. Oktober 2010 um 11:50
    Zitat von Milla

    Okay :P

    Ist meine Version davon ok oder wolltest du was anderes erreichen?


    Muss ich alles erst mal austesten, aber ich denke mit Deiner komme ich auch ganz gut klar.

    Danke

    Gruss Hassan

  • Brauche Hilfe zur Erstellung einer Funktion zum Auslesen einer INI Datei

    • HassanMullah
    • 26. Oktober 2010 um 11:48
    Zitat

    Also ich habs überflogen sollte aber gehen.

    freut mich :D

    Zitat

    Globale in Funktionen zu deklarieren is im normalfall nich besonders geschickt weil du dann probleme bekommen könntest falls du eine globale variable mit dem selben Namen schon hast.

    Ja, das leuchtet ein, und wird mit Sicherheit so auch vorkommen.

    Zitat

    Ratsamer sind da lokale. Die kannst du einfach am Anfang der Funktion deklarieren und gut

    Meinst Du das dann so ?:

    [autoit]

    Func _func_read_ini($var_local_ini_name, $var_local_ini_sektion, $var_local_ini_key)

    Local $var_local_ini_name, $var_local_ini_sektion, $var_local_ini_key

    $var_local_ini_wert = IniRead($var_local_ini_name, $var_local_ini_sektion, $var_local_ini_key, "Schlüssel " & $var_local_ini_key & " existiert nicht")

    If $var_local_ini_wert = "" Then
    $var_local_ini_wert = "Wert von Schlüssel " & $var_local_ini_key & " in Sektion [" & $var_local_ini_sektion & "] ist nicht vorhanden"
    MsgBox(0, "Warnung", $var_local_ini_wert, 3)
    EndIf

    Return $var_local_ini_wert
    EndFunc ;==>_func_read_ini

    [/autoit]
    Zitat

    Nach dem Return wird nichts mehr ausgeführt er springt sofort aus der Funktion.
    Wenn du mit Return was zurückgeben willst, schreibst einfach die Lokale dahinter.

    Aha, und bei mir steht da die Globale Variable

    Zitat

    Also wie in deinem Beispiel nur mit lokalen Variablen.

    Wieso Lokal ? Ich definiere die doch ganz oben als Global! (im ersten Beispiel ganz oben)

    Zitat

    wenn du ne Funktion definierst mit übergabeparameter sind die automatisch als lokale variablen deklariert in dieser funktion


    und hier kann ich mir dann die Antwort wohl selber geben, oder ?

  • Brauche Hilfe zur Erstellung einer Funktion zum Auslesen einer INI Datei

    • HassanMullah
    • 26. Oktober 2010 um 11:33
    Zitat

    Wieso so kompliziert?

    Weil ich es "einfacher" noch nicht kann :rofl:

    Gruss Hassan

  • Brauche Hilfe zur Erstellung einer Funktion zum Auslesen einer INI Datei

    • HassanMullah
    • 26. Oktober 2010 um 11:21

    Hallo zusammen,

    ich habe bisher ein Script, welches eine INI Datei ausliest.
    Jetzt möchte ich hierfür eine "neutrale" Funktion schreiben, jedoch "hänge" ich noch ein wenig ?(

    Folgendes ist mir ja bekannt:

    1.) Der Name der INI Datei
    2.) Der Sektionsname in der INI Datei
    3.) Der Schlüsselname in der INI Datei

    Alle 3 Angaben müssen variabel übergeben werden, da es in der selben INI Datei verschiedene Sektionen gibt.

    Als Ergebnis erwarte ich logischerweise den Wert, bzw verschiedene Werte (für ABC und EFG)

    Hier mal ein Beispielscript (habe es noch nicht getestet !!)

    Spoiler anzeigen
    [autoit]

    Global $var_ini_name, $var_ini_sektion, $var_ini_key, $var_ini_wert, $var_ini_wert_ABC, $var_ini_wert_EFG

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

    ;Ermittlung von INI Wert ABC
    $var_ini_name = "Datei.ini"
    $var_ini_sektion = "Sektion1"
    $var_ini_key = "Key1"

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

    $var_ini_wert = _func_read_ini($var_ini_name,$var_ini_sektion,$var_ini_key)
    $var_ini_wert_ABC = $var_ini_wert; mit $var_ini_wert_ABC möchte ich weiterarbeiten

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

    ;Ermittlung von INI Wert EFG
    $var_ini_name = "Datei.ini"
    $var_ini_sektion = "Sektion1"
    $var_ini_key = "Key2"

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

    $var_ini_wert = _func_read_ini($var_ini_name,$var_ini_sektion,$var_ini_key)
    $var_ini_wert_EFG = $var_ini_wert; mit $var_ini_wert_EFG möchte ich weiterarbeiten

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

    Func _func_read_ini($var_ini_name, $var_ini_sektion, $var_ini_key)
    $var_ini_wert = IniRead($var_ini_name, $var_ini_sektion, $var_ini_key, "Schlüssel " & $var_ini_key & " existiert nicht")
    If $var_ini_wert = "" Then
    $var_ini_wert = "Wert von Schlüssel " & $var_ini_key & " in Sektion [" & $var_ini_sektion & "] ist nicht vorhanden"
    MsgBox(0, "Warnung", $var_ini_wert, 3)
    EndIf
    Return $var_ini_wert
    EndFunc ;==>_func_read_ini

    [/autoit]

    1. Frage:

    Könnte der Aufbau so stimmen ?

    2. Frage:

    Macht es Sinn in der Funktion weiterhin Globale Variablen zu verwenden, oder sollte man hier besser Lokale Varibalen verwenden ?
    Wenn Lokale, wo kommt die Zeile der Variablendeklaration dann hin. Außerhalb der Funktion oder Innerhalb ?
    Wird hinter Return dann ein Lokale oder eine Globale Variable angegeben ?

    Ich hoffe mich halbwegs verständlich ausgedrückt zu haben 8)

    Gruss Hassan

  • Frage zu selbst gebauten Funktionen und Include Dateien

    • HassanMullah
    • 26. Oktober 2010 um 09:29

    @Milla: vielen Dank, damit kann ich was anfangen.

    Gruss Hassan

  • Frage zu selbst gebauten Funktionen und Include Dateien

    • HassanMullah
    • 26. Oktober 2010 um 09:18

    Guten Morgen,

    nachdem ich jetzt ein paar Tage mit AutoIT rumgespielt habe, stelle ich natürlich fest, das die Struktur in meinem Script wie Kraut und Rüber aussieht.

    Ich möchte von daher einige Abschnitte in Funktionen umbauen.

    Jetzt habe ich ja die Möglichkeit, die ganzen Funktionen am Ende des Scripts zu erstellen, und am Anfang des Scriptes aufzurufen.

    Da sich diverse Funktionen ja in anderen Scripten wiederholen können, wäre es ja sicherlich ratsam, diese zentral zur Verfügung zu stellen, oder ?

    Mache ich das dann als eine *.au3 Datei, welche ich dann include ? Oder denke ich hier falsch ?

    Wie werden hier die Variablen dann gesetzt ?

    Kann hier mal bitte jemand eine kleine Funktion posten - mit Variablen Deklaration - und mir zeigen, wie man das auf 2 verschiedene *.au3 Skripte aufteilt ?

    vielen Dank

    Gruss Hassan

  • Vergleich von Variablen schlägt fehl

    • HassanMullah
    • 25. Oktober 2010 um 15:57
    Zitat von misterspeed

    Dann sollte dir aber klar sein, dass das Ergebnis beim Auslesen einer anderen Anwendung auch andere Strings liefern und somit die String Nachbearbeitung anders ausschauen könnte.

    Ja das ist mir schon klar. Da ich mich aber erst seit ca. 5 Tagen mit AutoIT beschäftige, muss ich erst mal ein Grundrauschen für die möglichen Befehle entwickeln. Ich habe aus diese Session auf jeden Fall gelernt, das gleich nicht gleich gleich ist, bzw. man nicht alles glauben soll, was "mann" sieht

  • Vergleich von Variablen schlägt fehl

    • HassanMullah
    • 25. Oktober 2010 um 15:32

    Danke für die Lösung,

    habe es jedoch mit

    [autoit]

    StringTrimRight

    [/autoit]

    gelöst.

    Es geht jetzt.

    Das eigentlich Unangenehme bei meiner "Übung" ist, das beim Kunden kein Excel, sondern eine normale Anwendung vorhanden ist. Ich nehme Excel nur zum Üben

    Gruss und vielen Dank

    Hassan

  • Vergleich von Variablen schlägt fehl

    • HassanMullah
    • 25. Oktober 2010 um 15:19

    Hallo misterspeed,

    Du hattest Recht. Die Variable, welche aus der INI Datei kommt ist eine reine Zahl. Die andere Variable aus Excel enthält am Ende noch ein CRLF

    Folgendes Problem habe ich. Das Array zeigt am Ende die 13 und die 10 (also einmal CR und einmal LF)

    Wenn ich jetzt ....

    [autoit]

    Sleep(300)
    ClipPut("")
    Sleep(300)
    ClipPut("")
    Send("^c"); kopieren
    Send("^c"); kopieren
    $var_bgs_nr_anwendung = ClipGet(); Inhalt aus Zwischenablage in Variable kopieren
    $var_bgs_nr_anwendung_mod = StringStripCR($var_bgs_nr_anwendung & Chr(13))

    [/autoit]

    ... eingebe, erhalte ich statt der 13 und 10 als Ergebnis 10 und 10.

    Auch ein ...

    [autoit]

    $var_bgs_nr_anwendung_mod2 = StringStripCR($var_bgs_nr_anwendung_mod & Chr(10))

    [/autoit]

    .... bringt die 10 nicht weg.

    Was muss ich hier noch machen ?

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™