normalerweise deklariere ich den LOG Pfad immer am anfang
Spricht doch eindeutig für Opt('MustDeclareVars', 1)
Kann ich nur empfehlen, vermeidet gerade in großen Skripten Konfusionen.
normalerweise deklariere ich den LOG Pfad immer am anfang
Spricht doch eindeutig für Opt('MustDeclareVars', 1)
Kann ich nur empfehlen, vermeidet gerade in großen Skripten Konfusionen.
Das Programm sollte zusätzlich Prozesse überwachen. (zB firefox.de) Damit diese Einträge niemand ändern kann, ist es hier nicht ratsam dies in einer Datei abzulegen, sollte wohl im Programm hinterlegt werden.
Sowas fix zu programmieren ist eigentlich unschön. Wie wäre es denn, alle gewünschten Infos als Parameter zu übergeben.
Aufruf könnte dann so erfolgen:
"mein_programm.exe 'proc=firefox.exe,notepad.exe,calc.exe;ping=google.de,autoit.de'"
Das kannst du selbst: Startpost - Thema bearbeiten - als Erledigt markieren (hab's mal für dich getan)
Gefällt mir gut
Seitdem ich angefangen hatte mich intensiver mit dem Editor Sublime Text zu beschäftigen, hatte ich auch mit JSON-Dateien zu tun, die die Basis für viele Einstellungen und PlugIns dieses Editors darstellen. Und das ist wirklich eine feine Sache. Ich hatte schon damit geliebäugelt, verstärkt JSON für meine AutoIt-Skripte zu verwenden, aber eine vernünftige Schnittstelle fehlte.
Soweit ich das bisher sehe, könnte diese UDF die Lücke bestens ausfüllen.
Danke @AspirinJunkie
Dann erstelle für jeden User eine Log-Datei:
OnAutoItExitRegister("_WriteLog")
Global $sLogFile = @ScriptDir & '\Time\' & @UserName & '.log'
Global $iProcTime = ''
Global $sProcess = 'notepad.exe'
AdlibRegister('_AddTime', 1000)
;HotKeySet('{ESC}', '_Exit')
While Sleep(1000)
WEnd
;Func _Exit()
; If ProcessExists('firefox.exe') Then Return
; IniWrite($sIniFile,'Protocol', 'Time', $iProcTime)
; Exit
;EndFunc
Func _AddTime()
If ProcessExists($sProcess) Then
$iProcTime += 1
;~ ToolTip(_FormatTime($iProcTime))
EndIf
EndFunc
Func _WriteLog()
Local $fH = FileOpen($sLogFile, 1+8)
FileWrite($fH, StringFormat('%s.$s.%s %s: %s%s', @MDAY, @MON, @YEAR, $sProcess, _FormatTime($iProcTime), @CRLF))
FileClose($fH)
EndFunc
Func _FormatTime($iSec)
Local $iHour, $iMin
$iHour = Int($iSec / 3600)
$iSec = Mod($iSec, 3600)
$iMin = Int($iSec / 60)
$iSec = Mod($iSec, 60)
Return StringFormat('%02i:%02i:%02i', $iHour, $iMin, $iSec)
EndFunc ;==>_FormatTime
Alles anzeigen
und wenn du den Index aus einer Variable ausließt musst du zwei Klammern darum setzten (ist wohl ein Bug)
Ich halte das nicht für einen Bug.
Das ist vergleichbar mit jeder anderen Funktion aus AutoIt, die ein Array als Ergebnis liefert. Möchte man dort in einem Atemzug auf einen Wert zugreifen muß man vor dem Zugriff den Aufruf auch extra einklammern und dann den Indexaufruf anhängen: Wert = (Func_liefert_Array)[Index].
Das ist zwar syntaktisch nicht identisch, ich könnte mir aber vorstellen, dass dieselbe Logik dahinter steckt.
Hi,
wenn ihr guinness "SciTE Jump" benutzt, stört euch vielleicht auch, dass das Fenster als eigenständige Anwendung erscheint und nicht an SciTE andockt.
Ich habe jetzt eine kleine Anwendung geschrieben, die überwacht ob SciTE mit/ohne "SciTE Jump" läuft und entsprechend die Fenster nebeneinander anordnet.
"SciTE Jump" kann links oder rechts neben SciTE angeordnet werden, die gewünschte Fensterbreite ist voreinstellbar, ebenso kann gewählt werden, dass "SciTE Jump" automatisch bei Start von SciTE mitgestartet wird.
Geregelt wird das praktischerweise über Einträge in "SciTEUser.properties"
#~ Settings für "SciTE Jump"
#~ Automatisch mit SciTE starten 0/1 (ohne Angabe: 0)
scite.jump.autostart=1
#~ Breite des "SciTE Jump" Fensters (ohne Angabe: 360)
scite.jump.width=
#~ Position des "SciTE Jump" Fensters (left/right, ohne Angabe: right)
scite.jump.pos=
Das Skript kompilieren und über Windows-Autostart mit ausführen.
Viel Spaß damit.
;-- TIME_STAMP 2017-07-29 14:42:50 v 0.1
#cs Properties Values
scite.jump.autostart= no value == 0 (Default) /or 1
scite.jump.width= no value == 360 (Default) /or your value
scite.jump.pos= no value == right (Default) /or left
#ce
Opt("TrayIconHide", 1)
Global $SciteDefaultHome = StringRegExpReplace(RegRead('HKEY_LOCAL_MACHINE\SOFTWARE\Classes\AutoIt3Script\DefaultIcon', ''), '(.+)(Icons.+$)', '$1SciTE')
Global $iTBLeft, $iTBTop, $iTBRight, $iTBBottom, $aTB = _GetTaskbarPosition()
Global $iTBWidth = 0, $iTBHeight = 0, $iLeft = 0, $iTop = 0
$iTBLeft = $aTB[0]
$iTBTop = $aTB[1]
$iTBRight = $aTB[2]
$iTBBottom = $aTB[3]
If $iTBLeft = 0 And $iTBTop = 0 Then
If $iTBRight < $iTBBottom Then
$iTBWidth = $iTBRight
$iLeft = $iTBWidth
Else
$iTBHeight = $iTBBottom
$iTop = $iTBHeight
EndIf
ElseIf $iTBTop <> 0 Then
$iTBHeight = $iTBBottom - $iTBTop
Else
$iTBWidth = $iTBRight - $iTBLeft
EndIf
Global $iWidth = @DesktopWidth - $iTBWidth, $iHeight = @DesktopHeight - $iTBHeight
Global $hWndSciTE, $aJump, $hWndJump, $bSciTERuns = False, $bJumpRuns = False, $bArranged = False
Global $iSciTEState = 0 ; 0=closed/ 1=currently started/ 2=running
While True
; Fenster Handle SciTE
$hWndSciTE = WinGetHandle('[CLASS:SciTEWindow]')
If @error Then $hWndSciTE = 0
$bSciTERuns = IsHWnd($hWndSciTE) ? True : False
; Bedingung für Autostart Jump
If $iSciTEState = 1 And $bSciTERuns Then $iSciTEState = 2 ; SciTE läuft
If $iSciTEState = 0 And $bSciTERuns Then $iSciTEState = 1 ; SciTE wurde soeben gestartet
If Not $bSciTERuns Then $iSciTEState = 0 ; SciTE ist geschlossen
If (_GetProperty('scite.jump.autostart', 0) = '1' ? True : False) _
And $iSciTEState = 1 Then _
ShellExecute($SciteDefaultHome & '\SciTE Jump\SciTE Jump.exe', '', $SciteDefaultHome)
; Fenster Handle Jump
$aJump = _GetWindowsByProcess('SciTE Jump.exe')
If Not @error Then
For $i = 1 To $aJump[0][0]
If $aJump[$i][0] = 'SciTE Jump' Then
$hWndJump = $aJump[$i][1]
ExitLoop
EndIf
Next
Else
$hWndJump = 0
EndIf
$bJumpRuns = IsHWnd($hWndJump) ? True : False
; Fenster anordnen
If (Not $bArranged) And $bSciTERuns And $bJumpRuns Then ; beides offen - noch nicht angeordnet
_MoveWindows(2) ; Fenster anordnen
$bArranged = True ; Variable für angeordnet setzen
ElseIf $bArranged And $bSciTERuns And (Not $bJumpRuns) Then ; Jump wurde geschlossen, $bArranged auf False
_MoveWindows(1) ; SciTE wieder auf FullScreen setzen
$bArranged = False ; Variable für nicht angeordnet setzen
EndIf
Sleep(500)
WEnd
Func _MoveWindows($iFlag)
Local $iWidthJump = _GetProperty('scite.jump.width', 360)
Local $sPosJump = _GetProperty('scite.jump.pos', 'right')
Switch $iFlag
Case 1
; SciTE wieder auf Fullscreen
WinMove($hWndSciTE, '', $iLeft, $iTop, $iWidth, $iHeight)
Case 2
; Jump auf Breite aus Proprties setzen und neben SciTE an Position aus Proprties setzen
If $sPosJump = 'left' Then
WinMove($hWndJump, '', $iLeft, $iTop, $iWidthJump, $iHeight)
WinMove($hWndSciTE, '', $iLeft+$iWidthJump, $iTop, $iWidth-$iWidthJump, $iHeight)
Else
WinMove($hWndSciTE, '', $iLeft, $iTop, $iWidth-$iWidthJump, $iHeight)
WinMove($hWndJump, '', $iLeft+$iWidth-$iWidthJump, $iTop, $iWidthJump, $iHeight)
EndIf
EndSwitch
EndFunc ;==>_MoveWindows
Func _GetTaskbarPosition()
Local $tRect = DllStructCreate("long;long;long;long"), $hWnd, $ret
$ret = DllCall("user32.dll", 'long', "FindWindow", 'str', "Shell_traywnd", 'str', "")
$hWnd = $ret[0]
DllCall("User32.dll", "int", "GetWindowRect", "hwnd", $hWnd, "ptr", DllStructGetPtr($tRect))
Local $aRet[4] = [DllStructGetData($tRect, 1),DllStructGetData($tRect, 2), _
DllStructGetData($tRect, 3),DllStructGetData($tRect, 4)]
Return $aRet
EndFunc ;==>_GetTaskbarPosition
Func _GetProperty($sProperty, $sDefault='')
Local $sPathAU3Prop = StringTrimRight(@AutoItExe, 11) & "SciTE\properties\au3.properties" ; C:\Program Files (x86)\AutoIt3\SciTE\properties\au3.properties
Local $sPathUserProp = @LocalAppDataDir & "\AutoIt v3\SciTE\SciTEUser.properties" ; C:\Users\[USER]\AppData\Local\AutoIt v3\SciTE\SciTEUser.properties
Local $sRead = '', $sValueReturn = $sDefault, $aMatch
Local $sPattern = $sProperty & "=([^\r\n]+)"
If FileExists($sPathUserProp) Then $sRead = FileRead($sPathUserProp)
$aMatch = StringRegExp($sRead, $sPattern, 1)
If @error Then
If FileExists($sPathAU3Prop) Then $sRead = FileRead($sPathAU3Prop)
$aMatch = StringRegExp($sRead, $sPattern, 1)
If Not @error Then $sValueReturn = $aMatch[0]
Else
$sValueReturn = $aMatch[0]
EndIf
Return $sValueReturn
EndFunc ;==>_GetProperty
Func _GetWindowsByProcess($vProcess) ; Name or PID
Local $aWnd = WinList(), $aRet[1][2], $aProc
If Not ProcessExists($vProcess) Then Return SetError(2,0,$aRet)
If Not IsNumber($vProcess) Then
$aProc = ProcessList($vProcess)
If Not @error Then
If $aProc[0][0] > 0 Then $vProcess = $aProc[1][1]
EndIf
EndIf
For $i = 1 To $aWnd[0][0]
If WinGetProcess($aWnd[$i][0]) = $vProcess Then
If BitAND(WinGetState($aWnd[$i][1]), 2) Then
$aRet[0][0] += 1
ReDim $aRet[$aRet[0][0] + 1][2]
$aRet[$aRet[0][0]][0] = $aWnd[$i][0]
$aRet[$aRet[0][0]][1] = $aWnd[$i][1]
EndIf
EndIf
Next
If $aRet[0][0] = 0 Then Return SetError(1,0,$aRet)
Return $aRet
EndFunc ;==>_GetWindowsByProcess
Alles anzeigen
Ich vermute, die relevante Dll ist die HIDComm.dll.
Im Moment habe ich nicht die Zeit das tiefer zu ergründen, aber falls jemand anders nachsehen will, hier mal die Funktionsliste der Dll
File: HIDComm.dll
Function Name Address Relative Address Ordinal
public: __thiscall CHIDComm::CHIDComm(class CHIDComm const &) 0x10001020 0x00001020 1 (0x1)
public: __thiscall CHIDComm::CHIDComm(void) 0x10001130 0x00001130 2 (0x2)
public: __thiscall CHIDCommSTD::CHIDCommSTD(class CHIDCommSTD const &) 0x10001730 0x00001730 3 (0x3)
public: __thiscall CHIDCommSTD::CHIDCommSTD(void) 0x100018a0 0x000018a0 4 (0x4)
public: virtual __thiscall CHIDComm::~CHIDComm(void) 0x10001170 0x00001170 5 (0x5)
public: virtual __thiscall CHIDCommSTD::~CHIDCommSTD(void) 0x10001900 0x00001900 6 (0x6)
public: class CHIDComm & __thiscall CHIDComm::operator=(class CHIDComm const &) 0x10001060 0x00001060 7 (0x7)
public: class CHIDCommSTD & __thiscall CHIDCommSTD::operator=(class CHIDCommSTD const &) 0x100017d0 0x000017d0 8 (0x8)
const CHIDComm::`vftable' 0x10003144 0x00003144 9 (0x9)
const CHIDCommSTD::`vftable' 0x10003168 0x00003168 10 (0xa)
public: virtual long __thiscall CHIDComm::Close(void) 0x10001330 0x00001330 11 (0xb)
public: virtual long __thiscall CHIDCommSTD::Close(void) 0x10001ab0 0x00001ab0 12 (0xc)
public: void __thiscall CHIDComm::GetDevicePath(wchar_t *) 0x10001710 0x00001710 13 (0xd)
public: virtual bool __thiscall CHIDComm::GetHIDAttCap(struct CHIDComm::_HID_ATTRIBUTES_CAPABILITES *) 0x10001660 0x00001660 14 (0xe)
public: virtual bool __thiscall CHIDComm::GetHIDAttCap(wchar_t const *,struct CHIDComm::_HID_ATTRIBUTES_CAPABILITES *) 0x10001560 0x00001560 15 (0xf)
public: unsigned long __thiscall CHIDComm::GetInReportLength(void) 0x10001680 0x00001680 16 (0x10)
public: unsigned long __thiscall CHIDComm::GetOutReportLength(void) 0x100016a0 0x000016a0 17 (0x11)
public: bool __thiscall CHIDComm::IsOpen(void)const 0x10001010 0x00001010 18 (0x12)
public: virtual long __thiscall CHIDComm::MakeHIDReport(void const *,unsigned int,struct CHIDComm::_HID_REPORT *,unsigned char) 0x100016c0 0x000016c0 19 (0x13)
public: virtual bool __thiscall CHIDCommSTD::OnData(unsigned char *,unsigned long) 0x10001b10 0x00001b10 20 (0x14)
public: virtual long __thiscall CHIDComm::Open(wchar_t const *) 0x100011b0 0x000011b0 21 (0x15)
public: virtual long __thiscall CHIDCommSTD::Open(wchar_t const *) 0x10001a20 0x00001a20 22 (0x16)
public: virtual long __thiscall CHIDComm::Read(void *,unsigned int,unsigned long *,struct _OVERLAPPED *,unsigned long) 0x10001470 0x00001470 23 (0x17)
public: virtual long __thiscall CHIDCommSTD::Read(void *,unsigned int,unsigned long *,struct _OVERLAPPED *,unsigned long) 0x10001b70 0x00001b70 24 (0x18)
protected: static unsigned long __stdcall CHIDCommSTD::ThreadProc(void *) 0x10001960 0x00001960 25 (0x19)
protected: virtual unsigned long __thiscall CHIDCommSTD::ThreadProc(void) 0x10001970 0x00001970 26 (0x1a)
public: virtual long __thiscall CHIDComm::Write(void const *,unsigned int,unsigned long *,struct _OVERLAPPED *,unsigned long) 0x10001370 0x00001370 27 (0x1b)
public: virtual long __thiscall CHIDCommSTD::Write(void const *,unsigned int,unsigned long *,struct _OVERLAPPED *,unsigned long) 0x10001b20 0x00001b20 28 (0x1c)
Alles anzeigen
Die Kenntnis der Funktionen und Parametertypen allein reicht aber leider nicht, man muss ja wissen, welche Werte erforderlich sind und in welchem Zusammenhang die Funktionsaufrufe zum von dir gewünschten Ergebnis führen. Deshalb wäre eine Dokumentation nützlich. Vielleicht kannst du die beim Hersteller anfragen?
(zb rechtsklick oder Taste 11 der maus usw...die Maus zuhause hat 15 Tasten)
Ich gehe mal davon aus, dass für diese Maus extra Treiber installiert wurden.
Du müsstest also direkt die Treiber-Dll aufrufen mit der entsprechenden Funktion für die gewünschte Maustaste. Ist machbar, wenn du eine Doku zur Dll auftreiben kannst - erfahrungsgemäß ist das aber leider sehr unwahrscheinlich.
Schau aber zumindest mal nach, welche Dll das ist und google fleißig, eventuell hast du ja doch Glück.
@Tuxedo:
Schau dir mal mein SciTE-Plugin für TimeStamp/Versionsverwaltung an.
Wird also bei dir die SciTE-Version aus dem Beta Ordner geöffnet?
In den Beta-Ordner von AutoIt gehört keine separate SciTE-Installation! Es gibt für Stable und Beta nur eine SciTE-Installation (im Pfad AutoIt3).
Da liegt dann sicher dein Problem. Du hast ein SciTE zu viel.
Du schmeißt da was durcheinander.
Es gibt keine SciTE-Beta.
Was du meinst ist die AutoIt-Beta und entsprechend aus SciTE heraus:
Run-Stable F5
Run-Beta Alt+F5
Das funktioniert natürlich nur, wenn du auch die Beta ordentlich installiert hast. Vermutlich ist da bei dir was schief gelaufen. Einfach nochmal deinstallieren und neu installieren.
Der Grundgedanke zum Skript ist eigentlich die Verkörperung von AutoIt --> Automatisiere Es!
Die funktionelle Umsetzung ist soweit dem Ziel entsprechend.
Es wurde ja schon Einiges gesagt (Notation, Struktur etc.), da möchte ich nicht weiter drauf eingehen.
Ich habe der Einfachheit halber im Skript meine Anmerkungen
; [BF]
; Anmerkung
;[/BF]
eingefügt.
If _Singleton("Smartclip", 1) = 0 Then
MsgBox(4144, "Warnung", "Script wird beendet da schon eine" & @CRLF & "Instanz davon aktiv ist" & @CRLF & "Erkennbar am grünen Kreuz im Systemtray")
Exit
EndIf
; [BF]
; Variablen sollte man immer deklarieren, besserer Stil und vermeidet Probleme.
; Erzwingen mit: Opt('MustDeclareVars', 1)
; hier: Global $Fehler, $cURLFehler -- über Notation ($sFehler statt $Fehler) wurde schon gesprochen, gehe ich nicht weiter drauf ein
; [/BF]
If Not FileExists("curl.exe") or Not FileExists("curl-ca-bundle.crt") Then
$Fehler = "Datei curl.exe oder"&@LF
$Fehler &= "Datei curl-ca-bundle.crt"&@LF
$Fehler &= "wurde nicht gefunden - Name falsch?"&@LF
$Fehler &= "Mehr Infos im Handbuch unter"&@LF&"cURL-Fehler"
SplashTextOn("Fehler", $Fehler, 500, 220 , MouseGetPos(0)-250, MouseGetPos(1)-110, 32,"Georgia", 20, 600)
$cURLFehler = TimerInit()
While TimerDiff($cURLFehler) < 7000
Sleep(100)
WEnd
Exit
Endif
TraySetIcon("GrünesKreuz.ico")
#cs
Version 1.70
Erstellt unter autoit Portable 3.3.12.0 am 21.Juli 2017
Author: Tuxedo auf Autoit.de
F1 - zeigt die verfügbaren Tastenkombination für 4 Sekunden an.
Ausführliche Anleitung in der beiligenden Smartclip_Handbuch.rtf
Das Programm funktioniert sehr einfach, es können Text-Abschnitte Hyper-Links und Grafiken(allerdings nur solche
die einen Link besitzen und vom Typ GIF JPG PNG sind) kopiert und wieder eingefügt werden.
Im gesamten reagiert das Programm auf Veränderungen im Clipboard - Zwischenablage und auf CTRL+c und CTRL+v
Da es Seiten gibt die beim Bilder kopieren Probleme machen, habe ich zusätzlich eine Meldung eingebaut die
erscheint wenn keine Bild-Kopie möglich ist und gleichzeitig wird im gespeicherten Clipboardeintrag statt
des Bildes ein Hinweis und der Link zum Bild eingefügt, damit nach dem Einfügen auch sieht wo das Bild sein sollte.
Dann kann es einfach manuell im Browser geladen und händisch kopiert werden, oder man macht es einfach so wie man es
im Browser ohne das Tool machen würde(Grafik kopieren+einfügen oder Bild aufrufen und Drag and Drop).
Die Code-Teile um das Bild ins Clipboard zu bringen stammen vom User "UEZ" auf Autoit.de Herzlichen Dank an "UEZ"
weitere Hilfe von @Alpines @autoiter und @Musashi alle auf autoit.de zuhause.
#ce
#include <Clipboard.au3>
#include <Gdiplus.au3>
; [BF]
; HotkeySet würde ich vermeiden.
; Ich würde die Hotkeys mit GUISetAccelerators() erstellen. Dazu einfach eine unsichtbare GUI (z.B. 1*1px groß) verwenden.
; Verhindert mögliche Konflikte mit Hotkeys anderer Programme
; [/BF]
HotKeySet("{F1}", "F_Hilfe")
HotKeySet("{F2}", "F_Ende")
HotKeySet("{F3}", "F_DelArray")
HotKeySet("^!p", "F_Pause")
HotKeySet("^c", "F_Kopieren")
HotKeySet("^v", "F_Einfuegen")
$Anzahl = 20; Standardwert für mögliche ClipBoard Kopien
If @Compiled = True Then
$Anzahl = Number(StringRight(@ScriptName, 6) - StringRight(@ScriptName, 4))
If @error Then $Anzahl = Null
If $Anzahl < 5 Or $Anzahl > 50 Then $Anzahl = 20;Grenzwert mögliche Clipboard-Kopien nur für die EXE-Version gültig
EndIf
Dim $Clip[$Anzahl];Array zum Speichern der Clipinhalte
$Cstep = 0;Integer Wert Zähler für kopierte Clips
$Vstep = 0;Integer Wert Zähler für eingefügte Clips
Dim $TimerKurz, $TimerLang, $TimerExtraLang;Double für Zahlen mit Kommastellen
$Aktiv = True;Boolscher WErt
$NoImageDelete = True;Boolscher Wert
$hUser32 = DllOpen("user32.dll");Handle für die _IsPressed Funktion
F_Hilfe()
ClipPut("")
While 1
While $Aktiv = False
ToolTip("Smartclip wird pausiert", MouseGetPos(0) + 100, MouseGetPos(1) - 30, "Toggle Pause mit ALT+p")
Sleep(500)
WEnd
; [/BF]
; Hier fragst du _IsPressed bool'sch ab (Is -- Is Not), an anderen Stellen werden bool'sche Variablen mit "$bVar = True/False" geprüft. Könnte man vereinheitlichen.
; [/BF]
If (ClipGet() <> "" And Not _IsPressed("11", $hUser32)) Then F_LinkCopy()
If _IsPressed("11", $hUser32) And Not ClipGet() = "" Then F_BildCopy()
; [BF]
; zu den Timern:
; Der Sinn soll ja sein, dass der User Zeit hat zu Lesen und diese variiert je nach Info.
; Ich hatte vor vielen Jahren mal eine Funktion erstellt, die ToolTip nach Zeit ODER bei Mausbewegung schließt.
; Da kann der User Lesen und wenn er fertig ist, eine Mausbewegung und der Tip wird beendet - vielleicht ist das für dich interessant.
; Findest du hier: https://autoit.de/index.php/Thread/3294-ToolTip-beenden-mit-Mausbewegung-bzw-nach-Zeitablauf/?postID=23314#post23314
; [/BF]
If TimerDiff($TimerKurz) > 1200 And TimerDiff($TimerKurz) < 1700 Then SplashOff()
If TimerDiff($TimerLang) > 2000 And TimerDiff($TimerLang) < 2500 Then SplashOff()
If TimerDiff($TimerExtraLang) > 4000 And TimerDiff($TimerExtraLang) < 4500 Then SplashOff()
Sleep(20)
WEnd
Func F_LinkCopy()
If $Cstep > UBound($Clip) - 1 Then
SplashTextOn("Warnung", '"Keine Clips mehr verfügbar' & @CRLF & 'Weitermachen mit "EINFÜGEN"', 250, 120, MouseGetPos(0), MouseGetPos(1), 16, "Arial", 14, 400)
$TimerLang = TimerInit()
ClipPut("")
Return
EndIf
$Clip[$Cstep] = ClipGet()
SplashTextOn("Titel", "Clip " & $Cstep & " wurde gespeichert", 270, 50, MouseGetPos(0), MouseGetPos(1), 17, "Arial", 14, 400)
$TimerKurz = TimerInit()
$Cstep += 1
ClipPut("")
EndFunc ;==>F_LinkCopy
Func F_BildCopy()
Local $Url
$NoImageDelete = True;Schalter als Entscheidungshilfe ob ein Clip gelöscht wird falls keine er Bilddaten enthält
If $Cstep > UBound($Clip) - 1 Then
SplashTextOn("Warnung", '"Keine Clips mehr verfügbar' & @CRLF & 'Weitermachen mit "EINFÜGEN"', 250, 120, MouseGetPos(0), MouseGetPos(1), 16, "Arial", 14, 400)
$TimerLang = TimerInit()
ClipPut("")
Return
EndIf
If Stringleft(ClipGet(),4) <> "http" Then
Local $Bild = FileOpen(ClipGet(),16)
$Clip[$Cstep] = FileRead($Bild)
FileClose($Bild)
Else
$Url = ClipGet()
#Region BildladeBlock
RunWait(@ComSpec & " /c """ & '"' & @ScriptDir & '"' & "\curl.exe " & $Url & " >> " & '"' & @ScriptDir & '"' & "\Bild""", "", @SW_HIDE)
$Clip[$Cstep] = Binary(FileRead(@ScriptDir & "\Bild"))
Sleep(200)
FileDelete(@ScriptDir & "\Bild")
Endif
#EndRegion BildladeBlock
If StringLeft($Clip[$Cstep], 10) = "0x89504E47" Then $NoImageDelete = False;0x89504E47 = .PNG
If StringLeft($Clip[$Cstep], 10) = "0xFFD8FFE0" Then $NoImageDelete = False;0xFFD8FFE0 = .JPG
If StringLeft($Clip[$Cstep], 8) = "0x474946" Then $NoImageDelete = False;0x474946 = .GIF
If StringLeft($Clip[$Cstep],8) = "0X49492A" Then $NoImageDelete = False;0x49492A = .TIF
;If StringLeft($Clip[$Cstep], 8) = "0x1F8B08" Then $NoImageDelete = False;0x1F8B08 = .ICO
If $NoImageDelete = True Then $Clip[$Cstep] = ""
If $Clip[$Cstep] = "" Then
MsgBox(4096, "Meldung", "Download-Fehler" & @CRLF & "Das Bild muss händisch geladen werden")
$Clip[$Cstep] = 'Folgendes Bild muss von Hand nachgeladen werden' & @CRLF & 'Am Besten per "Grafik kopieren" oder "Drag and Drop"' & @CRLF & $Url
EndIf
SplashTextOn("Titel", "Clip " & $Cstep & " wurde gespeichert", 270, 50, MouseGetPos(0), MouseGetPos(1), 17, "Arial", 14, 400)
$TimerKurz = TimerInit()
$Cstep += 1
ClipPut("")
EndFunc ;==>F_BildCopy
Func F_Kopieren()
If $Cstep > UBound($Clip) - 1 Then
SplashTextOn("Warnung", '"Keine Clips mehr verfügbar' & @CRLF & 'Weitermachen mit "EINFÜGEN"', 250, 120, MouseGetPos(0), MouseGetPos(1), 16, "Arial", 16, 700)
$TimerLang = TimerInit()
ClipPut("")
Sleep(50)
Return
EndIf
HotKeySet("^c")
; [BF]
; Bei Send() wird mir immer mulmig.
; Ich würde mal probieren, ob man evtl. mit _SendMessage() eine Möglichkeit findet STRG+C auszulösen (nur so ein Gedanke).
; [/BF]
Send("^c")
; [BF]
; Auch das Sleep() ist kein sicherer Kandidat. An irgendeinem Parameter sollte sich festmachen lassen, dass die richtege Funktion aufgerufen wird.
; Das "Sleep" bedeutet ja, dass du auf eine Beendigung von Irgendwas warten musst. - Das sollte man ergründen.
; [/BF]
Sleep(100);Diese Zeile ist sehr wichtig, sonst wird ständig F_BildCopy statt F_Kopieren aufgerufen
If ClipGet() <> "" Then;Da ich hier ändern musste kann jetzt der gleiche Einrtag mehrmals kopiert werden
$Clip[$Cstep] = ClipGet()
SplashTextOn("Titel", "Clip " & $Cstep & " wurde gespeichert", 270, 50, MouseGetPos(0), MouseGetPos(1), 17, "Arial", 14, 400)
$TimerKurz = TimerInit()
$Cstep += 1
EndIf
ClipPut("")
;Sleep(50)
HotKeySet("^c", "F_Kopieren")
EndFunc ;==>F_Kopieren
Func F_Einfuegen()
HotKeySet("^v")
If $Vstep >= $Cstep Then
$Vstep = 0
$Cstep = 0
SplashTextOn("Titel", "Alles eingefügt + Reset" & @CRLF & "Script wieder kopierbereit", 270, 120, MouseGetPos(0), MouseGetPos(1), 16, "Arial", 16, 700)
$TimerLang = TimerInit()
ClipPut("")
HotKeySet("^v", "F_Einfuegen")
Return
EndIf
If StringLeft($Clip[$Vstep], 10) = "0x89504E47" Then Return F_BildEinfuegen();0x89504E47 = .PNG
If StringLeft($Clip[$Vstep], 10) = "0xFFD8FFE0" Then Return F_BildEinfuegen();0xFFD8FFE0 = .JPG
If StringLeft($Clip[$Vstep], 8) = "0x474946" Then Return F_BildEinfuegen();0x474946 = .GIF
If StringLeft($Clip[$Vstep],8) = "0x49492A" Then Return F_BildEinfuegen();0x49492A = .TIF
;If StringLeft($Clip[$Vstep], 8) = "0x1F8B08" Then Return F_BildEinfuegen();0x1F8B08 = .ICO
ClipPut($Clip[$Vstep])
Send("^v")
SplashTextOn("Titel", "Clip " & $Vstep & " von " & $Cstep - 1 & " wurde eingefügt ", 270, 50, MouseGetPos(0), MouseGetPos(1), 17, "Arial", 14, 400)
$TimerKurz = TimerInit()
$Clip[$Vstep] = ""
ClipPut("")
$Vstep += 1
HotKeySet("^v", "F_Einfuegen")
EndFunc ;==>F_Einfuegen
Func F_BildEinfuegen()
HotKeySet("^v")
;<== UEZ
_GDIPlus_Startup();dieser ganze Block stammt von UEZ
$hBild = _GDIPlus_BitmapCreateFromMemory($Clip[$Vstep], True) ;erstellt dir ein GDI Bitmap vom InetRead.
$hClipboard_Bild = _WinAPI_CopyImage($hBild, 0, 0, 0, BitOR($LR_COPYDELETEORG, $LR_COPYRETURNORG))
_ClipBoard_Open(0)
_ClipBoard_Empty()
_ClipBoard_SetDataEx($hClipboard_Bild, $CF_BITMAP)
_ClipBoard_Close()
_WinAPI_DeleteObject($hBild)
_WinAPI_DeleteObject($hClipboard_Bild)
_GDIPlus_Shutdown()
;==> UEZ
Send("^v")
Sleep(500)
If $Vstep >= $Cstep Then
$Vstep = 0
$Cstep = 0
SplashTextOn("Titel", "Alles eingefügt + Reset" & @CRLF & "Script wieder kopierbereit", 250, 120, MouseGetPos(0), MouseGetPos(1), 16, "Arial", 16, 700)
$TimerLang = TimerInit()
ClipPut("")
HotKeySet("^v", "F_Einfuegen")
Return
EndIf
HotKeySet("^v", "F_Einfuegen")
SplashTextOn("Titel", "Clip " & $Vstep & " von " & $Cstep - 1 & " wurde eingefügt ", 270, 50, MouseGetPos(0), MouseGetPos(1), 17, "Arial", 14, 400)
$TimerKurz = TimerInit()
$Clip[$Vstep] = ""
ClipPut("")
$Vstep += 1
EndFunc ;==>F_BildEinfuegen
Func F_DelArray()
SplashTextOn("Titel", "Reset wird durchgeführt", 250, 50, MouseGetPos(0), MouseGetPos(1), 16, "Arial", 14, 400)
$TimerLang = TimerInit()
For $i = 0 To UBound($Clip) - 1
$Clip[$i] = ""
Next
$Cstep = 0
$Vstep = 0
ClipPut("")
EndFunc ;==>F_DelArray
Func F_Pause()
ClipPut("")
ToolTip("")
SplashOff()
$Aktiv = Not $Aktiv
If $Aktiv = True Then
HotKeySet("^c", "F_Kopieren")
HotKeySet("^v", "F_Einfuegen")
Else
HotKeySet("^c")
HotKeySet("^v")
EndIf
EndFunc ;==>F_Pause
Func F_Hilfe()
SplashTextOn("Titel", "F1 - Hilfe anzeigen" & @CRLF & "F2 - Programm Beenden" & @CRLF & "F3 - Reset Daten Löschen" & @CRLF & "CTRL+ALT+p - Pause" & @CRLF & "Ctrl+c - Kopieren" & @CRLF & "CTRL+v - Einfügen", 300, 150, MouseGetPos(0), MouseGetPos(1), 37, "arial", 14, 600)
$TimerExtraLang = TimerInit()
EndFunc ;==>F_Hilfe
Func _IsPressed($sHexKey, $vDLL = 'user32.dll')
; $hexKey must be the value of one of the keys.
; _Is_Key_Pressed will return 0 if the key is not pressed, 1 if it is.
Local $a_R = DllCall($vDLL, "short", "GetAsyncKeyState", "int", '0x' & $sHexKey)
If @error Then Return SetError(@error, @extended, False)
Return BitAND($a_R[0], 0x8000) <> 0
EndFunc ;==>_IsPressed
; #FUNCTION# ====================================================================================================================
; Author ........: Valik
; Modified.......:
; ===============================================================================================================================
Func _Singleton($sOccurenceName, $iFlag = 0)
Local Const $ERROR_ALREADY_EXISTS = 183
Local Const $SECURITY_DESCRIPTOR_REVISION = 1
Local $tSecurityAttributes = 0
If BitAND($iFlag, 2) Then
; The size of SECURITY_DESCRIPTOR is 20 bytes. We just
; need a block of memory the right size, we aren't going to
; access any members directly so it's not important what
; the members are, just that the total size is correct.
Local $tSecurityDescriptor = DllStructCreate("byte;byte;word;ptr[4]")
; Initialize the security descriptor.
Local $aRet = DllCall("advapi32.dll", "bool", "InitializeSecurityDescriptor", _
"struct*", $tSecurityDescriptor, "dword", $SECURITY_DESCRIPTOR_REVISION)
If @error Then Return SetError(@error, @extended, 0)
If $aRet[0] Then
; Add the NULL DACL specifying access to everybody.
$aRet = DllCall("advapi32.dll", "bool", "SetSecurityDescriptorDacl", _
"struct*", $tSecurityDescriptor, "bool", 1, "ptr", 0, "bool", 0)
If @error Then Return SetError(@error, @extended, 0)
If $aRet[0] Then
; Create a SECURITY_ATTRIBUTES structure.
$tSecurityAttributes = DllStructCreate($tagSECURITY_ATTRIBUTES)
; Assign the members.
DllStructSetData($tSecurityAttributes, 1, DllStructGetSize($tSecurityAttributes))
DllStructSetData($tSecurityAttributes, 2, DllStructGetPtr($tSecurityDescriptor))
DllStructSetData($tSecurityAttributes, 3, 0)
EndIf
EndIf
EndIf
Local $aHandle = DllCall("kernel32.dll", "handle", "CreateMutexW", "struct*", $tSecurityAttributes, "bool", 1, "wstr", $sOccurenceName)
If @error Then Return SetError(@error, @extended, 0)
Local $aLastError = DllCall("kernel32.dll", "dword", "GetLastError")
If @error Then Return SetError(@error, @extended, 0)
If $aLastError[0] = $ERROR_ALREADY_EXISTS Then
If BitAND($iFlag, 1) Then
DllCall("kernel32.dll", "bool", "CloseHandle", "handle", $aHandle[0])
If @error Then Return SetError(@error, @extended, 0)
Return SetError($aLastError[0], $aLastError[0], 0)
Else
Exit -1
EndIf
EndIf
Return $aHandle[0]
EndFunc ;==>_Singleton
Func F_Ende()
DllClose($hUser32)
Exit
EndFunc ;==>F_Ende
Alles anzeigen
Es gibt den Parameter "WorkingDir". Der ist bei solchen Problemen recht hilfreich. Dort setzt du das Programmverzeichnis deines Standard-PDF-Programms (kannst du aus der Registry auslesen) und dann sollte es auch klappen.
Du kannst auch einen "kreativen Workaround" nutzen: Verwende in den Item ein Image (nur 1px breit in Hintergrundfarbe mit der gewünschten Höhe) um die Zeilenhöhe anzupassen:
#include <WinAPI.au3>
#include <GuiListView.au3>
#include <GuiImageList.au3>
Func _TestLV($iRowHeight=16, $iBGColor=0xFFFFFF)
Local $hGui = GUICreate('')
Local $iStylesEx = BitOR($LVS_EX_GRIDLINES, $LVS_EX_FULLROWSELECT, $LVS_EX_SUBITEMIMAGES)
Local $cLV = GuiCtrlCreateListView('', 10, 10, 350, 300, BitOR($LVS_SHOWSELALWAYS, $LVS_NOSORTHEADER, $LVS_REPORT))
Local $hLV = GUICtrlGetHandle($cLV)
_GUICtrlListView_SetExtendedListViewStyle($hLV, $iStylesEx)
Local $hImageList = _GUIImageList_Create(1, $iRowHeight)
_GUIImageList_Add($hImageList, _WinAPI_CreateSolidBitmap($hLV, $iBGColor, 1, $iRowHeight))
_GUICtrlListView_SetImageList($hLV, $hImageList, 1)
_GUICtrlListView_AddColumn($hLV, "Items", 120)
For $i = 1 To 10
_GUICtrlListView_AddItem($hLV, "Item " & $i, 0)
Next
GUISetState(@SW_SHOW)
Do
Until GUIGetMsg() = -3
EndFunc
_TestLV(25) ; 1px breites Bitmap in Hintergrundfarbe wird mit eingezeichnet, Höhe variabel
Alles anzeigen
Der Kode Form Designer ist schlecht.
Würde ich so nicht unterschreiben. Er ist ein gutes Werkzeug um Anfängern zu Helfen, grafische Elemente anzuordnen. Je vertrauter man mit AutoIt ist, desto weniger nutzt man Koda.
Wenn du fit bist, machst du die Anordnung eh im Kopf. Geht schneller und ist genauer (man weiß dann halt, dass ein Label vor einem Input 3 px tiefer sitzen muss um vertikal mittig vorm Input zu sein).
Aber wenn du Koda nimmst, werden alle deine Settings auch im Code abgelegt. Speichere vor dem Einfügen in SciTE als "Koda-Form". Du darfst dann aber innerhalb des Bereiches:
#Region ### START Koda GUI section ### Form=
...
...
#EndRegion ### END Koda GUI section ###
nach dem Einfügen in SciTe nichts per Hand verändern, sondern die Form neu laden und in Koda anpassen.
Welches OS + Browser verwendest du?
Win 7 Pro x64 - Chrome
Ich glaube eher an lokale Probleme. Schlechtes Internet oder so.
Vermutlich irgendsowas undefinierbares...
Das Zertifikat von AutoIt zickt bei mir auch an manchen Tagen, da bekomme ich ständig eine Sicherheitswarnung bei jedem Seitenaufruf in der Domain. Und dann ist wieder monatelang alles in Butter.
Hi,
ich habe mir eine Otium Gear S (DZ09) zugelegt (Kauf beim China-Mann für ca. 25 €).
Das Teil ist erstaunlich sauber verarbeitet, hatte ich bei dem Preis nicht erwartet. Dass man für die Smartwatch eine eigene SIM-Karte einlegen kann, ist sicher ein nettes Feature - war für mich aber nicht relevant, ebensowenig wie die integrierte 1,3 MP Kamera. Ich wollte in erster Linie eine Uhr. Zweitens wollte ich Benachrichtigungen vom Smartphone erhalten (neue Mail/WhatsApp/verpasster Anruf etc. pp.).
- Versuch 1 -
BTNotification-App installiert und aktiviert
Koppeln über Bluetooth - OK
gekoppelte Profile: "Anruf Audio" und "Stereo Audio"
Ergebnis:
Alle Anrufe (Klingelton UND Gespräch selbst) landeten jetzt auf der Watch und wurden über deren Lautsprecher ausgegeben.
Benachrichtigungen werden nicht durchgereicht. ![]()
Gestern wurde von LG endlich Android 7.0 für mein Smartphone bereitgestellt - frisch installiert und:
- Versuch 2 -
Koppeln über Bluetooth - OK
gekoppelte Profile: "Anruf Audio" und "Stereo Audio" und zusätzlich gibt es jetzt: "Inhalt" Zugriff auf Kontakte und Anruflisten
Ergebnis:
Alle Anrufe (Klingelton UND Gespräch selbst) landeten weiterhin auf der Watch und wurden über deren Lautsprecher ausgegeben.
Benachrichtigungen werden durchgereicht. ![]()
Ich habe dann mal probiert, die Profile einzeln zu-/abzuschalten. Ohne "Anruf Audio" bekomme ich keine Benachrichtigungen. Schalte ich es ein, bekomme ich Nachrichten und kann nicht mehr vernünftig telefonieren.
Wobei nach jedem neuen Verbinden von Smartphone und Watch automatisch die Profile aktiviert werden.
Meine Frage:
Hat jemand Erfahrung und kann mir einen Tipp geben, wie ich es erreiche die Smartwatch dazu zu bewegen nur Notifications entgegenzunehmen und ansonsten eine brave Uhr zu sein?
Grundsätzlich bin ich bei dem Preis auch mit der reinen Uhr-Funktion zufrieden, da das Teil doch optisch recht ansprechend ist. Aber für "nur" Uhr wäre es eigentlich etwas too much.
Schau dir mal in der Hilfe die Befehle zur Treeview-UDF (GuiTreeView.au3) an. Dort sind auch ausreichend Beispiele zum Erstellen, Befüllen, etc. vorhanden.
Erstelle ein lauffähiges Bsp., an dem du uns dann deine Probleme zeigst.
Du findest die UDF-Hilfe auch online (https://www.autoitscript.com/autoit3/docs/libfunctions.htm), die TreeView-Funktionen beginnen alle mit: _GuiCtrlTreeView_