Zitatirgendwie ist dieses Visual C++ Express 2008 sch****..... für ein Programm müssen da locker 10 unterdateien erstellt werden
Das ist bei allen C-Konstrukten so, das ist der Preis für die Portabilität und die Optimierbarkeit.
Zitatirgendwie ist dieses Visual C++ Express 2008 sch****..... für ein Programm müssen da locker 10 unterdateien erstellt werden
Das ist bei allen C-Konstrukten so, das ist der Preis für die Portabilität und die Optimierbarkeit.
Hallo,
"eigentlich" sollte es mit dem ControlClick() funktionieren, alternativ könntest du auf die vom Windowinfo ausgegebenen Mauskkoordinaten klicken.
mouseclick("left",584,448)
[/autoit]Habs gerade gesehen, stand da nicht was mit 1 gig Ram im 1. Post? Na wenn der schon 2 gig Ram hat, dann würde ich den so lassen! Wie schon von Schnitzel beschrieben, braucht man echt nix "neueres" ausser für die handvoll Spiele....da kaum eine Software bisher Multicores überhaupt (vollständig) unterstützt
Ja, allerdings nicht mit der Msgbox.
Mach dir ein eigenes Fenster, dessen Buttons in deiner Schleife abgefragt werden. Je nach gedrücktem Button werden die Variablenwerte zugewiesen.
#include <WinAPI.au3>
[/autoit] [autoit][/autoit] [autoit]$anz=10
[/autoit] [autoit][/autoit] [autoit]global $button[$anz+1],$x[$anz+1],$y[$anz+1]
$gui=guicreate("Test",600,600)
for $i=1 to $anz
$button[$i]= guictrlcreatebutton($i,10+random(20,500,1),10+random(20,500,1),20,20)
next
$Msgbox=Guicreate("Eigene Messagebox",300,80,50,50)
$label=guictrlcreatelabel("Die Variablen werden im Fenstertitel angezeigt!",10,10,280,20)
$msb1=GUICtrlCreateButton("Button1",20,35)
$msb2=GUICtrlCreateButton("Button2",180,35)
guisetstate(@sw_show,$gui)
guisetstate(@sw_show,$msgbox)
$variable=0
adlibenable("_move",1000)
while 1
$msg=GUIGetMsg(1) ;array mit Daten
switch $msg[1] ;welches fenster löst das Ereignis aus?
case $msgbox ;die msgbox wars...
if $msg[0]=$msb1 then $variable=1 ;den Buttons variablen zuweisen
if $msg[0]=$msb2 then $variable=2 ;den Buttons variablen zuweisen
if $msg[0]=-3 then guisetstate(@sw_hide,$msgbox) ;msgbox schließen
if $msg[0]=$msb1 or $msg[0]=$msb2 then winsettitle($Msgbox,"","Die Variable ist: "&$variable)
;hier könnte man nun die messagebox "deaktivieren"
case $gui ;die hauptgui bekam die Nachricht
if $msg[0]=-3 then Exit ;prog beenden beenden
endswitch
for $i=1 to $anz
$a=controlgetpos($gui,"Test",$button[$i])
if $a[0]<10 then $x[$i]=-$x[$i]
if $a[1]<10 then $y[$i]=-$y[$i]
if $a[0]>490 then $x[$i]=-$x[$i]
if $a[1]>490 then $y[$i]=-$y[$i]
controlmove("Test","",$button[$i],$a[0]+$x[$i],$a[1]+$y[$i],$a[0]/10,$a[0]/10)
next
wend
exit
func _move()
for $i=1 to $anz
$x[$i]=random(-2,+2,1)
$y[$i]=random(-2,+2,1)
next
_WinAPI_RedrawWindow($gui)
endfunc
Einen glücklichen Herzwunsch euch beiden ![]()
Zitataber wann verwende ich java, das is doch nur ein Browserprogramm oder?
made my Day....Ich verbeisse mir jetzt den Hinweis auf gidf.de ![]()
Ganz ehrlich? Mit einem weiteren (oder 2) Gigabyte RAM ist das ein ganz ordentlicher Rechner. wieso auch nicht? Für "gängige" Anwendungen reicht die Performance locker, die einzige Herausforderung heutzutage sind Spiele. Selbst Video/Audio Transkodierung /Rekodierung ist damit sicher kein Thema, dann läuft das Ding halt mal eine Nacht durch....
Die paar euro für den Speicher würde ich aber auf jeden Fall investieren, die verbesserte "Schwuppdizität" ist spürbar! Jedenfalls mehr als ein Prozessor mit 2,7 Ghz^^
Leviathan hats eigentlich auf den Punkt gebracht..
Zitatman wählt sein Werkzeug passend zum Problem
Aber leider ist es heutzutage meist so, daß jemand mit einer übervollen Werkzeugkiste da steht und keine Ahnung hat, wie er dem Problem zu Leibe rücken soll....warum soll das in der EDV-Branche anders sein?
Wenn du also zzt. nicht unbedingt etwas lernen MUßT, dann versuche deine Nase überall da reinzustecken, wo kein "Mainstream" ist! Einige Sachen wurden ja schon genannt, einer meiner Kunden beklagte sich neulich, daß er trotz sehr guter Bezahlung kaum FORTRAN-Programmierer bekommt....das ist auch nicht soooo weit von Basic/AutoIt weg^^, auch wenn die Sprache schon über 50 Jahre auf dem Buckel hat.
@Ubuntu
Zitat
hab ich!!!
NEIN, hast du NICHT! Du hast 5 Zeilen gepostet und als Fehlerbeschreibung "Das bewegen funktioniert Nicht".
Komischerweise funktioniert das Bewegen einwandfrei! Dann muss es zwangsläufig an deinem Script liegen. Nur...welches Script?
Wo ist das Problem in 5 Sätzen zu beschreiben was man gemacht hat, das Script zu posten und dann das Ziel bzw das Problem so zu beschreiben, daß man nicht erst nach zig-mal nachfragen mitbekommt um was es überhaupt geht!
#include <WinAPI.au3>
[/autoit][autoit][/autoit][autoit][/autoit][autoit]$anz=10
[/autoit][autoit][/autoit][autoit]global $button[$anz+1],$x[$anz+1],$y[$anz+1]
$gui=guicreate("Test",600,600)
for $i=1 to $anz
$button[$i]= guictrlcreatebutton($i,10+random(20,500,1),10+random(20,500,1),40,40)
next
guisetstate()
adlibenable("_move",1000)
[/autoit][autoit][/autoit][autoit]while guigetmsg()<>-3
for $i=1 to $anz
$a=controlgetpos("Test","",$button[$i])
if $a[0]<10 then $x[$i]=-$x[$i]
if $a[1]<10 then $y[$i]=-$y[$i]
if $a[0]>490 then $x[$i]=-$x[$i]
if $a[1]>490 then $y[$i]=-$y[$i]
controlmove("Test","",$button[$i],$a[0]+$x[$i],$a[1]+$y[$i],$a[0]/10,$a[0]/10)
next
;_WinAPI_RedrawWindow($gui) ;hab nen langsamen Rechner ab 20 Controls wirds zu langsam,
;ggf kann man nur die Fläche der ontrols refreshen
wend
func _move()
for $i=1 to $anz
$x[$i]=random(-2,+2,1)
$y[$i]=random(-2,+2,1)
next
endfunc
Mal ein kleiner "Test" meinerseits zum Thema "flackern". Also bei mir flackert nix....
/EDIT/ sry, du hast es heute abbekommen, hab mich wieder abgeregt!
was soll ich sagen....ausser RTFM! ![]()
Hi,
was ich mich gerade frage, was passiert mit deinstallierten Addins? Ich glaube kaum, daß die Addins die kompletten Einträge umschreiben wenn mittendrin eines der Addins deinstalliert wird. D.h. es könnten "Lücken" auftreten. Eigentlich kein Problem, aber da war ja noch die Frage nach dem ExcelWrapper.
Also müsste es entweder zwei getrennte Schleifen geben, eine scannt nach dem ExcelWrapper und die andere danach nach der nächste "Lücke" oder man merkt sich die nächste Lücke und setzt ein Wrapperflag, daß ganz zum Schluß ausgewertet wird.
$openflag=-1
$wrapperflag=-1
For $i = 0 to 100 ;alle einträge prüfen
If $i=0 then $i=""
If RegRead("HKEY_CURRENT_USER\Software\Microsoft\Office\11.0\Excel\Options", "OPEN"&$i)="" then
;msgbox(0,0,"Open"&$i&" ist frei für den nächsten Wert!") ;auskommentieren wenn es funktioniert
if $openflag=-1 then $openflag=$i ;die erste "Fundstelle" merken
endif
if StringInStr(Regenumval ("HKEY_CURRENT_USER\Software\Microsoft\Office\11.0\Excel\Options", $i), "ExcelWrapper ") <> 0 then $wrapperflag=1
next
if $wrapperflag=-1 then ;kei Wrapper vorhanden, dann Addin installieren an die erste gefundene "Lücke"
;installiere ADDIN mit Nummer $openflag
msgbox(0,"Installiere Addin nach:","Open"&$openflag)
Else
consolewrite ("ExcelWrapper vorhanden!"& @CRLF )
endif
Hab aktuell kein Excel, aber lt deiner Beschreibung sollte das so funktionieren
[autoit]For $i = 0 to 100
If $i=0 then $i=""
If RegRead("HKEY_CURRENT_USER\Software\Microsoft\Office\11.0\Excel\Options", "OPEN"&$i)="" then
msgbox(0,0,"Open"&$i&" ist frei für den nächsten Wert!") ;auskommentieren wenn es funktioniert
;hier das plugin installieren
endif
next
ZitatTastatur blocken geht schlecht, da du sonst das Passwort nicht mehr eingeben könntest
ach^^...denk da mal genau drüber nach.....das eine hat mit dem anderen nämlich nichts zu tun....
ZitatMaus blocken Ebenfalls schlecht, wie soll man sonst das Passwort eingeben?
s.o.
Diesmal lag es wirklich nur an dem "falschen" Datentypen.
Ein String kann 2147483647 Zeichen aufnehmen, das ist schon mal eine ganze Menge.
Ein Integer (mit Vorzeichen) hat einen Wertebereich von +-268435457 (0xEFFFFFFF so wars doch, jedenfalls bei 32Bit?), das sind gerade mal 9 Zeichen....
Bei Franzi´s Script sieht man auch sehr schön die interne Umwandlung der Datentypen. AutoIt findet garnichts dabei, eine Integerzahl als String zu behandeln ![]()
Wird aus dem $v aber ein string, dann kann dieser nun ellenlang sein
$v = "123456789012345678999899999999988888888889999999992893756928375692873562893756289356"
For $i = 999999 To 999 Step -1
$result1 = StringInStr($v, $i)
$result2 = StringInStr($v, $i, "", 2)
If $result1 <> 0 And $result2 <> 0 And $result2 > StringLen($i) + $result1 Then
ConsoleWrite($i &@CRLF)
EndIf
Next
ZitatSomit sollte man auch immer die PID des "richtigen" DeskLock's haben,
da nützt keine zweite Exe etwas
Kann sein dass ich auf dem Schlauch stehe, aber wolltest du nicht einen DesktopLOCK machen?
Wenn der Desktop gelockt ist, dann bleiben dir mehrere Möglichkeiten um als FREMDER das Lock auszuschalten (oder auch nicht^^)
Tastatur (wird abgefangen, Taskmanager und alle neu startenden Tasks werden sofort beendet)
Maus (wird in einer Endlosschleife auf Punkt 0,0 gezogen)
Autorun per USB-Stick,CD/DVD (Prüfen der Taskliste, jeder neue Task wird sofort gekillt)
Geht da noch was übers Netzwerk? Doch eigentlich nur, wenn der Prozess auf dem gelockten Rechner schon aktiv ist, jeder Neue wird ja vom Locker gekillt?!
Wär wirklich mal was für nen Wettbewerb^^
fast linear...
1. Koeffizient = 256 * x
2. Koeffizient = 65536.2575 * x
3. Koeffizient = 8192 *x
also Näherungsweise 2^8, 2^13, 2^16
plus das sog. "Offset" ![]()
Erstelle ein Gleichungssystem, 4 Gleichungen mit 4 Unbekannten, die Lösung ist deine gesuchte Funktion. Da du sogar 7 Gleichungen aber nur 4 unbekannte hast, sollte das lösbar sein
ZitatDie Funktionen die du wünscht klingt nach dem "Kiosk Modus" habe mal gegooglet
ZitatFestplattenimage machen, und das bei jedem Start laden. So ist es am einfachsten.
Problem (bzw. Vorteil) ist bei beiden, daß der Rechner von einem, ich nenn es mal "Administrator" auf dem neuesten Stand bzgl. Windows-Updates, Treiber, VirenScannerdateien usw. gehalten werden MUß!
Ansonsten wäre eine Virtuelle Maschine auch einen Alternative (SnapShots)
Hab meins noch mal bissl geändert^^ / verkürzt
Aber SeuBo hat natürlich recht, mit seiner Variante testet man auch in den veränderten Verzeichnissen
ZitatWeit gefehlt
OK! ![]()
Habe dein Script jetzt versucht zu durchschauen aber bin gescheitert^^
Ich greife Oscars Ansatz mal an:
Aufgabe:
Der Desktop soll (bei jedem Start des Rechners?) denselben Desktopinhalt haben, bzw die seit dem letzten Scripstart veränderten (hinzugekommenen) Symbole sollen gelöscht werden.
Lösung:
Alle auf dem Desktop angeordneten Symbole bzw Verweise liegen im Verzeichnis
@desktopdir
[/autoit]. Der Inhalt dieses Verzeichnisses gibt den "Desktop" wieder.
Wenn man diese Dateien speichert und nachher mit den Daten des geänderten Desktops vergleicht, dann ist die Differenz die Menge der zu löschenden Daten.
Also:
Mit dem Script Savedesktopdata.au3 die aktuellen Desktopdaten speichern.
Desktop verändern.
Mit dem Script Restoredesktopdata.au3 die aktuellen Desktopdaten einlesen und mit den gespeicherten vergleichen und ggf löschen.
Script Savedesktopdata.au3
#include <Array.au3>
#include <File.au3>
;desktopdaten werden in die Datei "Desktopdata.dat" gespeichert
$files = ""
$aData = _filelisttoarray(@DesktopDir,"*") ;alle symbole auf dem desktop...
_arraydelete($adata,0)
For $symbol In $aData ;arraydaten splitten und abspeoichern
$files &= $symbol & @CRLF ;jedes in eine Zeile
Next
filedelete("desktopdata.dat")
FileWrite("desktopdata.dat", $files) ;und in eine Datei speichern
Script Restoredesktopdata.au3
#include <Array.au3>
#include <File.au3>
;desktopdaten werden aus der Datei "Desktopdata.dat" gelesen und mit den aktuellen verglichen
$files = ""
$aData = _filelisttoarray(@DesktopDir,"*") ;alle symbole auf dem desktop...
_arraydelete($aData,0)
dim $aSaved_data
_FileReadToArray("Desktopdata.dat",$aSaved_data)
;arraycompare
for $inhalt in $aData
if _arraysearch($aSaved_data,$inhalt)=-1 then ;Symbol nicht in der gespeicherten Liste enthalten
msgbox(0,"Info","Auf dem Desktop wurde seit dem letzten Speichern das Symbol "&$inhalt&" hinzugefügt!"&@crlf&"Das Symbol wird nun gelöscht!")
FileDelete(@DesktopDir&"\"&$inhalt)
EndIf
next
/*EDIT*/ ![]()