man könnte das skript verbessern wenn man in der ini sein standort eingeben könnte und wird das automatisch erkannt
Siehe:
[autoit]$plz = IniRead("Wetter.ini", "Settings", "PLZ", 29259)
[/autoit]man könnte das skript verbessern wenn man in der ini sein standort eingeben könnte und wird das automatisch erkannt
Siehe:
[autoit]$plz = IniRead("Wetter.ini", "Settings", "PLZ", 29259)
[/autoit]Es liegt an meinem Hintergrundbild. Mit einem anderen Bild im Hintergrund geht es.
Hier das Bild mal für euch zum Testen. Vielleicht findet ja jemand das Problem...
Edit: Auch einige der Windows XP Bilder gehen nicht, andere funktionieren wiederum.
Scheinbar geht das Script, wenn kein Hintergrundbild angegeben ist, gar nicht !
Ich benutze keine INI ! Deswegen hatte ich ja Deinen Default-Wert "0" für $posX. Warum sollte ich eine nutzen, Du definierst doch alle Werte per Default beim IniRead().
Ich habe noch etwas was ich nicht finden kann. Das "weather.gif" ist 52x52 Pixel groß. Das Bild soll ja per _GDIPlus_GraphicsDrawImage() hineinkopiert werden. Nur ist es dann im Ergebnis bestimmt 3-4 mal so groß wie im Original. Deswegen ist wahrscheinlich die Gradangabe auch dahinter !
Irgendwas mit der Position passt nicht.
Wenn ich für PosX und PosY jeweils 200 ins Script eintrage, erscheint das Wetter-Symbol auf dem rechten Bildschirmrand (1280x1024) !
Außerdem wird die Temperatur genau hinter der Grafik angezeigt. Siehe Bild... ich hoffe das Hochladen klappt.
Nein, ich nutze auch XP. Nur, wenn nicht notwendig, ohne Adminrechte.
Edit: Das Script holt sich das Hintergrundbild, ändert die Registry, holt das Weather.gif und auch die Temperatur. Nur im dann erzeugten Bild ist nichts zu sehen. Deswegen dachte ich es funktioniert gar nicht. Er zeigt bei mir nur immer das gleiche (nicht das selbe) Bild an.
Idee gut, nur funktionieren tut es bei mir nicht. Weder als User (spiechert das aktuelle Desktopbild als BMP und legt dann eine Dauerpause ein) noch als Administrator (speichert scheinbar kein Bild, löscht aber den Hintergrund beim beenden).
Ich habe mal etwas realisiert, was Dir helfen könnte. Siehe hier: Klick
Dort wird die Funktion "_TCPSendFile" genutzt. Diese ist aber nicht von mir...
Der Client muss beim TCPConnect aber die IP des Servers nutzen !
127.0.0.1 (localhost) geht nur, wenn Client & Server auf einem Rechner sind.
Ein x-beliebiges ? Also das Script kann sich per Zufall eines aussuchen ? Was hat das denn für einen Hintergrund ?
Nein mal im ernst... Ein bischen mehr Erklärung wäre schon nötig.
- ein einzelnes, definiertes Gerät ? Worum handelt es sich ?
- eine ganze USB-Geräteklasse (Drucker, Speicher, ...) ? Welche ?
- alle USB-Geräte ?
Wenn in Deiner Zelle nur die reine Mailadresse steht, sollte es ja auch wie folgt aussehen:
[autoit]#include <INet.au3>
#Include <Excel.au3>
$oXLS = _ExcelBookAttach(@DesktopDir & '\Microsoft Excel - Mappe5.xls')
$MailTo = _ExcelReadCell($oXLS, 3, 9) ;lese aus I3
If $MailTo <> "" Then _INetMail($MailTo, "Betreff", "Text")
Du kannst das natürlich so abfragen und es funktioniert auch, solange das 'CURRENT' das ControlSet 1 ist.
Schau Dir mal den Schlüssel "HKEY_LOCAL_MACHINE\SYSTEM\Select" an. Hier steht welches ControlSet das aktuell, das Default bzw. das "letzte als funktionierend bekannte" ist.
Solange nichts an Deinem System passiert, nimmt er immer wieder das gleiche. Nur wenn diese mal wechselt, dann funktioniert Dein Script nicht mehr richtig. Und wenn Du Dein Script auf verschiedenen Rechnern startest, hast Du den Effekt, das es auf einigen einwandfrei läuft und auf einigen eben nicht (bei denen eben das ControlSet002 das aktuelle ist).
Das "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet" ist nur eine "KOPIE" (eigentlich nur ein Alias) von einem der ControlSet's.
RegRead("HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001
Das ist ganz gefährlich !
Nimm lieber "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet...".
Denn Du weißt nie, wie lange das CurrentControlSet das ControlSet001 bleibt bzw. ist.
Entschuldigung. Das Script in dem angegebenen Thema war noch die ältere Variante. Jetzt ist die neue Version hochgeladen.
Für Dich interessant ist ja im Server der Teil um Zeile 114 (Versand per TCP) und im Client der Bereich um Zeile 34 (Empfang des Bildes).
Ich habe da mal etwas geschrieben, um remote einen Scanvorgang auszulösen. Dabei wird das Bild auch als JPG versendet.
Schau mal hier : Klick
Also doch der Sketch mit Heinz Becker ![]()
Warum sollte das rekursive Auflisten ohne DriveMapAdd nicht laufen ?
Folgendes geht bei mir einwandfrei:
#include <array.au3>
[/autoit] [autoit][/autoit] [autoit]$array = _GetFilesFolder_Rekursiv("\\PCName\Freigabe","*")
_ArrayDisplay($array)
;==================================================================================================
; Function Name: _GetFilesFolder_Rekursiv($sPath [, $sExt='*' [, $iDir=-1 [, $iRetType=0 ,[$sDelim='0']]]])
; Description: Rekursive Auflistung von Dateien und/oder Ordnern
; Parameter(s): $sPath der Basispfad für die Auflistung ('.' -aktueller Pfad, '..' -Parentpfad)
; $sExt Erweiterung für Dateiauswahl '*' oder -1 für alle (Standard)
; $iDir -1 Dateien+Ordner(Standard), 0 nur Dateien, 1 nur Ordner
; optional: $iRetType 0 gibt Array, 1 gibt String zurück
; optional: $sDelim legt Trennzeichen für Stringrückgabe fest
; 0 -@CRLF (Standard) 1 -@CR 2 -@LF 3 -';' 4 -'|'
; Return Value(s): Array (Standard) od. String mit den gefundenen Pfaden der Dateien und/oder Ordner
; Array[0] enthält die Anzahl der gefundenen Dateien/Ordner
; Author(s): BugFix ([email='bugfix@autoit.de'][/email])
;==================================================================================================
Func _GetFilesFolder_Rekursiv($sPath, $sExt='*', $iDir=-1, $iRetType=0, $sDelim='0')
Global $oFSO = ObjCreate('Scripting.FileSystemObject')
Global $strFiles = ''
Switch $sDelim
Case '1'
$sDelim = @CR
Case '2'
$sDelim = @LF
Case '3'
$sDelim = ';'
Case '4'
$sDelim = '|'
Case Else
$sDelim = @CRLF
EndSwitch
If ($iRetType < 0) Or ($iRetType > 1) Then $iRetType = 0
If $sExt = -1 Then $sExt = '*'
If ($iDir < -1) Or ($iDir > 1) Then $iDir = -1
_ShowSubFolders($oFSO.GetFolder($sPath),$sExt,$iDir,$sDelim)
If $iRetType = 0 Then
Local $aOut
$aOut = StringSplit(StringTrimRight($strFiles, StringLen($sDelim)), $sDelim, 1)
If $aOut[1] = '' Then
ReDim $aOut[1]
$aOut[0] = 0
EndIf
Return $aOut
Else
Return StringTrimRight($strFiles, StringLen($sDelim))
EndIf
EndFunc
Func _ShowSubFolders($Folder, $Ext='*', $Dir=-1, $Delim=@CRLF)
If Not IsDeclared("strFiles") Then Global $strFiles = ''
If ($Dir = -1) Or ($Dir = 0) Then
For $file In $Folder.Files
If $Ext <> '*' Then
If StringRight($file.Name, StringLen($Ext)) = $Ext Then _
$strFiles &= $file.Path & $Delim
Else
$strFiles &= $file.Path & $Delim
EndIf
Next
EndIf
For $Subfolder In $Folder.SubFolders
If ($Dir = -1) Or ($Dir = 1) Then $strFiles &= $Subfolder.Path & '\' & $Delim
_ShowSubFolders($Subfolder, $Ext, $Dir, $Delim)
Next
EndFunc
Ich glaube ich habs...
#include <GUIConstants.au3>
[/autoit] [autoit][/autoit] [autoit]GUICreate("Out.exe mit Namen generieren")
$NameID = GUICtrlCreateInput("",20,20,200,20)
$generieren = GUICtrlCreateButton("Erzeuge Out.exe",20,50)
GUISetState()
While 1
$msg = GUIGetMsg()
Switch $msg
Case $GUI_EVENT_CLOSE
Exit
Case $generieren
$name = GUICtrlRead($NameID)
If $name = "" Then
msgbox(0,"Fehler","Geben Sie einen Namen ein !")
Else
_ErzeugeExe($name)
Msgbox(0,"Fertig","Das Script finden sie unter dem Namen 'Out.exe' im Ordner dieses Scripts.")
Exit
EndIf
EndSwitch
WEnd
Func _ErzeugeExe($name)
$fileInhalt = ""
$fileInhalt &= '$name = "'& $name & '"' & @CRLF
$fileInhalt &= '$Id=AgentStartup()' & @CRLF
$fileInhalt &= 'AgentSetPosition($Id[1])' & @CRLF
$fileInhalt &= 'AgentShow($Id[1])' & @CRLF
$fileInhalt &= 'AgentSpeak($Id[1],"Hallo " & $name & " !")' & @CRLF
$fileInhalt &= 'Sleep(5000)' & @CRLF
$fileInhalt &= 'AgentShutdown($Id[0],$Id[1])' & @CRLF
$fileInhalt &= 'Func AgentStartup($char="merlin.acs")' & @CRLF
$fileInhalt &= ' Local $result[2]' & @CRLF
$fileInhalt &= ' $Agent = "Agent.Control.2"' & @CRLF
$fileInhalt &= ' If IsObj($Agent) Then' & @CRLF
$fileInhalt &= ' $Agent = ObjGet("",$Agent)' & @CRLF
$fileInhalt &= ' Else' & @CRLF
$fileInhalt &= ' $Agent = ObjCreate($Agent)' & @CRLF
$fileInhalt &= ' EndIf' & @CRLF
$fileInhalt &= ' $Agent.Connected = 1' & @CRLF
$fileInhalt &= ' $Agent.Characters.Load ("Rover",@WindowsDir & "\Msagent\Chars\"&$char)' & @CRLF
$fileInhalt &= ' $A_Chr = $Agent.Characters.Character("rover")' & @CRLF
$fileInhalt &= ' $result[0]=$Agent' & @CRLF
$fileInhalt &= ' $result[1]=$A_Chr' & @CRLF
$fileInhalt &= ' Return $result' & @CRLF
$fileInhalt &= 'EndFunc' & @CRLF
$fileInhalt &= 'Func AgentShow($CharId)' & @CRLF
$fileInhalt &= ' $CharId.Show()' & @CRLF
$fileInhalt &= 'EndFunc' & @CRLF
$fileInhalt &= 'Func AgentAnimate($CharId,$AnimationName)' & @CRLF
$fileInhalt &= ' $CharId.Play($AnimationName)' & @CRLF
$fileInhalt &= 'EndFunc' & @CRLF
$fileInhalt &= 'Func AgentSpeak($CharId,$Text)' & @CRLF
$fileInhalt &= ' $CharId.Speak($Text)' & @CRLF
$fileInhalt &= 'EndFunc' & @CRLF
$fileInhalt &= 'Func AgentThink($CharId,$Text)' & @CRLF
$fileInhalt &= ' $CharId.Think($Text)' & @CRLF
$fileInhalt &= 'EndFunc' & @CRLF
$fileInhalt &= 'Func AgentSetPosition($CharId,$X=-1,$Y=-1)' & @CRLF
$fileInhalt &= ' If $X=-1 Then $X=@DesktopWidth/2-100' & @CRLF
$fileInhalt &= ' If $Y=-1 Then $Y=@DesktopHeight/2-100' & @CRLF
$fileInhalt &= ' $CharId.MoveTo ($X,$Y)' & @CRLF
$fileInhalt &= 'EndFunc' & @CRLF
$fileInhalt &= 'Func AgentHide($CharId)' & @CRLF
$fileInhalt &= ' $CharId.Hide()' & @CRLF
$fileInhalt &= 'EndFunc' & @CRLF
$fileInhalt &= 'Func AgentShutdown($Agent,$CharId)' & @CRLF
$fileInhalt &= ' $CharId.Hide()' & @CRLF
$fileInhalt &= ' $CharId.Stop()' & @CRLF
$fileInhalt &= ' $Agent.Connected = 0' & @CRLF
$fileInhalt &= ' $Agent = ""' & @CRLF
$fileInhalt &= 'EndFunc'
FileDelete(@TempDir & "\GenExe.au3")
FileWrite(@TempDir & "\GenExe.au3",$fileInhalt)
$au3path = RegRead("HKLM\Software\AutoIt v3\AutoIt","InstallDir")
$prg = $au3path & '\Aut2Exe\Aut2Exe.exe /in "' & @TempDir & '\GenExe.au3"'
$prg &= ' /out "' & @ScriptDir & '\Out.exe"'
RunWait($prg,@TempDir)
Sleep(100)
FileDelete(@TempDir & "\GenExe.au3")
EndFunc
Du schreibst aber immer "Dienste/Programme".
Du solltest Dich mal festlegen, ob es ein Dienst ist (läuft ohne Benutzeranmeldung, kann meist gestartet und gestoppt werden, hat meist kein Fenster) oder ein Programm (läuft nach der Benutzeranmeldung, muss beendet und neu gestartet werden, manchmal mit sichtbarem Fenster) ist.
Für Dienste gibt es zahlreiche Tools und auch AutoIt-UDFs mit denen sich diese Dienste (sogar remote) starte und stoppen lassen.
Nein habe ich natürlich nicht *schäm*
hab es aber nach deinem Tip mal gemacht und siehe das es geht
Wenn Du sie nicht in den AutoIt-Include-Ordner gepackt hast und sie auch nicht in den Ordner mit deinem Script gelegt hast (dann hätte es nämlich auch funktioniert), was hast Du dann mit der "audio.au3" gemacht, welche ich die in Post #11 mitgeschickt haben ![]()
![]()
![]()