Hallo. Ist es möglich ein Event auszulösen wenn ich auf ein ListView-Eintrag einen Klick mache?
Beiträge von Scritch
-
-
So, heute bin ich recht schnell zu einer Lösung gekommen. Hier mal nur der Auszug aus dem Skript, den ich soweit geändert habe:
Spoiler anzeigen
[autoit]for $f = 1 to ubound($array_komplett) - 1 ;In dieser Schleife wird das Druckobjekt verarbeitet, welchen in dem $array_komplett steht.
[/autoit] [autoit][/autoit] [autoit]
$var = 10 ;Diese Variable gibt später einen Wert von einer Schleife zur anderen weiter -> Deklariert wurde sie am Anfang des Skriptes. Dies hier dient nur zum "resetten" der Variable, wenn der Wert verändert wurden wäre$druckeruebersicht[ubound($druckeruebersicht) - 1][0] = $yfnrpc[$c] ;Weist immer der ersten Spalte im Array die yf-id des PC's zu
[/autoit]
$druckeruebersicht[ubound($druckeruebersicht) - 1][1] = $array_komplett[$f][1] ;Weist immer der zweiten Spalte im Array die yf-id des Users zu
for $e = 0 to ubound($druckeruebersicht, 2) - 1 ;Diese Schleif gleicht ab, ob das zu verarbeitende Druckobjekt aus $array_komplett in dem Array $druckeruebersicht bereits vorhanden ist
if $druckeruebersicht[ubound($druckeruebersicht) - 1][$e] = $array_komplett[$f][4] Then ;Wenn dies der Fall ist dann...
$var = 100 ;... wird der Wert der Variablen geändert...
EndIf
Next
if $var = 10 Then ;... was bedeutet dass dieses Druckobjekt nur weiterverarbeitet wird wenn der Variablenwert dem Ursprungswert entspricht was wiederum ein Indiz dafür wäre, dass das Druckobjekt aus $array_komplett noch nicht in $druckeruebersicht vorhanden ist
for $k = 0 to ubound($druckeruebersicht, 2) - 1 ;Ist das Druckobjekt noch nicht vorhanden, so wird mit dieser Schleife geprüft, wo in dem Array (in der aktuellen Zeile) in welcher Spalte noch Platz zum schreiben des neuen Druckobjektes ist.
if $druckeruebersicht[ubound($druckeruebersicht) - 1][$k] = "" Then ;Hierfür muss der Wert der Zelle leer sein ( "" )
$druckeruebersicht[ubound($druckeruebersicht) - 1][$k] = $array_komplett[$f][4] ;Wurde eine leere Zelle gefunden, wird das aktuelle Druckobjekt aus $array_komplett in die ensprechende Zelle in $druckeruebersicht geschrieben
ExitLoop ;und die Schleife verlassen, da sonst im nächsten Schleifendurchlauf der Wert erneut noch in die nächste freie Zelle geschrieben würde
EndIf
Next
EndIf
NextEigentlich ganz einfach Danke für eure Bemühungen
-
*_* - Sag das doch gleich...
Dann schreib dir doch ne Funktion?Ist nicht so schwer...
Jap, habe ich auch schon dran gedacht. Hatte vorhin nur irgendwie einen Knoten im Hirn, mache morgen bei der Arbeit weiter
Wenn du nix selbst machen willst, dann benutze _Array2DSearch von BugFix, da kannst du nach einem Suchbegriff innerhalb der Arrays suchen, egal in welche Dimension (Spalte) er steht.
ArrayMore.au3Naja, dass ich nichts selber gemacht habe stimmt nicht ganz. Habe da vorhin eine ganze Weile dran gesessen und mir den Kopf zermatert bevor ich hier nach Hilfe gefragt habe
Spoiler anzeigen
[autoit]#include <array.au3>
[/autoit] [autoit][/autoit] [autoit]
#Include <File.au3>
#Include <Date.au3>dim $druckeruebersicht[2][2]
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
Local $var
yfnrpc()
;~ dim $yfnrpc[1] = ["yf7sltpy"]_arraydisplay($yfnrpc)
[/autoit] [autoit][/autoit] [autoit]for $i = 0 to UBound($yfnrpc) - 1
[/autoit] [autoit][/autoit] [autoit]
$einzulesende_csv = @ScriptDir & "\" & $yfnrpc[$i] & ".csv"
if FileExists($einzulesende_csv) = 1 Then ;Hier ist das Problem begraben. Ich habe bisher nur eine Testdatei in dem Verzeichnis. Bei jedem Durchgang wird wieder diese Testdatei herangezogen, weil FileExists() jede Datei aus dem Array angeblich findet...
Global $aCSV
global $trennzeichen = ","
Dim $array_komplett[1][1]_filereadtoarray($einzulesende_csv, $aCSV)
[/autoit] [autoit][/autoit] [autoit]for $i = 3 to ubound($aCSV) - 1
[/autoit] [autoit][/autoit] [autoit]
Dim $aNeuesArray[1]
Local $spalte = $aCSV[$i]
while 1
$erstestrennzeichen = StringInStr($spalte, $trennzeichen) ;Sucht nach der Stelle des nächsten Trennzeichens
if $erstestrennzeichen Then ;Wenn eins gefunden wurde, dann...
$aNeuesArray[ubound($aNeuesArray) - 1] = StringLeft($spalte, $erstestrennzeichen - 1) ;wird ein neuer String in das temporäre Array geschrieben. Der String beinhaltet den Inhalt des Strings von dem "großen Array" von der ersten Position bis zu der Position wo das erste Trennzeichen gefunden, minus damit das Trennzeichen selber in das neue Array nicht mit geschrieben wird.
redim $aNeuesArray[ubound($aNeuesArray) + 1] ;Für den nächsten Inhalt wird eine weitere Zeile dem Array hinzugefügt
$spalte = StringTrimLeft($spalte, $erstestrennzeichen) ;Für den nöchsten Durchlauf wird der String bis zum ersten Trennzeichen gekürzt
Else
_arraydelete($aNeuesArray, ubound($aNeuesArray)) ;Löscht die letzte Zeile des Arrays, die in jedem Durchgang zu viel geschrieben wird
if ubound($aNeuesArray) > ubound($array_komplett, 2) Then ;Die Anzahl der Spalten in $array_komplett ist abhängig von der Anzahl der Zeilen in $aNeuesArray.
redim $array_komplett[ubound($array_komplett) + 1][ubound($aNeuesArray)] ;Wenn in $aNeuesArray mehr Zeilen als Spalten in $array_komplett vorhanden sind, so wird die Anzahl der Spalten angepasst.
Else
redim $array_komplett[ubound($array_komplett) + 1][ubound($array_komplett, 2)] ;Ansonsten bleibt die Spaltenanzahl gleich, und es wird nur eine neue Zeile angehängt.
EndIf
for $a = 0 to ubound($aNeuesArray) - 1 ;Hier werden die Inhalte aus den Zeilen von $aNeuesArray in die Spalten von $array_komplett aufgeteilt
$array_komplett[ubound($array_komplett) - 1][$a] = $aNeuesArray[$a]
Next
ExitLoop
EndIf
WEnd
Next
;Col 1 = User
;Col 4 = Drucker
for $b = 1 to ubound($array_komplett) - 1
;~ $druckeruebersicht[ubound($druckeruebersicht) - 1][0] = $yfnrpc[$i]
;~ $druckeruebersicht[ubound($druckeruebersicht) - 1][1] = $array_komplett[$b][1]
;~ for $e = 0 to ubound($druckeruebersicht, 2) - 1
;~ MsgBox(1, "lala", "Schleife 2")
;~ if stringinstr($druckeruebersicht[ubound($druckeruebersicht) - 1][$e], $array_komplett[$b][4]) Then
;~ $var = 1
;~ EndIf
;~ Next
;~ if $var < 1 Then
;~
;~ ReDim $druckeruebersicht[ubound($druckeruebersicht)][ubound($druckeruebersicht, 2) + 1]
;~ $druckeruebersicht[ubound($druckeruebersicht) - 1][ubound($druckeruebersicht, 2) - 1] = $array_komplett[$b][4]
;~ EndIf
;~
;~
;~ if $array_komplett[$b][4] <> $druckeruebersicht[ubound($druckeruebersicht) - 1][$e] Then
;~ MsgBox(1, "lala", $array_komplett[$b][4])
;~ MsgBox(1, "lala", $druckeruebersicht[ubound($druckeruebersicht) - 1][$e]);~ EndIf
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
;~ _arraydisplay($druckeruebersicht)
Next
EndIf
Nextfunc yfnrpc() ; erstellt ein array "yfnrpc[]" mit allen yf-nr der rechner
[/autoit]
; es wird auf dem tja nach missing_patches_neu* logdateien gesucht. logdatei = pc = yfnr
Global $yfnrpc[1]
Local $search = FileFindFirstFile("\\yf7sltja\log$\missing_patches_neu*") ; suche nach DER ERSTEN missing_patches_neu* datei
Local $count = 0
If $search = -1 Then ; errorhandling
MsgBox(0, "Error", "No files/directories matched the search pattern")
Exit
EndIf
While 1
local $file = FileFindNextFile($search) ; suche die NÄCHSTE missing_patches_neu* datei
If @error Then ExitLoop
local $yfnr = StringRight ( $file, 8 ) ; lese vom dateinamen nur die letzten 8 zeichen
_ArrayAdd($yfnrpc, $yfnr)
$count = $count + 1
WEnd
FileClose($search)
_ArraySwap($yfnrpc[0], $count)
EndFuncEs ist so, dass ich einige csv's habe, in denen Infos über das Druckverhalten von Benutzern ist, also Dateiname, Name des PC's, Name des Druckobjektes etc.
Habe nun diese Datei in einem Array formatiert, damit ich das Ganze weiterverarbeiten kann. Mein Ziel ist es nun, dass ich herausfinde und gebündelt darstellen kann, welcher User auf welchen Drucker bzw. welches Druckobjekt druckt.
Nun wollte ich aus dem Array $array_komplett die Druckobjekte, Name des Users und Arbeitsstation extrahieren und in ein neues Array schreiben. Dabei wollte ich dass in dem neuen Array in der ersten Spalte die Arbeitsstaion, in der zweiten der Username und in den darauffolgenden Spalten die Drucker aufgelistet werden. Und dafür brauche ich das weshalb ich überhaupt schreibe.
Da die verschiedenen Dokumente auf die gleichen Druckobjekte gedruckt werden, tauchen diese natürlich häufiger auf, ich will sie aber bloß jeweils nur einmal in meinem neuen Array gelistet haben.
-
Ich will Autofahren aber das mit diesem Lenkrad und den Pedalen ist mir halt zu kompliziert, geht das nicht einfacher?
So ungefähr hört sich das an...
Vielleicht solltest du dich erst einmal mit ein zwei Grundlagen Tutorials auseinandersetzen bevor du richtig loslegst.
Ich bin mit den Grundlagen durchaus vertraut Schleifen an sich sind nichts schlimmes, habe einfach gehofft dass ich das mit einer Funktion lösen kann -
Wenn ich dich richtig verstanden habe, willst du in einer Zeile nach einen bestimmten Wert suchen?
Korrekt. Allerdings verstehe ich nicht ganz was du mit deinem Code sagen/zeigen möchtestEine Variante mit Schleifen etc. habe ich ja auch bereits gefunden. Aber das ist mir halt zu kompliziert, geht das nicht einfacher?
-
Hallo. Kann ich in einer einzelnen Zeile in einem Array mit mehreren Spalten unkompliziert was suchen? Man kann mit _arraysearch() zwar auch Spalten durchsuchen, man muss damit aber immer umständlicherweise die Spalte angeben die durchsucht werden soll.
Geht das einfacher?
-
Hallo. Ich habe ein Array in meinem Skript, in dem viele PC-Namen stehen. Ein fester Pfad mit einer Datei drin, deren name des PC-Namen entspricht, soll verarbeitet werden. N
Nun möchte ich in einer einfachen for-Schleife den Dateinamen in dem Pfad immer ändern, sodass je Schleifendurchgang immer die nächste Datei abgearbeitet wird. Aber das geschieht nicht. Eigentlich ist das ganz einfach, aber das Skript arbeitet immer bloß einen Namen ab.
Siehe auch nochmal mein Kommentar ziemlich weit oben im Skript
Spoiler anzeigen
[autoit]#include <array.au3>
[/autoit] [autoit][/autoit] [autoit]
#Include <File.au3>
#Include <Date.au3>dim $druckeruebersicht[2][2]
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
Local $var
yfnrpc()
;~ dim $yfnrpc[1] = ["yf7sltpy"]_arraydisplay($yfnrpc)
[/autoit] [autoit][/autoit] [autoit]for $i = 0 to UBound($yfnrpc) - 1
[/autoit] [autoit][/autoit] [autoit]
$einzulesende_csv = @ScriptDir & "\" & $yfnrpc[$i] & ".csv"
if FileExists($einzulesende_csv) = 1 Then ;Hier ist das Problem begraben. Ich habe bisher nur eine Testdatei in dem Verzeichnis. Bei jedem Durchgang wird wieder diese Testdatei herangezogen, weil FileExists() jede Datei aus dem Array angeblich findet...
Global $aCSV
global $trennzeichen = ","
Dim $array_komplett[1][1]_filereadtoarray($einzulesende_csv, $aCSV)
[/autoit] [autoit][/autoit] [autoit]for $i = 3 to ubound($aCSV) - 1
[/autoit] [autoit][/autoit] [autoit]
Dim $aNeuesArray[1]
Local $spalte = $aCSV[$i]
while 1
$erstestrennzeichen = StringInStr($spalte, $trennzeichen) ;Sucht nach der Stelle des nächsten Trennzeichens
if $erstestrennzeichen Then ;Wenn eins gefunden wurde, dann...
$aNeuesArray[ubound($aNeuesArray) - 1] = StringLeft($spalte, $erstestrennzeichen - 1) ;wird ein neuer String in das temporäre Array geschrieben. Der String beinhaltet den Inhalt des Strings von dem "großen Array" von der ersten Position bis zu der Position wo das erste Trennzeichen gefunden, minus damit das Trennzeichen selber in das neue Array nicht mit geschrieben wird.
redim $aNeuesArray[ubound($aNeuesArray) + 1] ;Für den nächsten Inhalt wird eine weitere Zeile dem Array hinzugefügt
$spalte = StringTrimLeft($spalte, $erstestrennzeichen) ;Für den nöchsten Durchlauf wird der String bis zum ersten Trennzeichen gekürzt
Else
_arraydelete($aNeuesArray, ubound($aNeuesArray)) ;Löscht die letzte Zeile des Arrays, die in jedem Durchgang zu viel geschrieben wird
if ubound($aNeuesArray) > ubound($array_komplett, 2) Then ;Die Anzahl der Spalten in $array_komplett ist abhängig von der Anzahl der Zeilen in $aNeuesArray.
redim $array_komplett[ubound($array_komplett) + 1][ubound($aNeuesArray)] ;Wenn in $aNeuesArray mehr Zeilen als Spalten in $array_komplett vorhanden sind, so wird die Anzahl der Spalten angepasst.
Else
redim $array_komplett[ubound($array_komplett) + 1][ubound($array_komplett, 2)] ;Ansonsten bleibt die Spaltenanzahl gleich, und es wird nur eine neue Zeile angehängt.
EndIf
for $a = 0 to ubound($aNeuesArray) - 1 ;Hier werden die Inhalte aus den Zeilen von $aNeuesArray in die Spalten von $array_komplett aufgeteilt
$array_komplett[ubound($array_komplett) - 1][$a] = $aNeuesArray[$a]
Next
ExitLoop
EndIf
WEnd
Next
;Col 1 = User
;Col 4 = Drucker
for $b = 1 to ubound($array_komplett) - 1
;~ $druckeruebersicht[ubound($druckeruebersicht) - 1][0] = $yfnrpc[$i]
;~ $druckeruebersicht[ubound($druckeruebersicht) - 1][1] = $array_komplett[$b][1]
;~ for $e = 0 to ubound($druckeruebersicht, 2) - 1
;~ MsgBox(1, "lala", "Schleife 2")
;~ if stringinstr($druckeruebersicht[ubound($druckeruebersicht) - 1][$e], $array_komplett[$b][4]) Then
;~ $var = 1
;~ EndIf
;~ Next
;~ if $var < 1 Then
;~
;~ ReDim $druckeruebersicht[ubound($druckeruebersicht)][ubound($druckeruebersicht, 2) + 1]
;~ $druckeruebersicht[ubound($druckeruebersicht) - 1][ubound($druckeruebersicht, 2) - 1] = $array_komplett[$b][4]
;~ EndIf
;~
;~
;~ if $array_komplett[$b][4] <> $druckeruebersicht[ubound($druckeruebersicht) - 1][$e] Then
;~ MsgBox(1, "lala", $array_komplett[$b][4])
;~ MsgBox(1, "lala", $druckeruebersicht[ubound($druckeruebersicht) - 1][$e]);~ EndIf
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
;~ _arraydisplay($druckeruebersicht)
Next
EndIf
Nextfunc yfnrpc() ; erstellt ein array "yfnrpc[]" mit allen yf-nr der rechner
[/autoit]
; es wird auf dem tja nach missing_patches_neu* logdateien gesucht. logdatei = pc = yfnr
Global $yfnrpc[1]
Local $search = FileFindFirstFile("\\yf7sltja\log$\missing_patches_neu*") ; suche nach DER ERSTEN missing_patches_neu* datei
Local $count = 0
If $search = -1 Then ; errorhandling
MsgBox(0, "Error", "No files/directories matched the search pattern")
Exit
EndIf
While 1
local $file = FileFindNextFile($search) ; suche die NÄCHSTE missing_patches_neu* datei
If @error Then ExitLoop
local $yfnr = StringRight ( $file, 8 ) ; lese vom dateinamen nur die letzten 8 zeichen
_ArrayAdd($yfnrpc, $yfnr)
$count = $count + 1
WEnd
FileClose($search)
_ArraySwap($yfnrpc[0], $count)
EndFunc -
Hallo. Ich habe vor einiger Zeit aus einem defekten Laptop die Festplatte ausgebaut. Nun fragte mich der ehemalige Benutzer des Laptops nach einer gelöschten Datei von der Festplatte.
Ich habe dann die HDD gleich als externen Datenträger angeschlossen und bin dann ins alte Systemverzeichnis und zum Recycler navigiert. Darin befand sich dann ein "Link" namens "S-1-5-21-1-1-7955-708036". Wenn ich dem folge lande ich in dem Papierkorb von diesem Rechner, aber nicht in dem von der Festplatte.
Meine Frage ist nun, wie ich auf den Recycler von dem Datenbestand auf der externen HDD zugreifen kann.
-
Danke für deine Antort, AspirinJunkie. Ja, nachdem ich es geschrieben habe ist es mir auch eingefallen dass das 3D-Bild auf den Homepages aus vielen Einzelbildern aus verschiedenen Perspektiven besteht
Ich werde mir mal die Photogrammetrie zu Gemüte führen, klingt sehr interessant Danke dafür.
-
Festivals die ich sehr sehr sehr gern besuchen möchte: Tomorrowland, Qlimax, Qlimax (Australia), Defqon1 und ich will gerne mal nach Belgien -> Dirty Workz
Defqon 1 in Australien soll auch echt großartig sein, ist mir aber etwas weit weg und vor allem zu teuer
-
Hallo. Man kennt ja z. B. von Onlineshops diese 3D-Ansichten von z. B. Laptops, die man sich von allen Seiten anschauen kann. Wie könnte man sowas realisieren? Ich möchte z. B von einem Auto oder einem Haus aus vielen Fotos von allen Seite eine solche 3D-Darstellung hinbekommen. Theoretisch sollte das doch möglich sein?
Ein Problem stellt sich natürlich schon von vornerein in den Weg, nämlich dass man Fotos von besagten Objekten nicht im Studio machen kann, wegen des weißen Hintergrundes. Das wäre aber wohl eher die Sache eines Bildbearbeitungsprogramms.
Wie aber füge ich die Bilder mittels eines Skriptes am besten zu einem 3D-Objekt zusammen? Wieviele Bilder bräuchte man da?
-
Bin auch ein absoluter Fan vom Hardstyle. War auch schon zu "Festivals" im Land des Hardstyles, Holland. Genannt seien da Qlimax, Defqon 1 und Hardbass. Gibs da unter euch auch Besuche von den genannten Veranstaltungen? Hardstyle ist aber bei weitem nicht gleich hardstyle. Es gibt Hardstyle der mir gar nicht gefällt und wiederum Tracks die kann in einer Dauerschleife stundenlang hören
Dubstep habe ich vor einigen Monaten erst für mich entdeckt, wobei ich da noch nicht über den Tellerrand von Skrillex geschaut habe - was gibt es da noch an tollen Interpreten?
Neben dem elektronischen Kram höre ich aber auch gerne Alternative, Punk Rock und Hard Rock.
Ist der Jumpstyle nicht ausgestorben?
-
Hallo. Danke für deine Antwort. Sorry, vergessen zu erwähnen. Wir setzen immernoch Windows XP ein. Ist der Autor des Skriptes einer aus unserem Forum? Ich weiss gar nicht, wo ich das Skript her hatte. Benutze es schon seid über einem jahr. man findet es auch an mehreren Stellen im Netz.
-
Hallo. Ich habe mir vor einiger Zeit ein Skript gebastelt womit ich die Auflösung ändern kann. Hintergrund dabei war es, die Auflösung bei anderen Mitarbeitern zu ändern, ohne sich umloggen zu müssen. Mit einem RunAs-Skript habe ich das eigentliche Skript einfach gestartet und dann unter meiner Adminkennung ausgeführt.
Jetzt werden viele Monitore ersetzt durch welche mit Full HD-Auflösung. Habe mein Skript dahingehend erweitert. Bei meinem PC und meinem monitor - 22", etwas älter - funktioniert es einwandfrei. Bei den neuen 27" monitoren jedoch nicht. Zwar kann ich zwischen 1024*768 und 1280*1024 hin und her switchen, aber bei Full HD passiert nichts. Ich vermute dass das an der Frequenz liegt.
Da ich die Funktion selbst nicht geschrieben habe und daher auch nicht ganz durchsteige wollte ich hier um Hilfe bitten.
Hier das Skript:
Spoiler anzeigen
[autoit]#include <GUIConstants.au3>
[/autoit] [autoit][/autoit] [autoit]
#include <File.au3>
#include <ButtonConstants.au3>
#include <ComboConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <string.au3>
#include <Array.au3>
#include <GuiStatusBar.au3>
#include <ProgressConstants.au3>
#include <GUIListBox.au3>
#include-onceGlobal $tmp = "d:\tmp.txt"
[/autoit] [autoit][/autoit] [autoit]
Global $atmp
Global $pw = "d:\pw.txt"
Global $apw
Global $pfad = "d:\Installationen.exe"
;~ Dim $abenutzername[4] = ["Benutzer1", "Benutzer2", "Benutzer3"]
Global $domain = "Domäne"_FileReadToArray($tmp, $atmp)
[/autoit] [autoit][/autoit] [autoit]
_FileReadToArray($pw, $apw)
_ArrayDelete($atmp, 0)
_ArrayDelete($apw, 0);~ FileDelete($tmp)
[/autoit] [autoit][/autoit] [autoit]
;~ FileDelete($pw)
;~ If not FileExists($tmp) Then
;~ MsgBox(0, "FEHLER!", "Programm mit RunAs starten!")
;~ Exit
;~ EndIf;~ For $i = 1 To Ubound($atmp) - 1 ;für den Fall, das mehr als ein Benutzer in der Datei steht
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
;~ _ArraySearch($abenutzername, $atmp[$i])
;~ If @error Then
;~ MsgBox(0, "FEHLER!", "Programm mit RunAs starten!")
;~ Exit
;~ EndIf
;~ NextRun(@ComSpec & " /c " & "net stop spooler", "", @SW_HIDE)
[/autoit] [autoit][/autoit] [autoit]
Sleep(2000)
Run(@ComSpec & " /c " & "net start spooler", "", @SW_HIDE)Opt("GUIOnEventMode", 1)
[/autoit] [autoit][/autoit] [autoit]$Form1 = GUICreate("Installationen", 220, 80, 150, 150)
[/autoit] [autoit][/autoit] [autoit]
;von links, von oben, breite, höhe$Group3 = GUICtrlCreateGroup("Auflösung", 10, 10, 200, 55)
[/autoit] [autoit][/autoit] [autoit]
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Combo4 = GUICtrlCreateCombo("Auflösung auswählen", 30, 30, 160, 35) ;Bildschirmauflösung
GUICtrlSetData($Combo4, "1024*768|1280*1024|1920*1080", "Auflösung auswählen")
GUICtrlSetOnEvent($Combo4, "Combo4")
GUISetState()GUISetState(@SW_SHOW)
[/autoit] [autoit][/autoit] [autoit]
GUISetOnEvent($GUI_EVENT_CLOSE, "_exit")
GUISetState()While 1
[/autoit] [autoit][/autoit] [autoit]
$msg = GUIGetMsg()
Select
Case $msg = $GUI_EVENT_CLOSE
ExitLoop
;Case $msg = $ButtonDrucker
; MsgBox(0,"Test",GUICtrlRead($cList))
EndSelect
WEndFunc Combo4()
[/autoit] [autoit][/autoit] [autoit]
$read = GUICtrlRead($Combo4)
If $read = "1024*768" Then
aufloesung(1024,768)
EndIfIf $read = "1280*1024" Then
[/autoit] [autoit][/autoit] [autoit]
aufloesung(1280,1024)
EndIf
If $read = "1920*1080" Then
aufloesung(1920,1080)
EndIf
EndFuncFunc aufloesung($i_Width = @DesktopWidth, $i_Height = @DesktopHeight, $i_BitsPP = @DesktopDepth, $i_RefreshRate = @DesktopRefresh)
[/autoit] [autoit][/autoit] [autoit]
Local Const $DM_PELSWIDTH = 0x00080000
Local Const $DM_PELSHEIGHT = 0x00100000
Local Const $DM_BITSPERPEL = 0x00040000
Local Const $DM_DISPLAYFREQUENCY = 0x00400000
Local Const $CDS_TEST = 0x00000002
Local Const $CDS_UPDATEREGISTRY = 0x00000001
Local Const $DISP_CHANGE_RESTART = 1
Local Const $DISP_CHANGE_SUCCESSFUL = 0
Local Const $HWND_BROADCAST = 0xffff
Local Const $WM_DISPLAYCHANGE = 0x007E
If $i_Width = "" Or $i_Width = -1 Then $i_Width = @DesktopWidth ; default to current setting
If $i_Height = "" Or $i_Height = -1 Then $i_Height = @DesktopHeight ; default to current setting
If $i_BitsPP = "" Or $i_BitsPP = -1 Then $i_BitsPP = @DesktopDepth ; default to current setting
If $i_RefreshRate = "" Or $i_RefreshRate = -1 Then $i_RefreshRate = @DesktopRefresh ; default to current setting
Local $DEVMODE = DllStructCreate("byte[32];int[10];byte[32];int[6]")
Local $B = DllCall("user32.dll", "int", "EnumDisplaySettings", "ptr", 0, "long", 0, "ptr", DllStructGetPtr($DEVMODE))
If @error Then
$B = 0
SetError(1)
Return $B
Else
$B = $B[0]
EndIf
If $B <> 0 Then
DllStructSetData($DEVMODE, 2, BitOR($DM_PELSWIDTH, $DM_PELSHEIGHT, $DM_BITSPERPEL, $DM_DISPLAYFREQUENCY), 5)
DllStructSetData($DEVMODE, 4, $i_Width, 2)
DllStructSetData($DEVMODE, 4, $i_Height, 3)
DllStructSetData($DEVMODE, 4, $i_BitsPP, 1)
DllStructSetData($DEVMODE, 4, $i_RefreshRate, 5)
$B = DllCall("user32.dll", "int", "ChangeDisplaySettings", "ptr", DllStructGetPtr($DEVMODE), "int", $CDS_TEST)
If @error Then
$B = -1
Else
$B = $B[0]
EndIf
Select
Case $B = $DISP_CHANGE_RESTART
$DEVMODE = ""
Return 2
Case $B = $DISP_CHANGE_SUCCESSFUL
DllCall("user32.dll", "int", "ChangeDisplaySettings", "ptr", DllStructGetPtr($DEVMODE), "int", $CDS_UPDATEREGISTRY)
DllCall("user32.dll", "int", "SendMessage", "hwnd", $HWND_BROADCAST, "int", $WM_DISPLAYCHANGE, _
"int", $i_BitsPP, "int", $i_Height * 2 ^ 16 + $i_Width)
$DEVMODE = ""
Return 1
Case Else
$DEVMODE = ""
SetError(1)
Return $B
EndSelect
EndIf
EndFunc ;==>_ChangeScreenResFunc _exit()
[/autoit]
FileDelete("d:\Installationen.exe")
Exit
EndFunc -
Zumindest für Textinhalte könnte man den alten Inhalt der Zwischenablage noch sichern und wiederherstellen, mancher User wundert sich sonst…
Nette Idee, aber den Komfort für den user lasse ich mal aus Ich unterstelle denen sowieso jetzt einfach mal, dass die wenigsten überhaupt mit der Zwischenablage arbeitenDateien markieren, rechtsklick, und dein Programm anklicken (das dann natürlich ins Explorer-Kontextmenü muss^^, was aber kein Problem darstellt ).
Geht ohne Hotkey (den du tunlichst vor jeder "Datei Markieren"-Aktion ausschalten solltest! ) und macht den geringsten Aufwand.
Weiterhin kannst du im Kontextmenu dein Programm ans "Senden an" anfügen. Das ist der SENDTO-Ordner im Verzeichnis C:\Dokumente und Einstellungen\Administrator(oder der Username)\SendTo
Die übergebenen Dateien lassen sich in AutoIt in $cmdline[] auslesen
Ehrlich gesagt weiß ich nicht genau was genau du mir mitteilen möchtest Wieso Programm im Kontextmenü? Wieso "Senden an..."? Und wieso den Hotkey nach jeder Markieraktion ausschalten? Der Benutzer soll Dateien markieren und einmal den Hotkey drücken... und nicht gedrückt halten. -
Klasse Idee, danke. Ich hätte jetzt gedacht dass die in die Zwischenablage zu kopierenden Dateien eine nach der anderen in der Zwischenablage auf taucht. Aber dem scheint ja nicht so zu sein So ists perfekt, danke.
-
So funktioniert es wenigstens schonmal ansatzweise:
[autoit]HotKeySet("{F5}", "test")
[/autoit][autoit][/autoit][autoit]while 1
[/autoit][autoit][/autoit][autoit]
sleep(100)
WEndFunc test()
[/autoit]
send("^c")
sleep(300)
Local $bak = ClipGet()
MsgBox(0, "Clipboard contains:", $bak)
;~ Exit
EndFuncWenn allerdings mehrere Dateien markiert werden, dauert es entsprechend länger diese der Zwischenablage hinzuzufügen. Länger als 300ms. Ggf. kann man den Wert noch dynamisch anpassen, wenn sich keine andere bessere Lösung findet.
-
Hallo. Danke für deine Antwort. An die Möglichkeit habe ich auch schon gedacht. Wäre aber nur eine Notlösung. Ich suche nicht nach dem einfachsten Ergebnis das zu programmieren, sondern nach der einfachsten Bedienung
Später möchte das nicht ich benutzen, sondern es werden irgendwelchen unbedarften User benutzen sollen, die durch eine einfache Methodik, also quasi mit einem Hotkey, Dateien makieren sollen, die z. B. von einem Löschlauf verschon bleiben. Und da ist die Drag n' Drop Methode nicht die optimalste wenn die User noch wieder mit einer GUI konfrontiert werden
-
Hallo. Wenn ich angenommen zehn Dateien in einem Verzeichnis habe und davon fünf markiere, möchte ich auf die fünf markierten Dateien eine Aktion anwenden. Meinetwegen umbennen, Atribut verändern oder verschieben etc. Wie bekomme ich diese Mehrfachauswahl nun in ein Array, geht das überhaupt?
-
Ach verdammt. Aber danke.