Ich wollte einfach nochmal nachfragen, ob sich damit jemand beschäftigt hat und jemand eine Lösung kennt, dankeschön
Beiträge von Joriktos
-
-
Guten Tag Community,
ich habe gerade sehr viel gegoogled (rund 2 Stunden), komme aber einfach nicht weiter.
Und zwar geht es darum, dass ich ein Skript schreiben möchte, was die netsh.exe benutzt und da das Skript auf jedem System laufen soll und ich auf die Ausgaben des Programms eingehen möchte, ist es etwas unpraktisch, wenn die Ausgaben je nach Systemsprache anders sind. Jetzt wollte ich fragen, ob sich hier auch schon jemand mit diesem Problem befasst hat und ihr eine Lösung dafür kennt, also dass man die netsh.exe IMMER auf Englisch starten kann?Gruß
JoriktosP.S. Bin z.B. auf lpksetup.exe gestoßen, hat mich aber nicht wirklich weiter gebracht.
-
Guten Abend zusammen,
ich habe nicht viel Zeit zum schreiben, aber auch nur eine kurze Frage.
Ist es möglich, den Sound nur für eine bestimmte GUI auszuschalten? - Wenn ja, wie?Gruß
Joriktos -
Hmm.. Eigentlich hatte ich den Beitrag nochmal editiert um gerade des einzufügen, hat es wohl aber nicht richtig übernommen
Also an sich ist die Idee sehr gut und du hast es auch sehr gut umgesetzt und mit einer groß genugen Database, kann man mit dem Programm vermutlich seeeehr viel Spaß haben Aber dafür muss es halt erstmal eine große Database geben. -
Achsoooo, die ist erst so klein Ja dann
Okay, alles klar Für das Programm später wäre es sinnvoll
Meinst du jetzt vom Code her? Wenn es so sein sollte: Den hab ich eh schon so vorbereitet gehabt, hab das jetzt schon so ähnlich in 3 meiner Programme verwendet, also musste ich's nur bisschen umschreiben und ich find's nicht übertrieben.
Also ich finde, dass es seeeehr übersichtlich ist mit den Variablennamen und hab mich auch sehr schnell umgewöhnt. Es hilft einem selbst und vor allem welchen (z.B. mir ), die deinen Code anschauen. -
Jetzt musst du nurnoch die neue Database hochladen
Edit: Und du könntest das @DesktopDir durch @ScriptDir ersetzen oder nachfragen lassen, falls es nicht vorhanden ist
Edit 2:
Hab dir mal nen Lösungsvorschlag für "Edit" gebastelt, außerdem hab ich die Variablennamen verändert ([Tutorial] Sauber ProgrammierenChatBot.au3
[autoit]
[/autoit] [autoit][/autoit] [autoit]
#NoTrayIcon
#include <ScrollBarConstants.au3>
#include <WindowsConstants.au3>
#include <GUIConstantsEx.au3>
#include <EditConstants.au3>
#include <GuiEdit.au3>Global $sFile = FileRead(@ScriptDir & "\database.txt")
[/autoit] [autoit][/autoit] [autoit]
If $sFile = "" Then
$pDatabase = _SelectPathGUI()
$sFile = FileRead($pDatabase)
MsgBox(0, "", $sFile)
FileCopy($pDatabase, @ScriptDir & "\database.txt")
EndIf
Global Const $sDatabase = StringReplace($sFile, @CR, "")Global $hGUI, $idEdit, $idInput, $idButton, $sText
[/autoit] [autoit][/autoit] [autoit]
$hGUI = GUICreate("Alice", 600, 400)
GUISetFont(10, 1000, 0, "Courier New")
$idEdit = GUICtrlCreateEdit("", 0, 0, 600, 380, BitOR($GUI_SS_DEFAULT_EDIT, $ES_READONLY, $WS_VSCROLL))
GUICtrlSetBkColor($idEdit, 0xFFFFFF)
GUICtrlSetColor($idEdit, 0x7777777)
$idInput = GUICtrlCreateInput("", 0, 380, 500, 20)
$idButton = GUICtrlCreateButton("Ask", 500, 380, 100, 20)
GUICtrlSetState($idButton, $GUI_DEFBUTTON)
GUISetState(@SW_SHOW)Do
[/autoit] [autoit][/autoit] [autoit]
Switch GUIGetMsg()
Case -3
ExitLoop
Case $idButton
$sText = StringStripWS(GUICtrlRead($idInput), 7)
If (StringLen($sText) > 0) Then
GUICtrlSetData($idEdit, GUICtrlRead($idEdit) & "You: " & $sText & @CRLF)
GUICtrlSetData($idEdit, GUICtrlRead($idEdit) & "Alice: " & _Main($sText) & @CRLF)
_GUICtrlEdit_Scroll($idEdit, $SB_SCROLLCARET)
GUICtrlSetData($idInput, "")
EndIf
GUICtrlSetState($idInput, $GUI_FOCUS)
EndSwitch
Until FalseFunc _Main($sQuestion)
[/autoit] [autoit][/autoit] [autoit]
Local $asSRE = StringRegExp($sQuestion, "(?i)^(sind|können) ([\wäöüß]+) ([\wäöüß]+)\??$", 3)
If @error Then Return "Könnten Sie Ihre Frage bitte anders formulieren?"
Local $sGroup = $asSRE[1], $sKeyword = $asSRE[0], $sX = $asSRE[2], $n, $i, $asParent ; "Keyword Object X?"
If StringRegExp($sDatabase, StringFormat("(?i)(?m)^(\Q%s %s %s\E\.?)$", $sGroup, $sKeyword, $sX), 0) Then Return "Ja."
If StringRegExp($sDatabase, StringFormat("(?i)(?m)^(\Q%s %s\E (?:nicht|keinen?) \Q%s\E\.?)$", $sGroup, $sKeyword, $sX), 0) Then Return "Nein."
; nur das Parent ersten Grades wird momentan überprüft
$asParent = StringRegExp($sDatabase, StringFormat("(?i)(?m)^\Q%s sind\E ([\wäöüß]+)\.?$", $sGroup), 3)
If (Not @error) Then
For $i = 0 To UBound($asParent) - 1
If StringRegExp($sDatabase, StringFormat("(?i)(?m)^(\Q%s %s %s\E\.?)$", $asParent[$i], $sKeyword, $sX), 0) Then Return "Ja."
If StringRegExp($sDatabase, StringFormat("(?i)(?m)^(\Q%s %s\E (?:nicht|keinen?) \Q%s\E\.?)$", $asParent[$i], $sKeyword, $sX), 0) Then Return "Nein."
Next
EndIf
Return "Das weiß ich leider nicht."
EndFunc ;==>_MainFunc _SelectPathGUI()
[/autoit] [autoit][/autoit] [autoit]
Local $pDatabase
Local $hSelectPathGUI = GUICreate("Select Path", 505, 97, -1, -1, $WS_SYSMENU + $WS_BORDER) ; Fenster zur Auswahl der database.txt
GUICtrlCreateLabel("Please set the Path to database.txt:", 10, 10)
Local $idButtonChoose = GUICtrlCreateButton("Choose Directory...", 395, 5, 100) ; Zum öffnen des Ordnerbrowsers
Local $idButtonOkay = GUICtrlCreateButton("Okay", 395, 37, 100) ; Bestätigung des Pfades
Local $idInputPath = GUICtrlCreateInput("", 10, 38, 380)
GUISetState(@SW_SHOW, $hSelectPathGUI)While 1
[/autoit]
$nMsg = GUIGetMsg(1)
Switch $nMsg[0]
Case -3
Exit
Case $idButtonOkay
If Not FileExists(GUICtrlRead($idInputPath)) Then
MsgBox(48, "Wrong Path", "You selected a wrong File. Please try again.")
$nMsg = $idButtonChoose
ContinueCase
Else
GUIDelete($hSelectPathGUI)
Return $pDatabase
EndIf
Case $idButtonChoose
$pDatabase = FileOpenDialog("Search for database.txt", @DesktopDir, "Database (database.txt)", 1 + 2) ; Pfad zur database.txt auswählen
GUICtrlSetData($idInputPath, $pDatabase) ; Angegebener Pfad wird in das Inputfeld eingefügt
EndSwitch
WEnd
EndFunc ;==>_SelectPathGUI -
Oh, das ist nicht sehr gut, aber du könntest dann auf Prozess UND Fensternamen überfrüfen.
-
Wie heißt der neue Prozess?
-
Falls es dich noch interessiert:
[autoit]
[/autoit][autoit][/autoit][autoit]
HotKeySet("{F10}", "_HotkeyF10")While 1
[/autoit][autoit][/autoit][autoit][/autoit][autoit]
Sleep(10)
WEndFunc _HotkeyF10()
[/autoit]
$nCursor = MouseGetCursor()
If $nCursor = 5 Then
MouseClick("primary", Default, Default, 2, 0)
Send("^c")
Send("{ESC}")
Sleep(100)
MsgBox(0, "", ClipGet())
EndIf
EndFuncDas ganze geht nur, während der Cursor so aussieht: [Blockierte Grafik: http://www.worldtimzone.com/mozilla/testcase/css3cursors_files/auto.gif]
Das ist auch nicht wirklich sehr gut gelöst, aber es funktioniert
-
BugFix : Da hast du Recht. Das ist auch sehr sinnvoll und vor allem sehr gute Arbeit.
@all:
Ich benutze nun funkey's Methode, da diese einfacher ist und mir reicht. Dazu habe ich sie aber nochmal überarbeitet und das ist dabei herausgekommen:ColoredGroupBox.au3
[autoit]
[/autoit] [autoit][/autoit] [autoit]
#include-once
#include <GUIConstants.au3>; #FUNCTION# ====================================================================================================================
[/autoit] [autoit][/autoit] [autoit]
; Name ..........: _GuiCtrlCreateGroup
; Description ...: Create a Group in which you can set the Border-Color
; Syntax ........: _GuiCtrlCreateGroup($sText, $iX, $iY, $iW, $iH[, $iRectCol = -1[, $iTextCol = -1[, $iTextBkColor = -2[,
; $iFontAttribute = -1]]]])
; Parameters ....: $sText - The text of the control.
; $iX - The left side of the control.
; $iY - The top of the control.
; $iW - The width of the control.
; $iH - The height of the control.
; $iRectCol - [optional] The Rectangle-Color. Default is Black (0x000000).
; $iTextCol - [optional] The Text-Color. Default is Black (0x000000).
; $iTextBkColor - [optional] The Text-Background-Color. Default is transparent (-2).
; $iFontAttribute - [optional] The Font-Attributes. Default is -1. (italic:2; underlined:4; strike:8)
; Return values .: $aGroup
; $aGroup[0] - The Handle of the Graphic.
; $aGroup[1] - The Handle of the Line (Label with 1px height) which overdraws the Graphic below the Text with the GUI-Background-Color.
; $aGroup[2] - The Handle of the Text-Label.
; Author ........: funkey (autoit.de)
; Modified ......: Joriktos
; Remarks .......: Tip: If you want to set another font, use $aGroup[2] to get the Handle of the Text-Label.
; But if you want to change the width, don't forget to change the width of $aGroup[1] too.
; Related .......:
; Link ..........:
; Example .......:
; ===============================================================================================================================
Func _GuiCtrlCreateGroup($sText, $iX, $iY, $iW, $iH, $iRectCol = -1, $iTextCol = -1, $iTextBkColor = -2, $iFontAttribute = -1)
Local $aGroup[3]
$aGroup[0] = GUICtrlCreateGraphic($iX, $iY, $iW, $iH, 0) ; Create a Graphic
If $iRectCol <> -1 Then GUICtrlSetGraphic($aGroup[0], $GUI_GR_COLOR, $iRectCol) ; Set the Rectangle-Color - Standard: Black (0x000000)
GUICtrlSetGraphic($aGroup[0], $GUI_GR_RECT, 0, 0, $iW, $iH) ; Draws the Graphic into a Rectangle
$aGroup[1] = GUICtrlCreateLabel($sText, $iX + 5, $iY, Default, 1, 0x1) ; Overdraw the Rectangle-Graphic with a Line (Label with 1px height) for the Text. The line is colored like the GUI-Background.
$aGroup[2] = GUICtrlCreateLabel($sText, $iX + 5, $iY - 6, Default, Default, 0x1) ; Label for the Text - 0x1 = $SS_CENTER
If $iTextCol <> -1 Then GUICtrlSetColor($aGroup[2], $iTextCol) ; Set the Text-Color - Standard: Black (0x000000)
If $iTextBkColor <> -1 Then GUICtrlSetBkColor($aGroup[2], $iTextBkColor) ; Set the Text-Backgound-Color - Standard: Transparent (-2)
If $iFontAttribute <> -1 Then GUICtrlSetFont($aGroup[2], Default, Default, $iFontAttribute) ; Set the Font-AttributesGUIStartGroup() ; For a full functional Group
[/autoit] [autoit][/autoit] [autoit]Return $aGroup ; Returns the 3 Handles
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
EndFunc ;==>_GuiCtrlCreateGroup; #FUNCTION# ====================================================================================================================
[/autoit]
; Name ..........: _GUICtrlDeleteGroup
; Description ...: This deletes a Group which was created with _GUICtrlCreateGroup() before.
; Syntax ........: _GUICtrlDeleteGroup($aGroup)
; Parameters ....: $aGroup - An array of unknowns.
; Return values .: None
; Author ........: Joriktos
; Modified ......: -
; Remarks .......:
; Related .......:
; Link ..........:
; Example .......: No
; ===============================================================================================================================
Func _GUICtrlDeleteGroup($aGroup)
For $i = 0 To UBound($aGroup) - 1
GUICtrlDelete($aGroup[$i])
Next
EndFunc ;==>_GUICtrlDeleteGroup
Ich habe noch eine Funktion gebastelt um das "Control" wieder zu löschen und ich habe es nun so gebastelt, dass ein Array mit 3 Handles zurück gegeben wird, mit denen man nachträglich noch sämtliche Dinge ändern kannGruß
Joriktos -
Vielen vielen Dank, BugFix
Edit: funkey hat eine für mich noch bessere Möglichkeit geschrieben und ich habe sie noch bisschen erweitert, selber Thread wie BugFix' UDF, Post 10 (Direktlink: https://autoit.de/index.php?page…9572#post339572)
-
Danke!!! Du bist der Hammer!
Edit: Und ja, funkey's Methode ist meiner Meinung nach noch besser, da passt das mit der Breite und Höhe besser, bei BugFix ist es bisschen größer, als es sein soll. (Und die Höhe wird sogar noch größer gemacht als die Breite)
-
Soweit ich weiß, ist es bisher noch nicht gelungen den Group-Rahmen individuell einzufärben.
Mir ist auch keine Struktur bekannt, die mir per OWNERDRAW Zugriff auf den Rahmen erlaubt.Okay, das ist sehr schade... In Visual Basic scheint es möglich zu sein: GroupBox - BorderColor - Eigenschaft hinzufuegen
Aber ich glaube, da ist das eh anders aufgebaut, mit den ganzen Objekten und so. -
Servus zusammen,
ich wollte eine GroupBox um mehrere Elemente haben, die aber auf meinem GUI mit schwarzem Hintergrund in ihrem Standard-Hellgrau blöd aussieht.
Deshalb wollte ich gerne die Schrift und den Rahmen färben.1. Problem:
[autoit]
Ich habe versucht mit GUICtrlSetColor() die Textfarbe der Caption von meiner GroupBox zu verändern => ohne Erfolg.
Ja, ich habe die Hilfe gelesen und Nein, ich habe Windows 7 mit Windows Aero style und nicht den "Windows XP style".
[/autoit]
$idGroupTeam1 = GUICtrlCreateGroup("Blue Team", 5, 5, 1260, 300)
GUICtrlSetColor($idGroupTeam1, 0x3399FF) ; Gibt 1 zurück, es passiert aber nichts, die Schrift bleibt schwarz.Dieses Problem habe ich momentan mit diesem Workaround gelöst, aber es wäre nett, wenn ich trotzdem wüsste, wo das Problem dabei bei mir liegt:
[autoit]
[/autoit]
$idGroupTeam1 = GUICtrlCreateGroup("Blue Team", 5, 5, 1260, 300, $WS_DISABLED)
$idLabelGroupTeam1 = GUICtrlCreateLabel("Blue Team", 20, 5)
GUICtrlSetColor($idLabelGroupTeam1, 0x3399FF) ; Hier funktioniert es, die Textfarbe vom Label kann ich verändern2. "Problem":
Nun würde ich noch gerne die Rahmen-Farbe der GroupBox verändern, prinzipiell ist dies anscheinend möglich (Changing border color of GroupBox), aber in AutoIt ist dies wohl durch einen DllCall zu bewerkstelligen und damit kenne ich mich leider noch nicht gut genug aus, deshalb wäre ich euch sehr dankbar, wenn dafür jemand eine Lösung in AutoIt findet. Habe nämlich auch danach ausgiebig gegoogled und nichts brauchbares für mich gefunden.GroupBox Control (Windows) auf MSDN: http://msdn.microsoft.com/en-us/library/…6(v=vs.85).aspx
LG und schönen Tag
JoriktosEdit:
Code zum testen innerhalb des GUI
[autoit]
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
#include <WindowsConstants.au3>#Region ### START Koda GUI section ###
[/autoit] [autoit][/autoit] [autoit]
$hGUI = GUICreate("", 1270, 310, -1, -1)
GUISetBkColor(0x000000)
$idGroupTeam1 = GUICtrlCreateGroup("Blue Team", 5, 5, 1260, 300, $WS_DISABLED)
$idLabelGroupTeam1 = GUICtrlCreateLabel("Blue Team", 20, 5)
GUICtrlSetColor($idLabelGroupTeam1, 0x3399FF)
$idPicPlayer1 = GUICtrlCreatePic("", 10, 15, 154, 280)
$idPicPlayer2 = GUICtrlCreatePic("", 260, 15, 154, 280)
$idPicPlayer3 = GUICtrlCreatePic("", 510, 15, 154, 280)
$idPicPlayer4 = GUICtrlCreatePic("", 760, 15, 154, 280)
$idPicPlayer5 = GUICtrlCreatePic("", 1010, 15, 154, 280)
GUICtrlCreateGroup("", -99, -99, 1, 1)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###While 1
[/autoit]
$nMsg = GUIGetMsg()
Switch $nMsg
Case -3
Exit
EndSwitch
WEnd -
Kuck mal, ich hab gerade auch noch was feines gebastelt:
Close Active Window.au3
[autoit]
[/autoit] [autoit][/autoit] [autoit]
#include <WindowsConstants.au3>
#include <WindowsConstants.au3>
#include <ButtonConstants.au3>
#include <EditConstants.au3>Global $hActiveWindowHandle
[/autoit] [autoit][/autoit] [autoit]
Global $sActiveWindowTitle
Global $hOldActiveWindowHandle
Global $sOldActiveWindowTitle$hGUI = GUICreate("Close Active Window", 450, 68, -1, -1, BitOR($WS_MINIMIZEBOX, $WS_CAPTION, $WS_POPUP, $WS_SYSMENU, $DS_SETFOREGROUND), $WS_EX_TOPMOST)
[/autoit] [autoit][/autoit] [autoit]
$idLabelTitle = GUICtrlCreateLabel("Title:", 5, 15)
$idInputTitle = GUICtrlCreateInput("", 45, 11, 340, -1, $ES_READONLY)
$idLabelHandle = GUICtrlCreateLabel("Handle:", 5, 40)
$idInputHandle = GUICtrlCreateInput("", 45, 36, 340, -1, $ES_READONLY)
$idButtonClose = GUICtrlCreateButton("Close" & @CRLF & "Window", 390, 9, 55, 49, $BS_MULTILINE)GUISetState(@SW_SHOW, $hGUI)
[/autoit] [autoit][/autoit] [autoit]While 1
[/autoit] [autoit][/autoit] [autoit]
$hActiveWindowHandle = WinGetHandle("[active]")
$sActiveWindowTitle = WinGetTitle($hActiveWindowHandle)If $hActiveWindowHandle <> $hOldActiveWindowHandle And $hActiveWindowHandle <> $hGUI And $hActiveWindowHandle <> "" Then
[/autoit] [autoit][/autoit] [autoit]
$hOldActiveWindowHandle = $hActiveWindowHandle
$sOldActiveWindowTitle = $sActiveWindowTitle
GUICtrlSetData($idInputTitle, $sActiveWindowTitle)
GUICtrlSetData($idInputHandle, $hActiveWindowHandle)
EndIf$nMsg = GUIGetMsg()
[/autoit]
Switch $nMsg
Case -3
Exit
Case $idButtonClose
ProcessClose(WinGetProcess(HWnd(GUICtrlRead($idInputHandle)))) ; oder
; WinKill(HWnd(GUICtrlRead($idInputHandle))) ; Oder WinClose(HWnd(GUICtrlRead($idInputHandle)))
EndSwitch
WEnd
[Blockierte Grafik: http://www10.pic-upload.de/07.07.13/x6iujbwg5cuu.png]Damit kannst du das zuletzt aktive Fenster, bzw so wie es gerade ist den Prozess dazu schließen
Wofür ist das eigentlich genau? -
Das mit dem zurücksetzen ist schonmal eine gute Möglichkeit, aber wenn du es so wie ursprünglich machen willst, kannst du auch @ScriptFullPath (Ein Makro, welches den Pfad, deines laufenden Scripts enthält, also völlig unabhängig wo sich die Datei befindet) verwenden:
[autoit]
[/autoit]
Case $idReset
Run(@ScriptFullPath)
ExitAußerdem kannst du mal dieses Tutorial durchlesen, das hat mir am Anfang sehr geholfen, selber den Überblick zu erhalten und zu bekommen: [Tutorial] Sauber Programmieren
Dann weißt du auch, warum ich hier $idReset schreibe -
Möchtest du das alles innerhalb einer GUI machen? Weil sonst könntest du eine Parent GUI als Feld 1 erstellen und 2 und 3 als Child-GUI's, die du dann jenachdem was du grade brauchst mit @SW_SHOW und @SW_HIDE aufrufst, bzw wieder versteckst
Edit: Da war wohl jemand schneller... Witzig, dass 2 Leute genau gleichzeitig nach 22 Minuten antworten und davor alles still war
-
Spoiler anzeigen
Hallo,
@Autolaser/Joriktos:
Ich kenne nur die Möglichkeit, eine Taste systemweit zu deaktivieren, siehe hier.
Dazu ist jedoch ein Neustart nötig, deshalb kann ich so etwas nicht in mein Programm einbauen.
Wenn ihr diese Möglichkeit jedoch nutzen möchtet, könntet ihr z.B. nur die Alt-Taste deaktivieren, dann funktioniert Strg+Alt+Entf auch nicht mehr.Aber vorsicht: wenn ihr Strg+Alt+Entf bei der Anmeldung benötigt, das klappt dann auch nicht mehr.
Ob es noch eine andere Möglichkeit gibt, würde mich auch sehr interessieren.
MfG Xenon
Stimmt, des kenn ich auch^^ So kann man den TaskManager deaktivieren und auf dem Strg+Alt+Entf-Screen von Win7 nichts anzeigen lassen:
Spoiler anzeigen
[autoit]
[/autoit] [autoit][/autoit] [autoit]
RegWrite('HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System','HideFastUserSwitching', 'REG_DWORD', '1')
RegWrite('HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System','DisableLockWorkstation', 'REG_DWORD', '1')
RegWrite('HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer','NoLogoff', 'REG_DWORD', '1')
RegWrite('HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System','DisableTaskMgr', 'REG_DWORD', '1')
RegWrite('HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\System', 'DisableChangePassword', 'REG_DWORD', 1)While 1
[/autoit]
If ProcessExists ("taskmgr.exe") Then ProcessClose ("taskmgr.exe")
Sleep(100)
WEnd -
Finde das Script auch ganz nett
Du schreibst:
Läßt sich das auch verhindern, das man die Sperre mit Strg+Alt+Entf nicht umgehen kann?
Das würde für mich mehr Sinn machenWürde mich auch interessieren
-
Siehst du den Text mit dem AutoIt Window Info Tool, wenn du das ListView damit auswählst? Wenn ja, dann solltest du den Text auf jeden Fall bekommen, sonst wird es vermutlich schwierig.