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

Beiträge von ytwinky

  • CD/DVD-Laufwerke erkennen (open-close)

    • ytwinky
    • 4. Juni 2006 um 16:02

    Au fein, das muß ich gleich mal einbasteln..
    Wie sieht denn das mit dem GUI aus, schafft das deine 1000 virtuellen Laufwerke :rofl:
    Die Schleife ist ja nur eine Schätzung ;)
    Haut das noch hin mit der Darstellung?
    Gruß
    (ein sich zum Basteln verabschiedender)
    ytwinky

  • Ausgabeumleitung eines externen 32-bit Shell-Programmes

    • ytwinky
    • 2. Juni 2006 um 23:15

    Oder du machst es, wie ich es für Route Print gezeigt habe:
    Route Print - Anwendung von _SysProg(..) & _IEPrt(..)
    Da hast du alle (Htm-)Möglichkeiten, den Text zu formatieren
    (von '<pre> bis '<table>..</table>' etc)
    Gruß
    ytwinky

  • CD/DVD-Laufwerke erkennen (open-close)

    • ytwinky
    • 2. Juni 2006 um 16:24
    Zitat

    Original von BugFix
    Braucht man dann eigentlich 'nen Therapeuten um das Trauma zu bewältigen? ?

    Nicht unbedingt, aber es erleichtert die Sache ein wenig :rofl:
    (Mein Therapeut ist lediglich 2 Jahre älter als ich und hat das auch bewältigt..)
    In der Karriereleiter Teen, Twen, Bivi, Uhu ändert sich am Status nix,
    aber das Bewußtsein leidet..
    Erst jetzt stelle ich fest, daß es nicht unbedingt Liebe auf den Ersten Blick ist,
    wenn die Mädels in der Straßenbahn mir den Vortitt lassen oder mir ihren Platz
    anbieten :D
    [Edit]
    Hier nun die angedrohte/geänderte Version:

    Spoiler anzeigen
    Code
    #include <GuiConstants.au3>
    #NoTrayIcon
    
    
    Dim $CD=DriveGetDrive("CDROM")
    If @Error Then
    	MsgBox(4096, "Ooops, tschuldigung..", "..kein CD/DVD-Laufwerk bei " &@ComputerName &" gefunden!")
    	Exit
    EndIf
    
    
    Dim $CD_Name[$CD[0]+1], $Radio_[$CD[0]+1], $i, $Lw
    GuiCreate("CD/DVD - Tray", 540, 179, -1, -1, $WS_OVERLAPPEDWINDOW+$WS_CLIPSIBLINGS)
    $Group_1=GuiCtrlCreateGroup("Laufwerk", 20, 10, 270, 150)
    For $i=1 To $CD[0]
    	$CD[$i]=StringUpper($CD[$i])
    	$CD_Name[$i]=GetNameFromRegistry($CD[$i])
    	$Radio_[$i]=GuiCtrlCreateRadio($CD[$i] &"  " &$CD_Name[$i], 40, $i*25, 200, 20)
    Next
    GUICtrlSetState($Radio_[1], $GUI_Checked)
    $Group_4=GuiCtrlCreateGroup("Schublade", 310, 10, 120, 150)
    $Auf=GuiCtrlCreateButton("Öffnen", 330, 65, 80, 20)
    	GuiCtrlSetState(-1, $GUI_FOCUS)
    $Zu=GuiCtrlCreateButton("Schließen", 330, 95, 80, 20)
    $Pic_8=GuiCtrlCreatePic(@ScriptDir &"\DVD_Lw_68x60.jpg", 450, 17, 68, 60)
    $Quit=GuiCtrlCreateButton("Ende", 450, 140, 70, 20)
    	GUICtrlSetFont(-1, 11, 800, 0)
    
    
    GuiSetState()
    While 1
    	For $i=1 To $CD[0]
    		If GUICtrlRead($Radio_[$i])=$GUI_CHECKED Then $Lw=$CD[$i]
    	Next
    	Switch GUIGetMsg()
    		Case $Auf
    			CDTray($Lw, "open")
    		Case $Zu
    			If DriveStatus($Lw)<>"READY" Then CDTray($Lw, "closed")
    		Case $GUI_EVENT_CLOSE, $Quit
    			ExitLoop
    	EndSwitch
    Wend
    Exit
    
    
    Func GetNameFromRegistry($Lw)
    	Dim $Wert, $Reg=RegRead("HKEY_LOCAL_MACHINE\SYSTEM\MountedDevices", "\DosDevices\" &$Lw), $c, $i
    	For $i=1 To StringLen($Reg)-2 Step 2
    		$c=Dec(StringMid($Reg, $i, 2))
    		If $c<>0 Then $Wert&=Chr($c)
    	Next
    	$i=StringInStr($Wert, "#")+6
    	$c=StringInStr($Wert, "__")
    	If $c<7 Then Return ""
    	Return StringReplace(StringMid($Wert, $i, $c-$i), "_", " ")
    EndFunc
    Alles anzeigen


    Gruß
    ytwinky

  • bekannte Laufwerke erkennen

    • ytwinky
    • 2. Juni 2006 um 16:16

    Hi,
    auf der Suche nach meinen USB-Sticks dachte ich, das Skript von BugFix könnte helfen.
    BugFix untersucht nämlich die Registry nur auf Beschreibungen von optischen Lauwerken.
    Doch die Registry liefert noch mehr Informationen.
    (Hier nun eine durch Mitarbeit von BugFix verbesserte Version)

    Spoiler anzeigen
    C
    ;<AutoItScript>
    #NoTrayIcon
    AutoItSetOption("MustDeclareVars", 1)
    #include <GUIConstants.au3>
    ;+----------------------------------------------------------------------------+
    ;|    Header: Bestimmen der Übergabeparameter                                 |
    ;|    ( Alles Strings(!!!), bis auf ArgC )                                    |
    ;|    FontAnzeigeCheck: |Il1 sind Alt-0124, Großes i, Kleines L, Eins         |
    Const $Author="USBSticks.au3 ©2006 by ytwinky, MD";                           |
    ;|   	EMail: PIII1kSystem-AutoIt3Forum@yahoo.de                               |
    ;|    (Tastenkombination: keine)                                              |
    ;|    AutoIt3-Version: 3.1.1.125(beta)                                        |
    ;|    Zweck : Anzeigen des eines lokalen Standard-Admin-Zugangs               |
    ;|    Tab auf 2 setzen wg. Lesbarkeit                                         |
    ;+----------------------------------------------------------------------------+
    ; == GUI generated with Koda ==
    Const $RegKey="HKEY_LOCAL_MACHINE\SYSTEM\MountedDevices\", $rv="\DosDevices\"
    Dim $i=0, $s="", $Wert, $Fehler=0, $Lw, $c, $a, $OnOff[2]=["Off", "On"], $Breite=397
    Dim $Edit
    Do
    	$i+=1
    	$Wert=RegEnumVal($RegKey, $i)
    	$Fehler=@Error
    	If $Fehler=0 Then
    	If StringInStr(StringUpper($Wert), "DOSDEVICES") Then
    		$Lw+=1
    		$c=StringRight($Wert, 2)
    		$s&=StringRight($Wert, 2) &@Tab
    ;		$s&=$OnOff[DriveStatus($c)="READY"] &"  "
    		$s&=GetNameFromRegistry($c) &@Cr
    		EndIf
    	EndIf
    Until $Fehler<>0
    GUICreate("Bekannte Laufwerke", $Breite, $Lw*14+10, 290, 125)
    $Edit=GUICtrlCreateEdit("Bitte warten..", 5, 5, $Breite-10, $Lw*14, $ES_OEMCONVERT, $WS_EX_CLIENTEDGE)
    GUISetState(@SW_SHOW)
    $a=StringSplit(StringLeft($s, StringLen($s)-1), @Cr)
    BubbleSort($a, 1, $a[0])
    $Lw=DriveGetDrive("ALL")
    GUICtrlSetData($Edit, "Vorhanden sind " &ShowIt($Lw, " ") &@CrLf &ShowIt($a))
    While 1
    	Switch GuiGetMsg()
    		Case $GUI_EVENT_CLOSE
    			ExitLoop
    		Case Else
    			;-))
    	EndSwitch
    WEnd
    Exit
    
    
    Func GetNameFromRegistry($Lw)
    	Dim $Wert, $Reg=RegRead("HKEY_LOCAL_MACHINE\SYSTEM\MountedDevices", "\DosDevices\" &$Lw), $c, $i, $va, $ve, $vr
    	For $i=1 To StringLen($Reg)-2 Step 2
    		$c=Dec(StringMid($Reg, $i, 2))
    		If $c<>0 Then $Wert&=Chr($c)
    	Next
    	; jetzt prüfen was es ist
    	; kein Wert=Festplattenpartition; "GENERIC_FLOPPY_DRIVE"; "CdRomNAME"; "CdRom&Ven_NAME"; "RemovableMedia"
    	Select
    	Case StringInStr($Wert, "GENERIC_FLOPPY_DRIVE")>0
    		Return "GENERIC FLOPPY DRIVE"
    	Case StringInStr($Wert, "CdRom")>0
    		$i=StringInStr($Wert, "#")+6
    		$c=StringInStr($Wert, "__")
    		$va=StringInStr($Wert, "&Ven_")+5
    		$ve=StringInStr($Wert, "#",0,2)
    		Select
    			Case $va=5
    				Return StringReplace(StringMid($Wert, $i, $c-$i), "_", " ")
    			Case $va>5
    				$Wert=StringReplace(StringMid($Wert, $va, $ve-$va), "&Prod_", " ")
    				$vr=StringInStr($Wert, "&Rev",0,-1)
    				Return StringReplace(StringLeft($Wert,StringLen($Wert)-($ve-$vr)) & StringReplace(StringRight($Wert, $ve-$vr), "_", ". "),"&", " ")
    		EndSelect
    	Case StringInStr($Wert, "RemovableMedia")>0
    		Return "RemovableMedia"
    	Case Else
    		Return "Festplattenpartition"
    	EndSelect
    EndFunc
    
    
    Func BubbleSort(byRef $Feld, $l, $r) ; ist Ok, mit Kleiner zusammen..
    	If IsArray($Feld) Then
    		Dim $i, $j, $y
    		For $i=$l To $r
    			For $j=$i To $r
    				If $Feld[$j]<$Feld[$i] Then
    					$y=$Feld[$i]
    					$Feld[$i]=$Feld[$j]
    					$Feld[$j]=$y
    				EndIf
    			Next
    		Next
    	Else
    		MsgBox(4096, "Fehler", "$Feld ist kein Array")
    	EndIf
    EndFunc
    
    
    Func ShowIt(byRef $Feld, $Tr=@CrLf) ; ist Ok, mit Kleiner zusammen..
    	If IsArray($Feld) Then
    		Dim $i, $p
    		For $i=1 To UBound($Feld)-1
    			If $Tr<>@CrLf Then $Feld[$i]=StringUpper($Feld[$i])
    			$p&=$Feld[$i] &$Tr
    		Next
    	Else
    		$p="$Feld ist kein Array!"
    	EndIf
    	Return $p
    EndFunc
    ;</AutoItScript>
    Alles anzeigen

    Das bringt mich auf der Suche nach meinen USB-Sticks schon
    ein Stück weiter. Lediglich zwei(FAT, 128 bzw 256 MB) lassen nur über das
    allgemeine Kriterium: DosDevice und Größe>3MB erkennen
    BugFix :
    Du hast Recht, es fehlt ein Smily für :rofl:
    [PfingstEdit]
    dies ist nun eine geänderte Version, die mir alle Laufwerke anzeigt.
    (Nebenbei habe ich jetzt auch die Optionen von StringInstr begriffen :D )
    BugFix :
    Die ganz langen Bezeichnungen der CDVD-Laufwerke auszublenden, verschenkt
    Informationen: Mein Brenner wurde ausgeliefert mit Revision H
    An diesem Protokoll ist zu erkennen, daß das Upgrade auf Version J
    vom System übernommen wurde.
    Nach dem '#' hinter der Lw-Bezeichnung steht mit Sicherheit ein Lw-Typ.
    (5:wechselbar, 8:USB, 2:Netz???)
    Lediglich die beiden USB-Sticks U: und V: hauen hier raus.
    (Beide haben feste Laufwerksbuchstaben zugeordnet bekommen, beide hatte
    ich im Optimierungswahn mal auf NTFS formatiert[sind aber wieder FAT],
    außerdem sind es meine ältesten Sticks[~2003])
    Ich glaube, mit diesen Vermutungen liege ich einigermaßen richtig.
    Wer die ZusatzInfos nicht benötigt, muß in DecodeName() die StringInstr()
    Anweisung von -1 auf -2 ändern und schon bleiben sie weg.
    Das Protokoll:

    Code
    A: GENERIC_FLOPPY_DRIVE#5&14f74304&0&0 ;OK, Diskette
    C: DosDevice ;Part. 0,1
    D: DosDevice ;Part. 1,1
    E: DosDevice ;Part. 0,2
    F: DosDevice ;Part. 1,2
    G: DosDevice ;Part. 0,3
    H: DosDevice ;Part. 1,3
    I: DosDevice ;Part. 1,4
    J: DosDevice ;Part. 1,5
    K: DosDevice ;Part. 1,6
    L: CdRom&Ven_Generic&Prod_DVD-ROM&Rev_1.0#2&12b1de20&0&000 ;virt. DVD
    M: RemovableMedia#8&87d15f4&0&RM ;MMKarte-128MB
    N: RemovableMedia#8&1fde2770&0&RM
    O: RemovableMedia#8&1d9465bd&0&RM
    P: RemovableMedia#8&35998ef&0&RM
    S: RemovableMedia#8&1014e105&0&RM ;SD-Karte 128MB
    U: DosDevice ;USB-Stick 128MB
    V: DosDevice ;USB-Stick 256MB
    W: CdRomTEAC_CD-W516EB__________________________1.0J____#5&35bcaee8&0&0.0.0
    Z: CdRomTSSTcorp_DVD-ROM_SH-D162C_______________TS01____#5&35bcaee8&0&0.1.0
    Alles anzeigen

    Unschwer zu erkennen: die Kommentare nach ; sind manuell eingefügt..
    Und hier das Skript:

    Spoiler anzeigen
    HTML
    ;<AutoItScript>
    #NoTrayIcon
    AutoItSetOption("MustDeclareVars", 1)
    ;+----------------------------------------------------------------------------+
    ;|    Header: Bestimmen der Übergabeparameter                                 |
    ;|    ( Alles Strings(!!!), bis auf ArgC )                                    |
    ;|    FontAnzeigeCheck: |Il1 sind Alt-0124, Großes i, Kleines L, Eins         |
    Const $Author="Always.au3 ©2006 by ytwinky, MD";                              |
    ;|   	EMail: PIII1kSystem-AutoIt3Forum@yahoo.de                               |
    ;|    (Tastenkombination: keine)                                              |
    ;|    AutoIt3-Version: 3.1.1.125(beta)                                        |
    ;|    Editor: SciTE 1.68, feste Schriftart                                    |
    ;|    Zweck : Anzeigen der vom System gespeicherten Laufwerke                 |
    ;|    Tab auf 2 setzen wg. Lesbarkeit                                         |
    ;+----------------------------------------------------------------------------+
    Const $RegKey="HKEY_LOCAL_MACHINE\SYSTEM\MountedDevices\", $rv="\DosDevices\"
    Dim $i=0
    Dim $s="", $Wert, $Fehler=0
    Do
    	$i+=1
    	$Wert=RegEnumVal($RegKey, $i)
    	$Fehler=@Error
    	If $Fehler=0 And StringInstr($Wert, ":") Then
    		$s&=StringRight($Wert, 2) &" " &DecodeName(StringRight($Wert, 2)) &@Lf
    	EndIf
    Until $Fehler<>0
    $Wert=StringSplit($s, @Lf)
    BubbleSort($Wert, 1, $Wert[0])
    $s=""
    For $i=1 To $Wert[0]
    	$s&= $wert[$i] &@CrLf
    Next
    _IEPrt("<html><pre>" &$s, "Registry-Info", 660, $i*18)
    
    
    Func _IEPrt($Was, $Titel, $Breite=660, $Hoehe=300, $Links=100, $Oben=100)
    	Dim $IE=ObjCreate("InternetExplorer.Application.1")
    	$IE.Navigate("about:blank")
    	$IE.Document.Title=$Titel
    	$IE.Left=$Links
      $IE.Top=$Oben
    	$IE.Width=$Breite
    	$IE.Height=$Hoehe
    	$IE.Visible=True
    	$IE.Document.Body.InnerHtml="Bitte warten.."
    	$IE.Toolbar=False
    	$IE.Menubar=False
    	$IE.Statusbar=False
    	$IE.Document.Body.InnerHtml=$Was
    EndFunc
    
    
    Func DecodeName($Lw)
    	Dim $w, $Reg=RegRead($RegKey, $rv &$Lw), $c, $i
    	For $i=1 To StringLen($Reg)-2 Step 2
    		$c=Dec(StringMid($Reg, $i, 2))
    		If $c<>0 Then $w&=Chr($c)
    	Next
    	$i=StringInStr($w, "#")
    	If $i=0 Then Return StringMid($w, 2, 9)
    	$c=StringInstr($w, "#", 0, -1)
    	Return StringMid($w, $i+1,  $c-$i-1)
    EndFunc
    
    
    Func BubbleSort(byRef $Feld, $l, $r) ; ist Ok, mit Kleiner zusammen..
    	If IsArray($Feld) Then
    		Dim $i, $j, $y
    		For $i=$l To $r
    			For $j=$i To $r
    				If $Feld[$j]<$Feld[$i] Then
    					$y=$Feld[$i]
    					$Feld[$i]=$Feld[$j]
    					$Feld[$j]=$y
    				EndIf
    			Next
    		Next
    	Else
    		MsgBox(4096, "Fehler", "$Feld ist kein Array")
    	EndIf
    EndFunc
    
    
    ;</AutoItScript>
    Alles anzeigen

    Witzige Erscheinung am Rande:
    Obwohl in der Registry alle Laufwerke sortiert abgelegt sind,
    werden sie per RegEnumVal() doch nicht soertiert ausgelesen.
    Ich hätte zum Sortieren auch meinen QSort nehmen können, aber
    den hatte ich ja schon gepostet :rofl:
    [Edit]
    Frei nach Murphy:Ein Programm ist nie fertig..
    (Schreibfehler berichtigt)
    Gruß
    ytwinky

  • DLL erstellen

    • ytwinky
    • 1. Juni 2006 um 19:52

    Hi,
    bei einer dll mußt du die auch immer mitgeben, wenn du dein Skript
    weitergibst(z.B. hier im Forum postest..)
    Selbst wenn das Skript kompiliert ist, muß die dll dabeisein.
    Praktisch bei einer include-Datei ist, daß der QuellCode einsehbar
    ist. Ich kann selber sehen was der Autor gemacht hat(und vor allen
    Dingen wie er es gemacht hat)
    Bei einer dll sollte schon eine wenigstens ausreichende Dokumentation
    dabei sein, damit der Benutzer auch weiß, wie er diese dll benutzen kann
    und überhaupt, um alle Möglichkeiten der dll zu erläutern.
    (Günter Born hat das bei seinen Modulen schön gezeigt: https://autoit.de/www.borncity.de)
    Einfachso eine Blackbox installieren und hoffen, daß die nix Böses macht,
    das ist nicht mein Ding..
    Es erinnert mich an die Zeit, wo Disketten das einzige Transportmittel
    waren. Nach dem Motto: Hier, probier mal diese Startdiskette!
    (..und mit viel Glück waren nur die Buchstaben spiegelverkehrt..)
    Ich denke, du weißt, was ich meine..
    Gruß
    ytwinky

  • CD/DVD-Laufwerke erkennen (open-close)

    • ytwinky
    • 1. Juni 2006 um 17:50

    hi peethebee,
    danke für die Erklärung..
    btw:
    Ich glaube, ich habe in meinem vorigen Posting ein paar smilies vergessen :rofl:
    Im Ernst:
    Funktioniert CDTray() mit einem virtuellen Laufwerk?
    Wenn das virtuelle Laufwerk von DriveGetDrive() als CD-Laufwerk erkannt wird,
    dann ist das Ganze kein Problem mehr(und schon fast fertig..)
    Ich habe das Skript noch weiterentwickelt, damit auch User, die einen SCSI-Tower mit mehr als zwei optischen Laufwerken besitzen, dies Skript auch benutzen können, aber ich war gestern Abend zu müde, um es fertigzustellen.
    M.a.W.: Kommt demnächst..
    Gruß
    ytwinky

  • CD/DVD-Laufwerke erkennen (open-close)

    • ytwinky
    • 1. Juni 2006 um 11:04

    Hi Bugfix,
    ich bin nicht fehlerfrei, wie viele andere auch..
    (lediglich Snoopy hat mal gesagt:Nobody's perfect, except me..)
    Wie erwähnt, bin ich ein alter Mann und verstehe nicht alle technischen Entwicklungen..
    Wie bitteschön wird bei einem virtuellen CD-Laufwerk die Lade ausgefahren?
    Gruß
    ytwinky

  • CD/DVD-Laufwerke erkennen (open-close)

    • ytwinky
    • 31. Mai 2006 um 19:42

    Hi,
    Hab ich schon gekuckt, mit scriptomatic nicht(jedenfalls habe ich nix gefunden)
    Und die ganz normalen AutoIt-Funktionen erkennen, daß eine CD/DVD im Laufwerk ist => Lw zu
    Aber Lade offen ist genauso, wie keine CD im Lw
    [Edit]
    ich habe mir(zu Übungszwecken) mal das Skript von Bugfix vorgenommen.
    Habe ein paar unnötige Schleifen und Includes entfernt, nicht weil
    ich es besser weiß, sondern um zu sehen, ob das dann auch noch geht :D
    Es ist, imho, ein wenig übersichtlicher geworden, sodaß ein leichter
    Vergleich mit dem Original-Skript möglich ist..
    Tipp: Wenn ich in einer Gruppe zwei RadioButtons habe, brauche ich nur
    einen abzufragen, denn der Wert vom anderen ergibt sich autimatisch ;)
    [Edit]
    Allmählich sind u und i gleichermaßen abgenutzt, da hau ich schon mal daneben ;)
    Gruß
    ytwinky

    Spoiler anzeigen
    Code
    #include <GuiConstants.au3>
    #NoTrayIcon
    
    
    Dim $s=DriveGetDrive("CDROM"), $cd1, $cd1_name, $cd2, $cd2_name
    $cd1=StringUpper($s[1])
    $cd1_name=GetNameFromRegistry($cd1)
    $Rdy1=DriveStatus($cd1)
    $cd2=StringUpper($s[2])
    $cd2_name=GetNameFromRegistry($cd2)
    $Rdy2=DriveStatus($cd2)
    
    
    GuiCreate("CD/DVD - Tray", 540, 139, -1, -1, $WS_OVERLAPPEDWINDOW+$WS_CLIPSIBLINGS)
    $Group_1=GuiCtrlCreateGroup("Laufwerk", 20, 20, 270, 100)
    $Radio_1=GuiCtrlCreateRadio($cd1 & "   " & $cd1_name, 40, 50, 200, 20)
    GUICtrlSetState($Radio_1, $gui_checked)
    $Radio_2=GuiCtrlCreateRadio($cd2 & "   " & $cd2_name, 40, 80, 200, 20)
    $Group_4=GuiCtrlCreateGroup("Schublade", 310, 20, 120, 100)
    $Auf=GuiCtrlCreateButton("Öffnen", 330, 50, 80, 20)
    GUICtrlSetState(-1, $GUI_FOCUS)
    $Zu=GuiCtrlCreateButton("Schließen", 330, 80, 80, 20)
    $Quit=GuiCtrlCreateButton("Ende", 450, 100, 70, 20)
    $Pic_8=GuiCtrlCreatePic(@ScriptDir & "\DVD_Lw_68x60.jpg", 450, 27, 68, 60)
    
    
    Dim $PrtDim[2]=[$cd1, $cd2]
    
    
    GuiSetState()
    While 1
    	$lw=$PrtDim[GUICtrlRead($Radio_2)=1]
    	Switch GuiGetMsg()
    		Case $Auf
    			CDTray($lw, "open")
    		Case $Zu
    			CDTray($lw, "closed")
    		Case $GUI_EVENT_CLOSE, $Quit
    			ExitLoop
    	EndSwitch
    Wend
    Exit
    
    
    Func GetNameFromRegistry($Lw)
    	Dim $Wert, $Reg=RegRead("HKEY_LOCAL_MACHINE\SYSTEM\MountedDevices", "\DosDevices\" &$Lw), $c, $i, $j
    	For $i=1 To StringLen($Reg)-2 Step 2
    		$c=Dec(StringMid($Reg, $i, 2))
    		If $c<>0 Then $Wert&=Chr($c)
    	Next
    	$i=StringInStr($Wert, "#")+6
    	$j=StringInStr($Wert, "__")
    	If $j<7 Then Return ""
    	Return StringReplace(StringMid($Wert, $i, $j-$i), "_", " ")
    EndFunc
    Alles anzeigen


    Gruß
    ytwinky

  • CD/DVD-Laufwerke erkennen (open-close)

    • ytwinky
    • 31. Mai 2006 um 15:54

    Ich habe das Ganze mal über Scriptomatic probiert(es gibt eine Funktion zum Erkennen der Laufwerke, hätte mich auch gewundert, wenn nicht..)
    Ich erhalte alle benötigten Information, auch ob ein Silberling eingelegt ist..
    ..und mit 'weniger' Aufwand(nur das Skript zusammenkürzen)
    ..und schnell..
    ..solange keine Scheiben eingelegt sind ;(
    Sobald Medien eingelegt sind, wird das Ganze so langsam(durch die durchgeführten Tests), daß es unerträglich ist..
    Gruß
    ytwinky
    Zum Spielen:

    Spoiler anzeigen
    Code
    ; Erstellt von AutoIt Scriptomatic
    Dim $OLw[10][10], $i, $n, $s="", $colItems
    $objWMIService=ObjGet("winmgmts:\\.\root\CIMV2")
    $colItems=$objWMIService.ExecQuery("SELECT * FROM Win32_CDROMDrive", "WQL", 0x30)
    If IsObj($colItems) Then
    	For $objItem In $colItems
    		$n+=1
    	  $OLw[$n][1]=$objItem.Drive
    	  $OLw[$n][2]=$objItem.Caption
    	  $OLw[$n][3]=$objItem.MediaLoaded
    	Next
    Endif
    For $i=1 To $n
    	$s=$s &"CD" &$i &" " &$OLw[$i][1] &" " &$OLw[$i][2] &" Scheibe drin:"  &$OLw[$i][3] &@Lf
    Next
    MsgBox(4096, "CD-Report", $s)
    Alles anzeigen
  • Statusfenster...

    • ytwinky
    • 28. Mai 2006 um 13:28

    Neenee, du hast das schon richtig gemacht..
    Wenn du die Funktion SplashTextOn(..) verwendest, geht ein Fenster mit deinem Text auf..
    ..ich dachte, der sollte farbig werden.
    Schönen Sonntag noch
    ytwinky

  • Statusfenster...

    • ytwinky
    • 28. Mai 2006 um 08:48

    Hi weedhead,
    na das ist ja prima..
    ..ich hatte dich mißverstanden, weil ich geglaubt habe, du wolltest den Splashtext einfärben.
    Und das hatte ich probiert..
    Gruß
    ytwinky

  • Statusfenster...

    • ytwinky
    • 27. Mai 2006 um 16:41

    Hallo weedhead,
    (Wo habe ich den Namen denn nur schon mal gelesen :rofl: )
    Probiers aus, ich wünsch dir mehr Glück, als ich hatte, denn ich habe es nicht geschafft..
    In der Hilfe steht allerdings auch nix dazu und GUICtrlSetColor() hatter einfach ignoriert.
    Kann ja sein, daß ich auf dem Holzweg bin..
    Gruß
    ytwinky

  • RGB Finder

    • ytwinky
    • 27. Mai 2006 um 16:06

    Hi,
    so, jetzt flackert nix mehr..
    Ich habe pro Farbe eine Prüfvariable eingefügt und nur wenn die sich verändert, wird auch im GUI geschrieben.
    Das dürfte Prozessor-unabhängig sein.
    Gruß
    ytwinky

    Spoiler anzeigen
    C
    ; ----------------------------------------------------------------------------
    ;
    ; AutoIt Version: v3.1.1.124 (beta)
    ; Author:         rabbit and Dr.galvany and ytwinky
    ;
    ; Script Function:
    ;	RGB Farbwerte ermitteln
    ;
    ; ----------------------------------------------------------------------------
    
    
    
    
    #include <GuiConstants.au3>
    
    
    Dim $col[3]
    $col[0] = "FF"
    $col[1] = "00"
    $col[2] = "00"
    Dim $rr=255, $gg=0, $bb=0
    
    
    GUICreate("RGB & HEX Finder", 290, 190, -1, -1)
    
    
    $Label = GUICtrlCreateLabel("", 20, 20, 140, 30)
    GUICtrlSetBkColor(-1, 0xFF0000)
    $code = GUICtrlCreateLabel("0xFF0000", 180, 25, 140, 30)
    $rt = GUICtrlCreateLabel("R", 10, 60, 10, 20)
    $r = GUICtrlCreateSlider(20, 60, 140, 20)
    GUICtrlSetLimit(-1, 255, 0)
    GUICtrlSetData(-1, 255)
    $ge = GUICtrlCreateLabel("G", 10, 90, 10, 20)
    $g = GUICtrlCreateSlider(20, 90, 140, 20)
    GUICtrlSetLimit(-1, 255, 0)
    GUICtrlSetData(-1, 0)
    $bl = GUICtrlCreateLabel("B", 10, 120, 10, 20)
    $b = GUICtrlCreateSlider(20, 120, 140, 20)
    GUICtrlSetLimit(-1, 255, 0)
    GUICtrlSetData(-1, 0)
    $copy = GUICtrlCreateButton("Copy", 165, 150, 110, 30)
    GUICtrlCreateLabel("by rabbit, Dr.Galvany and ytwinky", 5, 165, 160)
    GUICtrlSetFont(-1, 8)
    
    
    GUICtrlCreateLabel("R = ", 179, 60, 50)
    $l1 = GUICtrlCreateLabel(255, 200, 60, 50)
    GUICtrlCreateLabel("G = ", 179, 90, 50)
    $l2 = GUICtrlCreateLabel(0, 200, 90, 50)
    GUICtrlCreateLabel("B = ", 179, 120, 50)
    $l3 = GUICtrlCreateLabel(0, 200, 120, 50)
    ControlSetText("RGB & HEX Finder","",$l1, GUICtrlRead($r))
    ControlSetText("RGB & HEX Finder","",$l2, GUICtrlRead($g))
    ControlSetText("RGB & HEX Finder","",$l3, GUICtrlRead($b))
    GUISetState()
    While 1
    	Sleep(1)
    	If $rr<>GUICtrlRead($r) Then ControlSetText("RGB & HEX Finder","",$l1, GUICtrlRead($r))
    	If $gg<>GUICtrlRead($g) Then ControlSetText("RGB & HEX Finder","",$l2, GUICtrlRead($g))
    	If $bb<>GUICtrlRead($b) Then ControlSetText("RGB & HEX Finder","",$l3, GUICtrlRead($b))
    
    
    	$msg = GUIGetMsg()
    	Select
    		Case $msg = $GUI_EVENT_CLOSE
    			ExitLoop
    
    
    		Case $msg = $r
    			$col[0] = Hex(GUICtrlRead($r), 2)
    			Call("setcol")
    			$rr=GUICtrlRead($r)
    
    
    		Case $msg = $g
    			$col[1] = Hex(GUICtrlRead($g), 2)
    			Call("setcol")
    			$gg=GUICtrlRead($g)
    
    
    		Case $msg = $b
    			$col[2] = Hex(GUICtrlRead($b), 2)
    			Call("setcol")
    			$bb=GUICtrlRead($b)
    
    
    		Case $msg = $copy
    			ClipPut("0x" & $col[0] & $col[1] & $col[2])
    		Case Else
    			;-))
    	EndSelect
    WEnd
    Exit
    
    
    Func setcol()
    	GUICtrlSetBkColor($Label, "0x" & $col[0] & $col[1] & $col[2])
    	GUICtrlSetData($code, "0x" & $col[0] & $col[1] & $col[2])
    EndFunc   ;==>setcol
    Alles anzeigen
  • RGB Finder

    • ytwinky
    • 27. Mai 2006 um 13:57

    Hi Dr. Galvany,
    das Flackern ist fast weg ;)
    In meinen Augen scheint der einzig vernünftige Weg zu sein, nur dann zu Schreiben, wenn sich etwas geändert hat.
    Das ist eben der Nachteil dieser Endlosschleifen..
    Ich mich kann aber erst später darum kümmern..
    ..ytwinky.freebasic.de läuft wieder und ich muß schauen, ob da alles in Ordnung ist.
    Bis später
    ytwinky

  • AutoIt in Hochsprachen ?

    • ytwinky
    • 26. Mai 2006 um 21:30

    Jupp, und die neueste Version ist vom 24.05.2006, wer also noch ne alte hat..
    ..sollte updaten..
    Gruß
    ytwinky

  • Neuer QSort für AutoIt

    • ytwinky
    • 26. Mai 2006 um 14:22

    Hi,
    es ist vollbracht(nicht die Installation der neuen Beta 3.1.125, mit der dies alles auch funktioniert..):
    Ich habe endlich meinen QSort soweit, daß ich damit sortieren kann, fast wie ich möchte:
    -aufwärts
    -abwärts
    Ich brauchte einen QSort, um die SIDs vom myGetSID() zu sortieren
    (von hier stammt auch das zu sortierende File).
    Der AutoIt-QSort versagt hier, da die Strings nicht numerisch bewertet werden.
    Es macht nun wenig Sinn, wegen eines Problems eine System-Func zu ändern,
    also mußte eine Neue her(das war im 1. Versuch Bubble-Sort). Schlauerweise
    habe ich hier den Vergleich in eine Extra-Func kleiner() ausgelagert, da ich die
    dann auch im QSort() verwenden konnte. Das hat aber nichts genutzt. Der BubbleSort
    funktionierte und der QSort nicht! Das gibts doch nicht..
    Bis ich auf einmal feststellte, das der QSort nicht FALSCH sortierte, sondern GAR NICHT.
    Dann wars kein Problem mehr:Einfach byREF in die Func-Zeile eingefügt und schon kann der
    QSort die geänderten Werte auch zurückgeben. Klasse..
    Die Funktion kleiner() ist nur für die Bearbeitung von SIDs ausgelegt, wer andere Sachen
    sortieren will, muß die Func entsprechend anpassen.
    Wenn ein einfacher Textvergleich ausreichend ist, einfach die erste Zeile von kleiner()
    entkommentieren und fertig..
    Der Einbau in GetSIDGUI ist bereits erledigt..
    [Edit]
    Toll, dies ist mein 111. Posting
    Gruß
    ytwinky

    Spoiler anzeigen
    Code
    ;program QSort;
    ;(c)longtime ago by someone who could program in pascal
    ;program QSort.Pas has been successfully ported to QSort.au3
    Dim $DateiName="C:\AutoIt3\au3\QSort.Txt", $dp, $s, $l, $i, $t, $Feld
    $Feld=StringReplace(_ReadAll($DateiName), @LF, "")
    $t=StringSplit($Feld, @CR)
    BubbleSort($t, 1, $t[0])
    $s=""
    For $i=1 To $t[0]
    	$s&=$t[$i] &@Cr
    Next
    MsgBox(4096,"BubbleSort", $s)
    $t=StringSplit($Feld, @CR)
    QSort($t, 1, $t[0], ">")
    $s=""
    For $i=1 To $t[0]
    	$s&=$t[$i] &@Cr
    Next
    MsgBox(4096,"QSort", $s)
    Exit
    
    
    Func _ReadAll($DateiName)
    ;2006 By ytwinky
    	Local $ForReading=0, $Size, $DateiHnd, $Warte=3000, $i, $s, $j
    	If FileExists($DateiName) Then
    		$DateiHnd=FileOpen($DateiName, $ForReading)
    		If $DateiHnd<0 Then
    			MsgBox(4096, "Ooops:", "Datei " &$DateiName &" läßt sich nicht öffnen..", $Warte)
    			Exit 1
    		Else
    			$Size=FileGetSize($DateiName)
    			If $Size>0 Then ;da is was drin..
    				$Size=FileRead($DateiHnd, $Size)
    				FileClose($DateiHnd)
    				Return $Size
    			Else ;da is nix drin
    				MsgBox(4096, "Ooops:", "Datei " &$DateiName &" ist leer..", $Warte)
    				Exit 1
    			EndIf
    		EndIf
    	Else
    		MsgBox(4096, "Ooops:", "Datei " &$DateiName &" nicht gefunden..", $Warte)
    		Exit 1
    	EndIf
    EndFunc
    
    
    Func QSort(byRef $Feld, $l, $r, $Compare="<") ;gt jetz auch..
    	If IsArray($Feld) Then
    		Dim $i=$l, $j=$r, $y, $x=$Feld[Int($l+$r)/2]
    		Do
    			While kleiner($Feld[$i], $x, $Compare)
    				$i+=1
    			Wend
    			While kleiner($x, $Feld[$j], $Compare)
    				$j-=1
    			Wend
    			If $i<=$j Then
    				$y=$Feld[$i]
    				$Feld[$i]=$Feld[$j]
    				$Feld[$j]=$y
    				$i+=1
    				$j-=1
    			EndIf
    		Until $i>$j
    		If $l<$j Then QSort($Feld, $l, $j, $Compare)
    		If $i<$r Then QSort($Feld, $i, $r, $Compare)
    Else
    		MsgBox(4099, "Fehler", "$Feld ist kein Array")
    	EndIf
    EndFunc
    
    
    Func BubbleSort(byRef $Feld, $l, $r) ; ist Ok, mit Kleiner zusammen..
    	Dim $i, $j, $y
    	For $i=$l To $r
    		For $j=$i To $r
    			If Not kleiner($Feld[$i], $Feld[$j]) Then
    				$y=$Feld[$i]
    				$Feld[$i]=$Feld[$j]
    				$Feld[$j]=$y
    			EndIf
    		Next
    	Next
    EndFunc
    
    
    Func kleiner($a, $b, $Compare="<") ;< also 'kleiner' Vergleich(aufsteigend)..
    ;	Return $a<$b
    	If $a<>$b Then
    		Dim $arra=StringSplit(StringLeft($a, StringInstr($a, @Tab)-1) &"-0", "-") ;Nur SID splitten
    		Dim $arrb=StringSplit(StringLeft($b, StringInstr($b, @Tab)-1) &"-0", "-") ;Nur SID splitten
    		Dim $i, $j
    		If IsArray($arra) And IsArray($arrb) Then
    			$j=$arra[0]
    			If $arrb[0]>$j Then
    				$j=$arrb[0]
    			EndIf
    			For $i=3 To $j
    				If $i>$arra[0] Or $i>$arrb[0] Then Return True
    				If ($arra[$i]*1)<>($arrb[$i]*1) Then
    					Switch $Compare
    						Case "<"
    							Return $arra[$i]*1<$arrb[$i]*1
    						Case ">"
    							Return $arra[$i]*1>$arrb[$i]*1; abwärts sortieren
    					EndSwitch
    				EndIf
    			Next
    		EndIf
    	EndIf
    	Return False
    EndFunc
    Alles anzeigen
  • GetSID, jetzt(auch mit GUI) aber wirklich..

    • ytwinky
    • 25. Mai 2006 um 17:23

    Hi,
    so, die 'unübersichtliche' Ausgabe von myGetSID() hat ein Ende..
    Ich habe jetzt eine SortierRoutine(leider nur BubbleSort) eingebaut.
    Es war ein ziemlicher Krampf, bis ich soweit war, daß die SIDs denn
    auch wirklich sortiert wurden(s. Func Kleiner() ). Der ArraySort()
    von AutoIt versagt hier leider und so mußte ich.. und.. und..
    Mal schauen, ob ich irgendwann meine QSort-Routine zur Mitarbeit
    überreden kann, kann eigentlich so schlimm nicht sein..
    Aber das dachte ich auch, als ich den BubbleSort einbauen wollte :D
    Schönen Herrentag noch
    ytwinky
    [Edit]
    QSort eingebaut und geändertes Zip hochgeladen, QuellText geändert..

    Spoiler anzeigen
    C
    ; Erstellt von AutoIt Scriptomatic
    ;umgearbeitet 2006 von ytwinky ;-)))
    ;enthält noch keine Sortierung ;-(
    ;_ArraySort funktioniert nicht so, wie es hier benötigt wird..
    #include <GUIConstants.au3>
    Dim $i, $s
    ;Koda.1.4.0
    Const $SchriftArt="Arial"
    $GetSID=GUICreate("GetSIDGUI", 288, 210, 340, 125)
    GUICtrlCreateLabel("GetSID", 79, 4, 113, 41, $ES_CENTER)
    GUICtrlSetFont(-1, 24, 800, 0, $SchriftArt)
    GUICtrlSetColor(-1, 0x000080)
    GUICtrlSetTip(-1, "©2006 by ytwinky, MD")
    GUICtrlCreateLabel("Benutzer " &@UserName &" an " &@ComputerName, 1, 40, 210, 21, $ES_CENTER)
    GUICtrlSetFont(-1, 12, 600, 0, $SchriftArt)
    $Server=GUICtrlCreateInput("localhost", 4, 96, 112, 21, -1, $WS_EX_CLIENTEDGE)
    GUICtrlSetTip(-1, "Hier den gewünschten Rechner eintragen")
    $User=GUICtrlCreateInput(@UserName, 118, 96, 166, 21, -1, $WS_EX_CLIENTEDGE)
    GUICtrlSetTip(-1, "Hier den gewünschten Account eintragen")
    $SID=GUICtrlCreateInput("", 4, 152, 280, 17, -1, $WS_EX_CLIENTEDGE)
    GUICtrlSetTip(-1, "Hier steht die gesuchte SID oder eine Meldung ;-))")
    $GetIt=GUICtrlCreateButton("GetSID", 4, 180, 75, 25, BitOR($BS_DEFPUSHBUTTON,$BS_BOTTOM))
    GUICtrlSetFont(-1, 10, 800, 0, $SchriftArt)
    GUICtrlSetTip(-1, "Hier klicken, um die Suche zu starten..")
    $Quit= GUICtrlCreateButton("Quit", 210, 180, 75, 25)
    GUICtrlSetTip(-1, "na, was wohl..")
    GUICtrlSetFont(-1, 10, 800, 0, $SchriftArt)
    $Radio1 = GUICtrlCreateRadio("Nur Einer", 4, 60, 62, 17)
    GUICtrlSetTip(-1, "Wenn nur eine Sid gesucht wird(Default)")
    GUICtrlSetState(-1, $GUI_CHECKED)
    $Radio2 = GUICtrlCreateRadio("Alle", 100, 60, 79, 17)
    GUICtrlSetTip(-1, "Wenn alle Benutzer angezeigt werden sollen")
    $Chk2 = GUICtrlCreateCheckbox("Wirklich alle", 180, 60, 113, 17)
    GUICtrlSetTip(-1, "Checken, wenn alle vorhandenen Accounts angezeigt werden sollen..")
    GUICtrlSetState(-1, $GUI_HIDE)
    GUISetState(@SW_SHOW)
    While 1
    	Switch GuiGetMsg()
    		Case $GUI_EVENT_CLOSE, $Quit
    			ExitLoop
    		Case $GetIt
    			GUICtrlSetData($SID, "Protokoll anzeigen..");
    			$s=myGetSID(GUICtrlRead($User), GUICtrlRead($Server), GUICtrlRead($Radio1)=$GUI_CHECKED)
    			GUICtrlSetData($SID, Modify4OutPut($s, GUICtrlRead($Radio1)=$GUI_CHECKED, GUICtrlRead($User), GUICtrlRead($Server)));
    		Case $Radio1
    			GUICtrlSetState($Chk2, $GUI_UNCHECKED)
    			GUICtrlSetState($Chk2, $GUI_HIDE)
    			GUICtrlSetData($SID, "");
    		Case $Radio2
    			GUICtrlSetState($Chk2, $GUI_SHOW)
    			GUICtrlSetData($SID, "");
    		Case Else
    			;-))
    	EndSwitch
    Wend
    Exit
    
    
    Func myGetSID($User=@UserName, $Host=@ComputerName, $NurEiner=True)
    	Local $wbemFlagReturnImmediately=0x10, $wbemFlagForwardOnly=0x20, $colItems=""
    	Local $JaNein[2]=[True, False], $Gesucht="", $Output, $i, $s
    	If $User="" Then $User=@UserName
    	If StringInstr($Host, "\\")=1 Then $Host=StringMid($Host, 3)
    	If $Host="" Then $Host="."
    	$NurEiner=$JaNein[$NurEiner=False]
    	$objWMIService=ObjGet("winmgmts:\\" &$Host &"\root\CIMV2")
    	If IsObj($objWMIService) Then
    		$colItems=$wbemFlagReturnImmediately+$wbemFlagForwardOnly
    		$colItems=$objWMIService.ExecQuery("SELECT * FROM Win32_AccountSID", "WQL", $colItems)
    		If IsObj($colItems) Then
    			For $objItem In $colItems
    				$s=$objItem.Setting
    				$s=StringMid($s, StringInStr($s, "SID=")+4) &@Tab
    				$s&=StringMid($objItem.Element, StringInStr($objItem.Element, "Name=")+5)
    				If StringInstr($s, Chr(34) &$User &Chr(34)) Then $Gesucht&=$s
    				$OutPut&=StringReplace($s, Chr(34), "") &@Cr
    			Next
    			If $NurEiner Then Return StringReplace($Gesucht, Chr(34), "")
    			$s=StringSplit($OutPut, @Cr)
    ;			MsgBox(4096, "Vorher", $OutPut)
    			QSort($s, 1, $s[0])
    			$OutPut=""
    			For $i=1 To $s[0]
    				$OutPut&=$s[$i] &@Cr
    			Next
    ;			MsgBox(4096, "Nachher", $OutPut)
    			Return $OutPut
    		Else
    			Return "Keine WMI-Objekte gefunden für Klasse: Win32_AccountSID"
    		Endif
    	Else
    		Return $Host &" ist nicht in diesem Netz.."
    	EndIf
    EndFunc
    
    
    Func Modify4OutPut($s, $NurEiner=True, $User=@UserName, $Host=@ComputerName)
    	Local $v, $t, $i, $u
    	If $NurEiner Then Return StringMid($s, 1, StringInstr($s, @Tab)-1)
    	If GUICtrlRead($Radio2)=$GUI_CHECKED And GUICtrlRead($Chk2)=$GUI_CHECKED Then
    		_IEPrt ("<Pre>Computer: " &$Host &@Cr &$s, "Wirklich alle SIDs..")
    	Else
    		$t=StringSplit($s, @Cr)
    		For $i=1 To $t[0]
    			If StringInstr($t[$i], "S-1-5-21") Then	$u=$u &$t[$i] &@Cr
    			If StringInstr($t[$i], "S-1-5-32") Then	$v=$v &$t[$i] &@Cr
    		Next
    		_IEPrt ("<Pre>Computer: " &$Host &@Cr &$u &$v, "Alle SIDs")
    	EndIf
    	Return "Protokoll angezeigt.."
    EndFunc
    
    
    Func _IEPrt($Was, $Titel, $Breite=660, $Hoehe=300, $Links=100, $Oben=100) ;funzt sowieso
    	Dim $IE=ObjCreate("InternetExplorer.Application.1")
    	$IE.Navigate("about:blank")
    	$IE.Document.Title=$Titel
    	$IE.Left=$Links
    	$IE.Top=$Oben
    	$IE.Width=$Breite
    	$IE.Height=$Hoehe
    	$IE.Visible=1
    	$IE.Document.Body.InnerHtml="Bitte warten.."
    	$IE.Toolbar=False
    	$IE.Menubar=False
    	$IE.Statusbar=False
    	$IE.Visible=True
    	$IE.Document.Body.InnerHtml=$Was
    EndFunc
    
    
    Func QSort(byRef $Feld, $l, $r, $Compare="<") ;gt jetz auch..
    	If IsArray($Feld) Then
    		Dim $i=$l, $j=$r, $y, $x=$Feld[Int($l+$r)/2]
    		Do
    			While kleiner($Feld[$i], $x, $Compare)
    				$i+=1
    			Wend
    			While kleiner($x, $Feld[$j], $Compare)
    				$j-=1
    			Wend
    			If $i<=$j Then
    				$y=$Feld[$i]
    				$Feld[$i]=$Feld[$j]
    				$Feld[$j]=$y
    				$i+=1
    				$j-=1
    			EndIf
    		Until $i>$j
    		If $l<$j Then QSort($Feld, $l, $j, $Compare)
    		If $i<$r Then QSort($Feld, $i, $r, $Compare)
    	Else
    		MsgBox(4099, "Fehler", "$Feld ist kein Array")
    	EndIf
    EndFunc
    
    
    Func kleiner($a, $b, $Compare="<") ; also 'kleiner' Vergleich(aufsteigend)..
    ;	Return $a<$b
    	If $a<>$b Then
    		Dim $arra=StringSplit(StringLeft($a, StringInstr($a, @Tab)-1) &"-0", "-") ;Nur SID splitten
    		Dim $arrb=StringSplit(StringLeft($b, StringInstr($b, @Tab)-1) &"-0", "-") ;Nur SID splitten
    		Dim $i, $j
    		If IsArray($arra) And IsArray($arrb) Then
    			$j=$arra[0]
    			If $arrb[0]>$j Then
    				$j=$arrb[0]
    			EndIf
    			For $i=3 To $j
    				If $i>$arra[0] Or $i>$arrb[0] Then Return True
    				If ($arra[$i]*1)<>($arrb[$i]*1) Then
    					Switch $Compare
    						Case "<"
    							Return $arra[$i]*1<$arrb[$i]*1
    						Case ">"
    							Return $arra[$i]*1>$arrb[$i]*1; abwärts sortieren
    					EndSwitch
    				EndIf
    			Next
    		EndIf
    	EndIf
    	Return False
    EndFunc
    Alles anzeigen
  • GetSID, jetzt(auch mit GUI) aber wirklich..

    • ytwinky
    • 23. Mai 2006 um 11:15

    Hi,
    da offensichtlich nicht klar ist, wie die Func myGetSid() benutzt wird,
    habe ich ein GUI dafür geschrieben und die Schaltflächen mit Hilfstexten
    versehen. Ich hoffe, daß dann alle Anwender damit klarkommen..
    Gruß
    ytwinky
    [Edit]
    Jetzt auch die richtige Datei angehängt :D

    Spoiler anzeigen
    C
    ; Erstellt von AutoIt Scriptomatic
    ;umgearbeitet 2006 von ytwinky ;-)))
    ;enthält noch keine Sortierung ;-(
    ;_ArraySort funktioniert nicht so, wie es hier benötigt wird..
    #include <GUIConstants.au3>
    Dim $i, $s
    ;Koda.1.4.0
    Const $SchriftArt="Arial"
    $GetSID=GUICreate("GetSIDGUI", 288, 210, 340, 125)
    GUICtrlCreateLabel("GetSID", 79, 4, 113, 41, $ES_CENTER)
    GUICtrlSetFont(-1, 24, 800, 0, $SchriftArt)
    GUICtrlSetColor(-1, 0x000080)
    GUICtrlSetTip(-1, "©2006 by ytwinky, MD")
    GUICtrlCreateLabel("Benutzer " &@UserName &" an " &@ComputerName, 1, 40, 210, 21, $ES_CENTER)
    GUICtrlSetFont(-1, 12, 600, 0, $SchriftArt)
    $Server=GUICtrlCreateInput("localhost", 4, 96, 112, 21, -1, $WS_EX_CLIENTEDGE)
    GUICtrlSetTip(-1, "Hier den gewünschten Rechner eintragen")
    $User=GUICtrlCreateInput(@UserName, 118, 96, 166, 21, -1, $WS_EX_CLIENTEDGE)
    GUICtrlSetTip(-1, "Hier den gewünschten Account eintragen")
    $SID=GUICtrlCreateInput("", 4, 152, 280, 17, -1, $WS_EX_CLIENTEDGE)
    GUICtrlSetTip(-1, "Hier steht die gesuchte SID oder eine Meldung ;-))")
    $GetIt=GUICtrlCreateButton("GetSID", 4, 180, 75, 25, BitOR($BS_DEFPUSHBUTTON,$BS_BOTTOM))
    GUICtrlSetFont(-1, 10, 800, 0, $SchriftArt)
    GUICtrlSetTip(-1, "Hier klicken, um die Suche zu starten..")
    $Quit= GUICtrlCreateButton("Quit", 210, 180, 75, 25)
    GUICtrlSetTip(-1, "na, was wohl..")
    GUICtrlSetFont(-1, 10, 800, 0, $SchriftArt)
    $Radio1 = GUICtrlCreateRadio("Nur Einer", 4, 60, 62, 17)
    GUICtrlSetTip(-1, "Wenn nur eine Sid gesucht wird(Default)")
    GUICtrlSetState(-1, $GUI_CHECKED)
    $Radio2 = GUICtrlCreateRadio("Alle", 100, 60, 79, 17)
    GUICtrlSetTip(-1, "Wenn alle Benutzer angezeigt werden sollen")
    $Chk2 = GUICtrlCreateCheckbox("Wirklich alle", 180, 60, 113, 17)
    GUICtrlSetTip(-1, "Checken, wenn alle vorhandenen Accounts angezeigt werden sollen..")
    GUICtrlSetState(-1, $GUI_HIDE)
    GUISetState(@SW_SHOW)
    While 1
    	Switch GuiGetMsg()
    		Case $GUI_EVENT_CLOSE, $Quit
    			ExitLoop
    		Case $GetIt
    			GUICtrlSetData($SID, "Protokoll anzeigen..");
    			$s=myGetSID(GUICtrlRead($User), GUICtrlRead($Server), GUICtrlRead($Radio1)=$GUI_CHECKED)
    			GUICtrlSetData($SID, Modify4OutPut($s, GUICtrlRead($Radio1)=$GUI_CHECKED));
    		Case $Radio1
    			GUICtrlSetState($Chk2, $GUI_HIDE)
    			GUICtrlSetData($SID, "");
    		Case $Radio2
    			GUICtrlSetState($Chk2, $GUI_SHOW)
    			GUICtrlSetData($SID, "");
    		Case Else
    			;-))
    	EndSwitch
    Wend
    Exit
    
    
    Func myGetSID($User=@UserName, $Host=@ComputerName, $NurEiner=True)
    	Local $wbemFlagReturnImmediately=0x10, $wbemFlagForwardOnly=0x20, $colItems="", $angemeldet="Angemeldet: "
    	Local $JaNein[2]=[True, False], $Gesucht="Gesucht: "
    	If $User="" Then $User=@UserName
    	If StringInstr($Host, "\\")=1 Then $Host=StringMid($Host, 3)
    	If $Host="" Then $Host="."
    	$NurEiner=$JaNein[$NurEiner=False]
    	$Output="Computer: " &$Host &@CRLF
    	$objWMIService=ObjGet("winmgmts:\\" &$Host &"\root\CIMV2")
    	If IsObj($objWMIService) Then
    		$colItems=$wbemFlagReturnImmediately+$wbemFlagForwardOnly
    		$colItems=$objWMIService.ExecQuery("SELECT * FROM Win32_AccountSID", "WQL", $colItems)
    		If IsObj($colItems) Then
    			For $objItem In $colItems
    				$s=$objItem.Setting
    				$s=StringMid($s, StringInStr($s, "SID=")+4) &@Tab
    				$s&=StringMid($objItem.Element, StringInStr($objItem.Element, "Name=")+5)
    				If StringInstr($s, Chr(34) &$User &Chr(34)) Then $Gesucht&=$s
    				If StringInstr($s, Chr(34) &@UserName &Chr(34)) Then $angemeldet&=$s
    				$OutPut&=StringReplace($s, Chr(34), "") &@Cr
    			Next
    			If $NurEiner Then Return StringReplace($Gesucht &@Lf &$angemeldet, Chr(34), "")
    			Return $OutPut &@Cr &StringReplace($angemeldet, Chr(34), "")
    		Else
    			Return "Keine WMI-Objekte gefunden für Klasse: Win32_AccountSID"
    		Endif
    	Else
    		Return $Host &" ist nicht in diesem Netz.."
    	EndIf
    EndFunc
    
    
    Func Modify4OutPut($s, $NurEiner=True)
    	Dim $v, $t, $i, $u
    If $NurEiner Then Return StringMid($s, 10, StringInstr($s, @Tab)-10)
    	If GUICtrlRead($Radio2)=$GUI_CHECKED And GUICtrlRead($Chk2)=$GUI_CHECKED Then
    		_IEPrt ("<Pre>" &$s, "Wirklich alle SIDs..")
    	Else
    		$t=StringSplit($s, @Cr)
    		For $i=1 To $t[0]
    			If StringInstr($t[$i], "S-1-5-32") Then	$v=$v &$t[$i] &@Cr
    			If StringInstr($t[$i], "S-1-5-21") Then	$u=$u &$t[$i] &@Cr
    		Next
    		_IEPrt ("<Pre>" &$v &$u, "Alle SIDs")
    	EndIf
    	Return "Protokoll angezeigt.."
    EndFunc
    
    
    Func _IEPrt($Was, $Titel, $Breite=660, $Hoehe=300, $Links=100, $Oben=100) ;funzt sowieso
    	Dim $IE=ObjCreate("InternetExplorer.Application.1")
    	$IE.Navigate("about:blank")
    	$IE.Document.Title=$Titel
    	$IE.Left=$Links
    	$IE.Top=$Oben
    	$IE.Width=$Breite
    	$IE.Height=$Hoehe
    	$IE.Visible=1
    	$IE.Document.Body.InnerHtml="Bitte warten.."
    	$IE.Toolbar=False
    	$IE.Menubar=False
    	$IE.Statusbar=False
    	$IE.Visible=True
    	$IE.Document.Body.InnerHtml=$Was
    EndFunc
    
    
    Func Msg($s)
    	MsgBox(4096, "Msg", $s)
    EndFunc
    Alles anzeigen
  • Probleme mit FreePDF bei INstallscript

    • ytwinky
    • 21. Mai 2006 um 13:02

    Hi,
    für alle FreePDF XP-Fans/-Freaks:
    Habe gerade Version 3.07 gedownloadet:
    http://shbox.de/fpxpdownload.htm
    muß jetz installieren und konfigurieren :D
    Bis später
    ytwinky

  • richtiges klammern setzen???

    • ytwinky
    • 20. Mai 2006 um 22:14

    ..oder die Parameter richtig übergeben..

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™