Jump to content
Sign in to follow this  
Kanashius

TTS UDF

Recommended Posts

intresting

but now works correctly

#include <WinAPI.au3>
#include "TTS UDF.au3"

Global $oErrorHandler = ObjEvent("AutoIt.Error", "_ErrFunc")
_Example()
Func _Example()
    Local $oSapi = _SpeechObject_Create()
    _SpeechObject_Say($oSapi , 'This is a simple TTS-UDF.')
EndFunc   ;==>_Example

; User's COM error function. Will be called if COM error occurs
Func _ErrFunc($oError)
    ; Do anything here.
    ConsoleWrite(@ScriptName & " (" & $oError.scriptline & ") : ==> COM Error intercepted !" & @CRLF & _
            @TAB & "err.number is: " & @TAB & @TAB & "0x" & Hex($oError.number) & @CRLF & _
            @TAB & "err.windescription:" & @TAB & $oError.windescription & @CRLF & _
            @TAB & "err.description is: " & @TAB & $oError.description & @CRLF & _
            @TAB & "err.source is: " & @TAB & @TAB & $oError.source & @CRLF & _
            @TAB & "err.helpfile is: " & @TAB & $oError.helpfile & @CRLF & _
            @TAB & "err.helpcontext is: " & @TAB & $oError.helpcontext & @CRLF & _
            @TAB & "err.lastdllerror is: " & @TAB & $oError.lastdllerror & @CRLF & _
            @TAB & "err.scriptline is: " & @TAB & $oError.scriptline & @CRLF & _
            @TAB & "err.retcode is: " & @TAB & "0x" & Hex($oError.retcode) & @CRLF & @CRLF)
EndFunc   ;==>_ErrFunc

and here is console output:

>"C:\Program Files (x86)\AutoIt3\SciTE\AutoIt3Wrapper\AutoIt3Wrapper.exe" /run /prod /ErrorStdOut /in "Z:\TOOLs\Macro\FORUM\___FORUM -- z forum\TTS UDF_Example.au3" /UserParams    
+>13:12:11 Starting AutoIt3Wrapper v.15.503.1200.4 SciTE v.3.5.4.0   Keyboard:00000415  OS:WIN_7/Service Pack 1  CPU:X64 OS:X64    Environment(Language:0415)
+>         SciTEDir => C:\Program Files (x86)\AutoIt3\SciTE   UserDir => C:\Users\user\AppData\Local\AutoIt v3\SciTE\AutoIt3Wrapper   SCITE_USERHOME => C:\Users\user\AppData\Local\AutoIt v3\SciTE 
>Running AU3Check (3.3.14.0)  from:C:\Program Files (x86)\AutoIt3  input:Z:\TOOLs\Macro\FORUM\___FORUM -- z forum\TTS UDF_Example.au3
+>13:12:11 AU3Check ended.rc:0
>Running:(3.3.14.0):C:\Program Files (x86)\AutoIt3\autoit3.exe "Z:\TOOLs\Macro\FORUM\___FORUM -- z forum\TTS UDF_Example.au3"    
--> Press Ctrl+F11 to Restart or Ctrl+Break -or- F11 to Stop
TTS UDF_Example.au3 (176) : ==> COM Error intercepted !
    err.number is:         0x80020005
    err.windescription:    Niedopasowanie typu. ==== Type mismatch.

    err.description is:     
    err.source is:         
    err.helpfile is:     
    err.helpcontext is:     
    err.lastdllerror is:     0
    err.scriptline is:     176
    err.retcode is:     0x00000000

TTS UDF_Example.au3 (177) : ==> COM Error intercepted !
    err.number is:         0x80020005
    err.windescription:    Niedopasowanie typu. ==== Type mismatch.

    err.description is:     
    err.source is:         
    err.helpfile is:     
    err.helpcontext is:     
    err.lastdllerror is:     0
    err.scriptline is:     177
    err.retcode is:     0x00000000

+>13:12:12 AutoIt3.exe ended.rc:0
+>13:12:12 AutoIt3Wrapper Finished.
>Exit code: 0    Time: 1.344

Edited by mLipok

Signature beginning:   Wondering who uses AutoIT and what it can be used for ?
* GHAPI UDF - modest beginning - communication with GitHub REST API Forum Rules *
Include Dependency Tree (Tool for analyzing script relations)
ADO.au3 UDF     POP3.au3 UDF     XML.au3 UDF    How to use IE.au3  UDF with  AutoIt v3.3.14.x  for other useful stuff click the following button

Spoiler

Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind. 

My contribution (my own projects): * Debenu Quick PDF Library - UDF * Debenu PDF Viewer SDK - UDF * Acrobat Reader - ActiveX Viewer * UDF for PDFCreator v1.x.x * XZip - UDF * AppCompatFlags UDF * CrowdinAPI UDF * _WinMergeCompare2Files() * _JavaExceptionAdd() * _IsBeta() * Writing DPI Awareness App - workaround * _AutoIt_RequiredVersion() * Chilkatsoft.au3 UDF * TeamViewer.au3 UDF * JavaManagement UDF * VIES over SOAP * WinSCP UDF * GHAPI UDF - modest begining - comunication with GitHub REST APIErrorLog.au3 UDF - A logging Library *

My contribution to others projects or UDF based on  others projects: * _sql.au3 UDF  * POP3.au3 UDF *  RTF Printer - UDF * XML.au3 UDF * ADO.au3 UDF SMTP Mailer UDF * Dual Monitor resolution detection * * 2GUI on Dual Monitor System * _SciLexer.au3 UDF * SciTE - Lexer for console pane

Useful links: * Forum Rules * Forum etiquette *  Forum Information and FAQs * How to post code on the forum * AutoIt Online Documentation * AutoIt Online Beta Documentation * SciTE4AutoIt3 getting started * Convert text blocks to AutoIt code * Games made in Autoit * Programming related sites * Polish AutoIt Tutorial * DllCall Code Generator * 

Wiki: Expand your knowledge - AutoIt Wiki * Collection of User Defined Functions * How to use HelpFile * Good coding practices in AutoIt * 

IE Related:  * How to use IE.au3  UDF with  AutoIt v3.3.14.x * Why isn't Autoit able to click a Javascript Dialog? * Clicking javascript button with no ID * IE document >> save as MHT file * IETab Switcher (by LarsJ ) * HTML Entities * _IEquerySelectorAll() (by uncommon) * IE in TaskSchedulerIE Embedded Control Versioning (use IE9+ and HTML5 in a GUI) *

PDF Related:https://www.autoitscript.com/forum/topic/177368-how-to-get-reference-to-pdf-object-embeded-in-ie/ *

I encourage you to read: * Global Vars * Best Coding Practices * Please explain code used in Help file for several File functions * OOP-like approach in AutoIt * UDF-Spec Questions *  EXAMPLE: How To Catch ConsoleWrite() output to a file or to CMD *

"Homo sum; humani nil a me alienum puto" - Publius Terentius Afer
"Program are meant to be read by humans and only incidentally for computers and execute" - Donald Knuth, "The Art of Computer Programming"
:naughty:  :ranting:, be  :) and       \\//_.

Anticipating Errors :  "Any program that accepts data from a user must include code to validate that data before sending it to the data store. You cannot rely on the data store, ...., or even your programming language to notify you of problems. You must check every byte entered by your users, making sure that data is the correct type for its field and that required fields are not empty."

Signature last update: 2020-11-20

Share this post


Link to post
Share on other sites

I dont know, what your ObjEvent Error function should do, but, if you use the example like this:

_Example()
Func _Example()
    Local $oSapi = _SpeechObject_Create()
    _SpeechObject_Say($oSapi , 'This is a simple TTS-UDF.')
    while NOT _SpeechObject_isReady($oSapi)
    WEnd
EndFunc   ;==>_Example

It works perfectly. I dont know, why it throws the error. (You need to keep the Script running, until reading is ready)

Normally the Error, youve got means SPCAT_VOICES,SPERR_NOT_FOUND -> there is no registryentry found with installed voices.

Edited by Kanashius

Share this post


Link to post
Share on other sites

the problem is here:

Func _SpeechObject_Stop($oSpeech)
    $Output = $oSpeech.AudioOutput
    $Voice = $oSpeech.Voice
    $Rate = $oSpeech.Rate
    $Volume = $oSpeech.Volume
    $oSpeech = ObjCreate("SAPI.SpVoice")
    $oSpeech.AudioOutput = $oSpeech
    $oSpeech.Voice = $oSpeech
    $oSpeech.Rate = $Rate
    $oSpeech.Volume = $Volume
EndFunc   ;==>_SpeechObject_Stop

here is fix:

Func _SpeechObject_Stop($oSpeech)
    Local $Output = $oSpeech.AudioOutput
    Local $Voice = $oSpeech.Voice
    Local $Rate = $oSpeech.Rate
    Local $Volume = $oSpeech.Volume
    $oSpeech = ObjCreate("SAPI.SpVoice")
    $oSpeech.AudioOutput = $Output
    $oSpeech.Voice = $Voice
    $oSpeech.Rate = $Rate
    $oSpeech.Volume = $Volume
EndFunc   ;==>_SpeechObject_Stop

 


Signature beginning:   Wondering who uses AutoIT and what it can be used for ?
* GHAPI UDF - modest beginning - communication with GitHub REST API Forum Rules *
Include Dependency Tree (Tool for analyzing script relations)
ADO.au3 UDF     POP3.au3 UDF     XML.au3 UDF    How to use IE.au3  UDF with  AutoIt v3.3.14.x  for other useful stuff click the following button

Spoiler

Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind. 

My contribution (my own projects): * Debenu Quick PDF Library - UDF * Debenu PDF Viewer SDK - UDF * Acrobat Reader - ActiveX Viewer * UDF for PDFCreator v1.x.x * XZip - UDF * AppCompatFlags UDF * CrowdinAPI UDF * _WinMergeCompare2Files() * _JavaExceptionAdd() * _IsBeta() * Writing DPI Awareness App - workaround * _AutoIt_RequiredVersion() * Chilkatsoft.au3 UDF * TeamViewer.au3 UDF * JavaManagement UDF * VIES over SOAP * WinSCP UDF * GHAPI UDF - modest begining - comunication with GitHub REST APIErrorLog.au3 UDF - A logging Library *

My contribution to others projects or UDF based on  others projects: * _sql.au3 UDF  * POP3.au3 UDF *  RTF Printer - UDF * XML.au3 UDF * ADO.au3 UDF SMTP Mailer UDF * Dual Monitor resolution detection * * 2GUI on Dual Monitor System * _SciLexer.au3 UDF * SciTE - Lexer for console pane

Useful links: * Forum Rules * Forum etiquette *  Forum Information and FAQs * How to post code on the forum * AutoIt Online Documentation * AutoIt Online Beta Documentation * SciTE4AutoIt3 getting started * Convert text blocks to AutoIt code * Games made in Autoit * Programming related sites * Polish AutoIt Tutorial * DllCall Code Generator * 

Wiki: Expand your knowledge - AutoIt Wiki * Collection of User Defined Functions * How to use HelpFile * Good coding practices in AutoIt * 

IE Related:  * How to use IE.au3  UDF with  AutoIt v3.3.14.x * Why isn't Autoit able to click a Javascript Dialog? * Clicking javascript button with no ID * IE document >> save as MHT file * IETab Switcher (by LarsJ ) * HTML Entities * _IEquerySelectorAll() (by uncommon) * IE in TaskSchedulerIE Embedded Control Versioning (use IE9+ and HTML5 in a GUI) *

PDF Related:https://www.autoitscript.com/forum/topic/177368-how-to-get-reference-to-pdf-object-embeded-in-ie/ *

I encourage you to read: * Global Vars * Best Coding Practices * Please explain code used in Help file for several File functions * OOP-like approach in AutoIt * UDF-Spec Questions *  EXAMPLE: How To Catch ConsoleWrite() output to a file or to CMD *

"Homo sum; humani nil a me alienum puto" - Publius Terentius Afer
"Program are meant to be read by humans and only incidentally for computers and execute" - Donald Knuth, "The Art of Computer Programming"
:naughty:  :ranting:, be  :) and       \\//_.

Anticipating Errors :  "Any program that accepts data from a user must include code to validate that data before sending it to the data store. You cannot rely on the data store, ...., or even your programming language to notify you of problems. You must check every byte entered by your users, making sure that data is the correct type for its field and that required fields are not empty."

Signature last update: 2020-11-20

Share this post


Link to post
Share on other sites

As I see today You share to the community, lots of interesting solutions.
Thanks a lot for that.

I suggest you to edit your signature by adding links to the UDF's.

 

btw.

upload them here:

https://www.autoitscript.com/forum/files/

 

and here is my contribution to TTS UDF

 

UDF:

#cs ----------------------------------------------------------------------------

    AutoIt Version: 3.3.10.2
    Author:         Kanashius
    Rights:      Open Source UDF
    Script Function:
    UDF zum wiedergeben von Text mittels Text-To-Speech
#ce ----------------------------------------------------------------------------
#include <WinAPI.au3>

#Region - SpeechVoiceEvents Enum
;~ https://msdn.microsoft.com/en-us/library/ms720886(v=vs.85).aspx
Global Const $SVEStartInputStream = 2 ; Represents the StartStream event, which occurs when the engine begins speaking a stream.
Global Const $SVEEndInputStream = 4 ; Represents the EndStream event, which occurs when the engine encounters the end of a stream while speaking.
Global Const $SVEVoiceChange = 8 ; Represents the VoiceChange event, which occurs when the engine encounters a change of Voice while speaking.
Global Const $SVEBookmark = 16 ; Represents the Bookmark event, which occurs when the engine encounters a bookmark while speaking.
Global Const $SVEWordBoundary = 32 ; Represents the WordBoundary event, which occurs when the engine completes a word while speaking.
Global Const $SVEPhoneme = 64 ; Represents the Phoneme event, which occurs when the engine completes a phoneme while speaking.
Global Const $SVESentenceBoundary = 128 ; Represents the SentenceBoundary event, which occurs when the engine completes a sentence while speaking.
Global Const $SVEViseme = 256 ; Represents the Viseme event, which occurs when the engine completes a viseme while speaking.
Global Const $SVEAudioLevel = 512 ; Represents the AudioLevel event, which occurs when the engine has completed an audio level change while speaking.
Global Const $SVEPrivate = 32768 ; Represents a private engine event.
Global Const $SVEAllEvents = 33790 ; Represents all speech voice events.
#EndRegion - SpeechVoiceEvents Enum

#Region - SpeechVoiceSpeakFlags Enum
; https://msdn.microsoft.com/en-us/library/ms720892(v=vs.85).aspx
; SpVoice Flags
Global Const $SVSFDefault = 0 ; Specifies that the default settings should be used. The defaults are:
;                                      - To speak the given text string synchronously (override with SVSFlagsAsync),
;                                      - Not to purge pending speak requests (override with SVSFPurgeBeforeSpeak),
;                                      - To parse the text as XML only if the first character is a left-angle-bracket (override with SVSFIsXML or SVSFIsNotXML),
;                                      - Not to persist global XML state changes across speak calls (override with SVSFPersistXML), and
;                                      - Not to expand punctuation characters into words (override with SVSFNLPSpeakPunc).
Global Const $SVSFlagsAsync = 1 ; Specifies that the Speak call should be asynchronous. That is, it will return immediately after the speak request is queued.
Global Const $SVSFPurgeBeforeSpeak = 2 ; Purges all pending speak requests prior to this speak call.
Global Const $SVSFIsFilename = 4 ; The string passed to the Speak method is a file name rather than text. As a result, the string itself is not spoken but rather the file the path that points to is spoken.
Global Const $SVSFIsXML = 8 ; The input text will be parsed for XML markup.
Global Const $SVSFIsNotXML = 16 ; The input text will not be parsed for XML markup.
Global Const $SVSFPersistXML = 32 ; Global state changes in the XML markup will persist across speak calls.

; Normalizer Flags
Global Const $SVSFNLPSpeakPunc = 64 ; Punctuation characters should be expanded into words (e.g. "This is it." would become "This is it period").

; TTS Format
;~ Global Const $SVSFParseSapi = ; Force XML parsing as MS SAPI.
;~ Global Const $SVSFParseSsml = ; Force XML parsing as W3C SSML.
;~ Global Const $SVSFParseAutoDetect = ; The TTS XML format is auto-detected. This is the default if none of these TTS XML format values are present in the bit-field.

; Masks
Global Const $SVSFNLPMask = 64 ; Flags handled by SAPI (as opposed to the text-to-speech engine) are set in this mask.
;~ SVSFParseMask = ; SVSFParseSapi|SVSFParseSsml
Global Const $SVSFVoiceMask = 127 ; This is an existing SAPI 5.1 mask that has every flag bit set. In 5.3, it has been extended to contain SVSFParseMask.
Global Const $SVSFUnusedFlags = -128 ; This mask has every unused bit set.
#EndRegion - SpeechVoiceSpeakFlags Enum


; #CURRENT# =====================================================================================================================
; _SpeechObject_Create
; _SpeechObject_Say
; _SpeechObject_setRate
; _SpeechObject_SetVolume
; _SpeechObject_SetVoice
; _SpeechObject_SetOutput
; _SpeechObject_Pause
; _SpeechObject_Resume
; _SpeechObject_Stop
; _SpeechObject_isReady
; _SpeechObject_getOutputsName
; _SpeechObject_getVoicesName
; ===============================================================================================================================

;===============================================================================
;
; Function Name:    _SpeechObject_Create()
; Description:      Create TTS-Object
; Parameter(s):     none.
; Requirement(s):   none.
; Return Value(s):  Returns an Object
; Author(s):        Kanashius
;
;===============================================================================
Func _SpeechObject_Create()
    $oSpeech = ObjCreate('SAPI.SpVoice')
    If @error Then
        Return -1
    EndIf
    $oSpeech.Rate = 1
    $oSpeech.Volume = 100
    Return $oSpeech
EndFunc   ;==>_SpeechObject_Create

;===============================================================================
;
; Function Name:    _SpeechObject_Say()
; Description:      Read a text.
; Parameter(s):     $oSpeech - SpeechObejct as returned by _SpeechObject_Create()
;                   $sText - String to read
; Requirement(s):   none.
; Return Value(s):  none.
; Author(s):        Kanashius
;
;===============================================================================
Func _SpeechObject_Say(ByRef $oSpeech, $sText)
    _SpeechObject_Stop($oSpeech)
    $oSpeech.Speak($sText, $SVSFlagsAsync + $SVSFPurgeBeforeSpeak)
EndFunc   ;==>_SpeechObject_Say

;===============================================================================
;
; Function Name:    _SpeechObject_setRate()
; Description:      Set Rate of an Speech-Object (reading-speed)
; Parameter(s):     $oSpeech - SpeechObejct as returned by _SpeechObject_Create()
;                   $iRate - Int Between -10 and 10
; Requirement(s):   none.
; Return Value(s):  none.
; Author(s):        Kanashius
;
;===============================================================================
Func _SpeechObject_SetRate(ByRef $oSpeech, $iRate)
    $oSpeech.Rate = $iRate
EndFunc   ;==>_SpeechObject_SetRate

;===============================================================================
;
; Function Name:    _SpeechObject_SetVolume()
; Description:      Set the Volume of the Speech-Object
; Parameter(s):     $oSpeech - SpeechObejct as returned by _SpeechObject_Create()
;                   $iVolume - int between 0 and 100
; Requirement(s):   none.
; Return Value(s):  none.
; Author(s):        Kanashius
;
;===============================================================================
Func _SpeechObject_SetVolume(ByRef $oSpeech, $iVolume)
    If $iVolume < 0 Then Return SetError(1)
    If $iVolume > 100 Then Return SetError(2)
    $oSpeech.Volume = $iVolume
EndFunc   ;==>_SpeechObject_SetVolume

;===============================================================================
;
; Function Name:    _SpeechObject_SetVoice()
; Description:      Set the voice of the Speech-Object.
; Parameter(s):     $oSpeech - SpeechObejct as returned by _SpeechObject_Create()
;                   $sName - Name (String) of an Voice as returned by _SpeechObject_getVoicesName()
; Requirement(s):   none.
; Return Value(s):  none.
; Author(s):        Kanashius
;
;===============================================================================
Func _SpeechObject_SetVoice(ByRef $oSpeech, $sName)
    Dim $SOTokens = $oSpeech.GetVoices('', '')
    For $Token In $SOTokens
        If $Token.GetDescription = $sName Then
            $oSpeech.Voice = $Token
        EndIf
    Next
EndFunc   ;==>_SpeechObject_SetVoice

;===============================================================================
;
; Function Name:    _SpeechObject_SetOutput()
; Description:      Set the Output of the Speech-Object.
; Parameter(s):     $oSpeech - SpeechObejct as returned by _SpeechObject_Create()
;                   $sName - Name (String) of an Outputdevice as returned by _SpeechObject_getOutputsName()
; Requirement(s):   none.
; Return Value(s):  none.
; Author(s):        Kanashius
;
;===============================================================================
Func _SpeechObject_SetOutput(ByRef $oSpeech, $sName)
    Dim $SOTokens = $oSpeech.GetAudioOutputs('', '')
    For $Token In $SOTokens
        If $Token.GetDescription = $sName Then
            $oSpeech.AudioOutput = $Token
        EndIf
    Next
EndFunc   ;==>_SpeechObject_SetOutput

;===============================================================================
;
; Function Name:    _SpeechObject_Pause()
; Description:      Pauses the Speech-Object while reading.
; Parameter(s):     $oSpeech - SpeechObejct as returned by _SpeechObject_Create()
; Requirement(s):   none.
; Return Value(s):  none.
; Author(s):        Kanashius
;
;===============================================================================
Func _SpeechObject_Pause(ByRef $oSpeech)
    $oSpeech.Pause()
EndFunc   ;==>_SpeechObject_Pause

;===============================================================================
;
; Function Name:    _SpeechObject_Resume()
; Description:      Resumes the Speech-Object when it is paused.
; Parameter(s):     $oSpeech - SpeechObejct as returned by _SpeechObject_Create()
; Requirement(s):   none.
; Return Value(s):  none.
; Author(s):        Kanashius
;
;===============================================================================
Func _SpeechObject_Resume(ByRef $oSpeech)
    $oSpeech.Resume()
EndFunc   ;==>_SpeechObject_Resume

;===============================================================================
;
; Function Name:    _SpeechObject_Stop()
; Description:      Stops an Speech-Obekt while reading
; Parameter(s):     $oSpeech - SpeechObejct as returned by _SpeechObject_Create()
; Requirement(s):   none.
; Return Value(s):  none.
; Author(s):        Kanashius
;
;===============================================================================
Func _SpeechObject_Stop(ByRef $oSpeech)
    $oSpeech.Speak('', $SVSFlagsAsync + $SVSFPurgeBeforeSpeak)
EndFunc   ;==>_SpeechObject_Stop

;===============================================================================
;
; Function Name:    _SpeechObject_isReady()
; Description:      Check if the Speech-Object is ready.
; Parameter(s):     $oSpeech - SpeechObejct as returned by _SpeechObject_Create()
; Requirement(s):   none.
; Return Value(s):  true - if Speech-Object is ready
;                   false - if Speech-Object is reading
; Author(s):        Kanashius
;
;===============================================================================
Func _SpeechObject_isReady(ByRef $oSpeech)
    If _WinAPI_WaitForSingleObject($oSpeech.SpeakCompleteEvent, 0) <> 258 Then
        Return True
    EndIf
EndFunc   ;==>_SpeechObject_isReady

;===============================================================================
;
; Function Name:    _SpeechObject_getOutputsName()
; Description:      Return the Names of all avaible AudioOutput-Devices
; Parameter(s):     $oSpeech - SpeechObejct as returned by _SpeechObject_Create()
;                   $bAsArray - true if names have to be returned as an Array
; Requirement(s):   none.
; Return Value(s):  String where the Devicenames are seperated with a "|"
;                   or Array with Names.
; Author(s):        Kanashius
;
;===============================================================================
Func _SpeechObject_getOutputsName(ByRef $oSpeech, $bAsArray = False)
    Dim $SOTokens = $oSpeech.GetAudioOutputs('', '')
    $sString = ""
    For $Token In $SOTokens
        $sString &= "|" & $Token.GetDescription
    Next
    $sString = StringTrimLeft($sString, 1)
    If $bAsArray Then
        Return StringSplit($sString, "|", 2)
    Else
        Return $sString
    EndIf
EndFunc   ;==>_SpeechObject_getOutputsName

;===============================================================================
;
; Function Name:    _SpeechObject_getVoicesName()
; Description:      Return the Names of all avaible Voices
; Parameter(s):     $oSpeech - SpeechObejct as returned by _SpeechObject_Create()
;                   $bAsArray - true if names have to be returned as an Array
; Requirement(s):   none.
; Return Value(s):  String where the Voicenames are seperated with a "|"
;                   or Array with Names.
; Author(s):        Kanashius
;
;===============================================================================
Func _SpeechObject_getVoicesName(ByRef $oSpeech, $bAsArray = False)
    Dim $SOTokens = $oSpeech.GetVoices('', '')
    $sString = ""
    For $Token In $SOTokens
        $sString &= "|" & $Token.GetDescription
    Next
    $sString = StringTrimLeft($sString, 1)
    If $bAsArray Then
        Return StringSplit($sString, "|", 2)
    Else
        Return $sString
    EndIf
EndFunc   ;==>_SpeechObject_getVoicesName

; #FUNCTION# ====================================================================================================================
; Name ..........: _SpeechObject_EVENT_
; Description ...:
; Syntax ........: _SpeechObject_EVENT_($sEventName)
; Parameters ....: $sEventName          - a string value.
; Return values .: none
; Author ........: mLipok
; Modified ......:
; Remarks .......:
; Related .......:
; Link ..........: https://msdn.microsoft.com/en-us/library/ms723587(v=vs.85).aspx
; Example .......: No
; ===============================================================================================================================
Func _SpeechObject_EVENT_($sEventName)
    ; TODO Events
    __SpeechObject_Notify('Event "Uncatched" was fired : $sEventName = ' & $sEventName & @CR)
EndFunc   ;==>_SpeechObject_EVENT_

; #FUNCTION# ====================================================================================================================
; Name ..........: _SpeechObject_EVENT_AudioLevel
; Description ...:
; Syntax ........: _SpeechObject_EVENT_AudioLevel(Byref $iStreamNumber, Byref $dStreamPosition, Byref $iAudioLevel)
; Parameters ....: $iStreamNumber       - [in/out] an integer value.
;                  $dStreamPosition     - [in/out] a binary variant value.
;                  $iAudioLevel         - [in/out] an integer value.
; Return values .: none
; Author ........: mLipok
; Modified ......:
; Remarks .......:
; Related .......:
; Link ..........: https://msdn.microsoft.com/en-us/library/ms723582(v=vs.85).aspx
; Example .......: No
; ===============================================================================================================================
Func _SpeechObject_EVENT_AudioLevel1(ByRef $iStreamNumber, ByRef $dStreamPosition, ByRef $iAudioLevel)
    __SpeechObject_Notify( _
            '_SpeechObject_EVENT_AudioLevel:' & @CRLF & _
            '$iStreamNumber =' & $iStreamNumber & @CRLF & _
            '$dStreamPosition =' & $dStreamPosition & @CRLF & _
            '$iAudioLevel = ' & $iAudioLevel & @CRLF & _
            @CRLF)
EndFunc   ;==>_SpeechObject_EVENT_AudioLevel1

; #FUNCTION# ====================================================================================================================
; Name ..........: _SpeechObject_EVENT_Word
; Description ...:
; Syntax ........: _SpeechObject_EVENT_Word(Byref $iStreamNumber, Byref $dStreamPosition, Byref $iCharacterPosition, Byref $iLength)
; Parameters ....: $iStreamNumber       - [in/out] an integer value.
;                  $dStreamPosition     - [in/out] a binary variant value.
;                  $iCharacterPosition  - [in/out] an integer value.
;                  $iLength             - [in/out] an integer value.
; Return values .: none
; Author ........: mLipok
; Modified ......:
; Remarks .......:
; Related .......:
; Link ..........: https://msdn.microsoft.com/en-us/library/ms723593(v=vs.85).aspx
; Example .......: No
; ===============================================================================================================================
Func _SpeechObject_EVENT_Word(ByRef $iStreamNumber, ByRef $dStreamPosition, ByRef $iCharacterPosition, ByRef $iLength)
    __SpeechObject_Notify( _
            '_SpeechObject_EVENT_Word:' & @CRLF & _
            '$iStreamNumber = ' & $iStreamNumber & @CRLF & _
            '$dStreamPosition = ' & $dStreamPosition & @CRLF & _
            '$iCharacterPosition = ' & $iCharacterPosition & @CRLF & _
            '$iLength = ' & $iLength & @CRLF & _
            @CRLF)
EndFunc   ;==>_SpeechObject_EVENT_Word

; #FUNCTION# ====================================================================================================================
; Name ..........: _SpeechObject_EVENT_Sentence
; Description ...:
; Syntax ........: _SpeechObject_EVENT_Sentence(Byref $iStreamNumber, Byref $dStreamPosition, Byref $iCharacterPosition,
;                  Byref $iLength)
; Parameters ....: $iStreamNumber       - [in/out] an integer value.
;                  $dStreamPosition     - [in/out] a binary variant value.
;                  $iCharacterPosition  - [in/out] an integer value.
;                  $iLength             - [in/out] an integer value.
; Return values .: none
; Author ........: mLipok
; Modified ......:
; Remarks .......:
; Related .......:
; Link ..........: https://msdn.microsoft.com/en-us/library/ms723589(v=vs.85).aspx
; Example .......: No
; ===============================================================================================================================
Func _SpeechObject_EVENT_Sentence(ByRef $iStreamNumber, ByRef $dStreamPosition, ByRef $iCharacterPosition, ByRef $iLength)
    __SpeechObject_Notify( _
            '_SpeechObject_EVENT_Sentence:' & @CRLF & _
            '$iStreamNumber = ' & $iStreamNumber & @CRLF & _
            '$dStreamPosition = ' & $dStreamPosition & @CRLF & _
            '$iCharacterPosition = ' & $iCharacterPosition & @CRLF & _
            '$iLength = ' & $iLength & @CRLF & _
            @CRLF)
EndFunc   ;==>_SpeechObject_EVENT_Word

; #FUNCTION# ====================================================================================================================
; Name ..........: _SpeechObject_EVENT_EndStream
; Description ...:
; Syntax ........: _SpeechObject_EVENT_EndStream(Byref $iStreamNumber, Byref $dStreamPosition)
; Parameters ....: $iStreamNumber       - [in/out] an integer value.
;                  $dStreamPosition     - [in/out] a binary variant value.
; Return values .: none
; Author ........: mLipok
; Modified ......:
; Remarks .......:
; Related .......:
; Link ..........: https://msdn.microsoft.com/en-us/library/ms723585(v=vs.85).aspx
; Example .......: No
; ===============================================================================================================================
Func _SpeechObject_EVENT_EndStream(ByRef $iStreamNumber, ByRef $dStreamPosition)
    __SpeechObject_Notify( _
            '_SpeechObject_EVENT_EndStream:' & @CRLF & _
            '$iStreamNumber = ' & $iStreamNumber & @CRLF & _
            '$dStreamPosition = ' & $dStreamPosition & @CRLF & _
            @CRLF)
EndFunc   ;==>_SpeechObject_EVENT_Word

Func _SpeechObject_UseComEventHandler(ByRef $oSpeech)
    Local $oSpeech_EventHandler = ObjEvent($oSpeech, '_SpeechObject_EVENT_', '_ISpeechVoiceEvents')
    Return $oSpeech_EventHandler
EndFunc   ;==>_SpeechObject_EnableEventHandler

Func _SpeechObject_UseComErrorHandler()
    Local $oErrorHandler = ObjEvent("AutoIt.Error", "_ErrFunc")
    Return $oErrorHandler
EndFunc   ;==>_SpeechObject_EnableEventHandler

Func _SpeechObject_NotifySetting($bNotify = Default)
    Local Static $bNotify_Static = False
    If $bNotify = Default Then
        Return $bNotify_Static
    ElseIf IsBool($bNotify) Then
        $bNotify_Static = $bNotify
        Return $bNotify_Static
    Else
        Return SetError(1, 0, $bNotify_Static)
    EndIf

EndFunc   ;==>__SpeechObject_Notify

; #INTERNAL_USE_ONLY# ===========================================================================================================
; Name ..........: __SpeechObject_Notify
; Description ...:
; Syntax ........: __SpeechObject_Notify($sText)
; Parameters ....: $sText               - a string value.
; Return values .: none
; Author ........: mLipok
; Modified ......:
; Remarks .......:
; Related .......:
; Link ..........:
; Example .......: No
; ===============================================================================================================================
Func __SpeechObject_Notify($sText)
    If _SpeechObject_NotifySetting() Then
        ConsoleWrite($sText & @CRLF)
    EndIf
EndFunc

 

EXAMPLE:

#include <WinAPI.au3>
#include "TTS UDF.au3"

_Example()
Func _Example()
    Local $oSpeech = _SpeechObject_Create()
    _SpeechObject_NotifySetting(True)
    Local $oSpeech_ComErrorHandler = _SpeechObject_UseComErrorHandler()
    Local $oSpeech_ComEventHandler = _SpeechObject_UseComEventHandler($oSpeech)

;~  ObjName_FlagsValue($oSpeech)
    _SpeechObject_Say($oSpeech, 'This is a simple Text To Speech example.')
    While Not _SpeechObject_isReady($oSpeech)
        Sleep(12)
        _SpeechObject_SetVolume($oSpeech, $oSpeech.Volume - 1)
    WEnd
;~  MsgBox(0, '', StringReplace( _SpeechObject_getVoicesName($oSpeech),'|',@LF))

EndFunc   ;==>_Example

; User's COM error function. Will be called if COM error occurs
Func _ErrFunc($oError)
    ; Do anything here.
    ConsoleWrite(@ScriptName & " (" & $oError.scriptline & ") : ==> COM Error intercepted !" & @CRLF & _
            @TAB & "err.number is: " & @TAB & @TAB & "0x" & Hex($oError.number) & @CRLF & _
            @TAB & "err.windescription:" & @TAB & $oError.windescription & @CRLF & _
            @TAB & "err.description is: " & @TAB & $oError.description & @CRLF & _
            @TAB & "err.source is: " & @TAB & @TAB & $oError.source & @CRLF & _
            @TAB & "err.helpfile is: " & @TAB & $oError.helpfile & @CRLF & _
            @TAB & "err.helpcontext is: " & @TAB & $oError.helpcontext & @CRLF & _
            @TAB & "err.lastdllerror is: " & @TAB & $oError.lastdllerror & @CRLF & _
            @TAB & "err.scriptline is: " & @TAB & $oError.scriptline & @CRLF & _
            @TAB & "err.retcode is: " & @TAB & "0x" & Hex($oError.retcode) & @CRLF & @CRLF)
EndFunc   ;==>_ErrFunc

 

Edited by mLipok
added spoiler, wording

Signature beginning:   Wondering who uses AutoIT and what it can be used for ?
* GHAPI UDF - modest beginning - communication with GitHub REST API Forum Rules *
Include Dependency Tree (Tool for analyzing script relations)
ADO.au3 UDF     POP3.au3 UDF     XML.au3 UDF    How to use IE.au3  UDF with  AutoIt v3.3.14.x  for other useful stuff click the following button

Spoiler

Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind. 

My contribution (my own projects): * Debenu Quick PDF Library - UDF * Debenu PDF Viewer SDK - UDF * Acrobat Reader - ActiveX Viewer * UDF for PDFCreator v1.x.x * XZip - UDF * AppCompatFlags UDF * CrowdinAPI UDF * _WinMergeCompare2Files() * _JavaExceptionAdd() * _IsBeta() * Writing DPI Awareness App - workaround * _AutoIt_RequiredVersion() * Chilkatsoft.au3 UDF * TeamViewer.au3 UDF * JavaManagement UDF * VIES over SOAP * WinSCP UDF * GHAPI UDF - modest begining - comunication with GitHub REST APIErrorLog.au3 UDF - A logging Library *

My contribution to others projects or UDF based on  others projects: * _sql.au3 UDF  * POP3.au3 UDF *  RTF Printer - UDF * XML.au3 UDF * ADO.au3 UDF SMTP Mailer UDF * Dual Monitor resolution detection * * 2GUI on Dual Monitor System * _SciLexer.au3 UDF * SciTE - Lexer for console pane

Useful links: * Forum Rules * Forum etiquette *  Forum Information and FAQs * How to post code on the forum * AutoIt Online Documentation * AutoIt Online Beta Documentation * SciTE4AutoIt3 getting started * Convert text blocks to AutoIt code * Games made in Autoit * Programming related sites * Polish AutoIt Tutorial * DllCall Code Generator * 

Wiki: Expand your knowledge - AutoIt Wiki * Collection of User Defined Functions * How to use HelpFile * Good coding practices in AutoIt * 

IE Related:  * How to use IE.au3  UDF with  AutoIt v3.3.14.x * Why isn't Autoit able to click a Javascript Dialog? * Clicking javascript button with no ID * IE document >> save as MHT file * IETab Switcher (by LarsJ ) * HTML Entities * _IEquerySelectorAll() (by uncommon) * IE in TaskSchedulerIE Embedded Control Versioning (use IE9+ and HTML5 in a GUI) *

PDF Related:https://www.autoitscript.com/forum/topic/177368-how-to-get-reference-to-pdf-object-embeded-in-ie/ *

I encourage you to read: * Global Vars * Best Coding Practices * Please explain code used in Help file for several File functions * OOP-like approach in AutoIt * UDF-Spec Questions *  EXAMPLE: How To Catch ConsoleWrite() output to a file or to CMD *

"Homo sum; humani nil a me alienum puto" - Publius Terentius Afer
"Program are meant to be read by humans and only incidentally for computers and execute" - Donald Knuth, "The Art of Computer Programming"
:naughty:  :ranting:, be  :) and       \\//_.

Anticipating Errors :  "Any program that accepts data from a user must include code to validate that data before sending it to the data store. You cannot rely on the data store, ...., or even your programming language to notify you of problems. You must check every byte entered by your users, making sure that data is the correct type for its field and that required fields are not empty."

Signature last update: 2020-11-20

Share this post


Link to post
Share on other sites

so

I wish you breaking pen ..... (such a saying - to prosper)

 


Signature beginning:   Wondering who uses AutoIT and what it can be used for ?
* GHAPI UDF - modest beginning - communication with GitHub REST API Forum Rules *
Include Dependency Tree (Tool for analyzing script relations)
ADO.au3 UDF     POP3.au3 UDF     XML.au3 UDF    How to use IE.au3  UDF with  AutoIt v3.3.14.x  for other useful stuff click the following button

Spoiler

Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind. 

My contribution (my own projects): * Debenu Quick PDF Library - UDF * Debenu PDF Viewer SDK - UDF * Acrobat Reader - ActiveX Viewer * UDF for PDFCreator v1.x.x * XZip - UDF * AppCompatFlags UDF * CrowdinAPI UDF * _WinMergeCompare2Files() * _JavaExceptionAdd() * _IsBeta() * Writing DPI Awareness App - workaround * _AutoIt_RequiredVersion() * Chilkatsoft.au3 UDF * TeamViewer.au3 UDF * JavaManagement UDF * VIES over SOAP * WinSCP UDF * GHAPI UDF - modest begining - comunication with GitHub REST APIErrorLog.au3 UDF - A logging Library *

My contribution to others projects or UDF based on  others projects: * _sql.au3 UDF  * POP3.au3 UDF *  RTF Printer - UDF * XML.au3 UDF * ADO.au3 UDF SMTP Mailer UDF * Dual Monitor resolution detection * * 2GUI on Dual Monitor System * _SciLexer.au3 UDF * SciTE - Lexer for console pane

Useful links: * Forum Rules * Forum etiquette *  Forum Information and FAQs * How to post code on the forum * AutoIt Online Documentation * AutoIt Online Beta Documentation * SciTE4AutoIt3 getting started * Convert text blocks to AutoIt code * Games made in Autoit * Programming related sites * Polish AutoIt Tutorial * DllCall Code Generator * 

Wiki: Expand your knowledge - AutoIt Wiki * Collection of User Defined Functions * How to use HelpFile * Good coding practices in AutoIt * 

IE Related:  * How to use IE.au3  UDF with  AutoIt v3.3.14.x * Why isn't Autoit able to click a Javascript Dialog? * Clicking javascript button with no ID * IE document >> save as MHT file * IETab Switcher (by LarsJ ) * HTML Entities * _IEquerySelectorAll() (by uncommon) * IE in TaskSchedulerIE Embedded Control Versioning (use IE9+ and HTML5 in a GUI) *

PDF Related:https://www.autoitscript.com/forum/topic/177368-how-to-get-reference-to-pdf-object-embeded-in-ie/ *

I encourage you to read: * Global Vars * Best Coding Practices * Please explain code used in Help file for several File functions * OOP-like approach in AutoIt * UDF-Spec Questions *  EXAMPLE: How To Catch ConsoleWrite() output to a file or to CMD *

"Homo sum; humani nil a me alienum puto" - Publius Terentius Afer
"Program are meant to be read by humans and only incidentally for computers and execute" - Donald Knuth, "The Art of Computer Programming"
:naughty:  :ranting:, be  :) and       \\//_.

Anticipating Errors :  "Any program that accepts data from a user must include code to validate that data before sending it to the data store. You cannot rely on the data store, ...., or even your programming language to notify you of problems. You must check every byte entered by your users, making sure that data is the correct type for its field and that required fields are not empty."

Signature last update: 2020-11-20

Share this post


Link to post
Share on other sites

I suggest you to edit your signature by adding links to the UDF's.

 

 

I see you edit your singature but I would suggest you to use "Link" button in "Forum Editor Toolbar".
In this way you be able to make signature like my or @Melba23 , and many other members.

btw.

I'm wondered whether the current form of your signature does not cause additional burden for the forum.
I wonder if all the links are dynamically generated even in the case when your "spoiler" is collapsed.

 


Signature beginning:   Wondering who uses AutoIT and what it can be used for ?
* GHAPI UDF - modest beginning - communication with GitHub REST API Forum Rules *
Include Dependency Tree (Tool for analyzing script relations)
ADO.au3 UDF     POP3.au3 UDF     XML.au3 UDF    How to use IE.au3  UDF with  AutoIt v3.3.14.x  for other useful stuff click the following button

Spoiler

Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind. 

My contribution (my own projects): * Debenu Quick PDF Library - UDF * Debenu PDF Viewer SDK - UDF * Acrobat Reader - ActiveX Viewer * UDF for PDFCreator v1.x.x * XZip - UDF * AppCompatFlags UDF * CrowdinAPI UDF * _WinMergeCompare2Files() * _JavaExceptionAdd() * _IsBeta() * Writing DPI Awareness App - workaround * _AutoIt_RequiredVersion() * Chilkatsoft.au3 UDF * TeamViewer.au3 UDF * JavaManagement UDF * VIES over SOAP * WinSCP UDF * GHAPI UDF - modest begining - comunication with GitHub REST APIErrorLog.au3 UDF - A logging Library *

My contribution to others projects or UDF based on  others projects: * _sql.au3 UDF  * POP3.au3 UDF *  RTF Printer - UDF * XML.au3 UDF * ADO.au3 UDF SMTP Mailer UDF * Dual Monitor resolution detection * * 2GUI on Dual Monitor System * _SciLexer.au3 UDF * SciTE - Lexer for console pane

Useful links: * Forum Rules * Forum etiquette *  Forum Information and FAQs * How to post code on the forum * AutoIt Online Documentation * AutoIt Online Beta Documentation * SciTE4AutoIt3 getting started * Convert text blocks to AutoIt code * Games made in Autoit * Programming related sites * Polish AutoIt Tutorial * DllCall Code Generator * 

Wiki: Expand your knowledge - AutoIt Wiki * Collection of User Defined Functions * How to use HelpFile * Good coding practices in AutoIt * 

IE Related:  * How to use IE.au3  UDF with  AutoIt v3.3.14.x * Why isn't Autoit able to click a Javascript Dialog? * Clicking javascript button with no ID * IE document >> save as MHT file * IETab Switcher (by LarsJ ) * HTML Entities * _IEquerySelectorAll() (by uncommon) * IE in TaskSchedulerIE Embedded Control Versioning (use IE9+ and HTML5 in a GUI) *

PDF Related:https://www.autoitscript.com/forum/topic/177368-how-to-get-reference-to-pdf-object-embeded-in-ie/ *

I encourage you to read: * Global Vars * Best Coding Practices * Please explain code used in Help file for several File functions * OOP-like approach in AutoIt * UDF-Spec Questions *  EXAMPLE: How To Catch ConsoleWrite() output to a file or to CMD *

"Homo sum; humani nil a me alienum puto" - Publius Terentius Afer
"Program are meant to be read by humans and only incidentally for computers and execute" - Donald Knuth, "The Art of Computer Programming"
:naughty:  :ranting:, be  :) and       \\//_.

Anticipating Errors :  "Any program that accepts data from a user must include code to validate that data before sending it to the data store. You cannot rely on the data store, ...., or even your programming language to notify you of problems. You must check every byte entered by your users, making sure that data is the correct type for its field and that required fields are not empty."

Signature last update: 2020-11-20

Share this post


Link to post
Share on other sites

Signature beginning:   Wondering who uses AutoIT and what it can be used for ?
* GHAPI UDF - modest beginning - communication with GitHub REST API Forum Rules *
Include Dependency Tree (Tool for analyzing script relations)
ADO.au3 UDF     POP3.au3 UDF     XML.au3 UDF    How to use IE.au3  UDF with  AutoIt v3.3.14.x  for other useful stuff click the following button

Spoiler

Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind. 

My contribution (my own projects): * Debenu Quick PDF Library - UDF * Debenu PDF Viewer SDK - UDF * Acrobat Reader - ActiveX Viewer * UDF for PDFCreator v1.x.x * XZip - UDF * AppCompatFlags UDF * CrowdinAPI UDF * _WinMergeCompare2Files() * _JavaExceptionAdd() * _IsBeta() * Writing DPI Awareness App - workaround * _AutoIt_RequiredVersion() * Chilkatsoft.au3 UDF * TeamViewer.au3 UDF * JavaManagement UDF * VIES over SOAP * WinSCP UDF * GHAPI UDF - modest begining - comunication with GitHub REST APIErrorLog.au3 UDF - A logging Library *

My contribution to others projects or UDF based on  others projects: * _sql.au3 UDF  * POP3.au3 UDF *  RTF Printer - UDF * XML.au3 UDF * ADO.au3 UDF SMTP Mailer UDF * Dual Monitor resolution detection * * 2GUI on Dual Monitor System * _SciLexer.au3 UDF * SciTE - Lexer for console pane

Useful links: * Forum Rules * Forum etiquette *  Forum Information and FAQs * How to post code on the forum * AutoIt Online Documentation * AutoIt Online Beta Documentation * SciTE4AutoIt3 getting started * Convert text blocks to AutoIt code * Games made in Autoit * Programming related sites * Polish AutoIt Tutorial * DllCall Code Generator * 

Wiki: Expand your knowledge - AutoIt Wiki * Collection of User Defined Functions * How to use HelpFile * Good coding practices in AutoIt * 

IE Related:  * How to use IE.au3  UDF with  AutoIt v3.3.14.x * Why isn't Autoit able to click a Javascript Dialog? * Clicking javascript button with no ID * IE document >> save as MHT file * IETab Switcher (by LarsJ ) * HTML Entities * _IEquerySelectorAll() (by uncommon) * IE in TaskSchedulerIE Embedded Control Versioning (use IE9+ and HTML5 in a GUI) *

PDF Related:https://www.autoitscript.com/forum/topic/177368-how-to-get-reference-to-pdf-object-embeded-in-ie/ *

I encourage you to read: * Global Vars * Best Coding Practices * Please explain code used in Help file for several File functions * OOP-like approach in AutoIt * UDF-Spec Questions *  EXAMPLE: How To Catch ConsoleWrite() output to a file or to CMD *

"Homo sum; humani nil a me alienum puto" - Publius Terentius Afer
"Program are meant to be read by humans and only incidentally for computers and execute" - Donald Knuth, "The Art of Computer Programming"
:naughty:  :ranting:, be  :) and       \\//_.

Anticipating Errors :  "Any program that accepts data from a user must include code to validate that data before sending it to the data store. You cannot rely on the data store, ...., or even your programming language to notify you of problems. You must check every byte entered by your users, making sure that data is the correct type for its field and that required fields are not empty."

Signature last update: 2020-11-20

Share this post


Link to post
Share on other sites

Great discussion Kanashius and mLipok! I appreciate the great UDF and examples.

Is it possible to use this to read a web page and have the text highlight for each word as it is being read?

Thank you!

Share this post


Link to post
Share on other sites

Yes.

I think this can be one of examples but this need a time.
We are toogether (I and Kanashius) working on TTS UDF updated.

Edited by mLipok

Signature beginning:   Wondering who uses AutoIT and what it can be used for ?
* GHAPI UDF - modest beginning - communication with GitHub REST API Forum Rules *
Include Dependency Tree (Tool for analyzing script relations)
ADO.au3 UDF     POP3.au3 UDF     XML.au3 UDF    How to use IE.au3  UDF with  AutoIt v3.3.14.x  for other useful stuff click the following button

Spoiler

Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind. 

My contribution (my own projects): * Debenu Quick PDF Library - UDF * Debenu PDF Viewer SDK - UDF * Acrobat Reader - ActiveX Viewer * UDF for PDFCreator v1.x.x * XZip - UDF * AppCompatFlags UDF * CrowdinAPI UDF * _WinMergeCompare2Files() * _JavaExceptionAdd() * _IsBeta() * Writing DPI Awareness App - workaround * _AutoIt_RequiredVersion() * Chilkatsoft.au3 UDF * TeamViewer.au3 UDF * JavaManagement UDF * VIES over SOAP * WinSCP UDF * GHAPI UDF - modest begining - comunication with GitHub REST APIErrorLog.au3 UDF - A logging Library *

My contribution to others projects or UDF based on  others projects: * _sql.au3 UDF  * POP3.au3 UDF *  RTF Printer - UDF * XML.au3 UDF * ADO.au3 UDF SMTP Mailer UDF * Dual Monitor resolution detection * * 2GUI on Dual Monitor System * _SciLexer.au3 UDF * SciTE - Lexer for console pane

Useful links: * Forum Rules * Forum etiquette *  Forum Information and FAQs * How to post code on the forum * AutoIt Online Documentation * AutoIt Online Beta Documentation * SciTE4AutoIt3 getting started * Convert text blocks to AutoIt code * Games made in Autoit * Programming related sites * Polish AutoIt Tutorial * DllCall Code Generator * 

Wiki: Expand your knowledge - AutoIt Wiki * Collection of User Defined Functions * How to use HelpFile * Good coding practices in AutoIt * 

IE Related:  * How to use IE.au3  UDF with  AutoIt v3.3.14.x * Why isn't Autoit able to click a Javascript Dialog? * Clicking javascript button with no ID * IE document >> save as MHT file * IETab Switcher (by LarsJ ) * HTML Entities * _IEquerySelectorAll() (by uncommon) * IE in TaskSchedulerIE Embedded Control Versioning (use IE9+ and HTML5 in a GUI) *

PDF Related:https://www.autoitscript.com/forum/topic/177368-how-to-get-reference-to-pdf-object-embeded-in-ie/ *

I encourage you to read: * Global Vars * Best Coding Practices * Please explain code used in Help file for several File functions * OOP-like approach in AutoIt * UDF-Spec Questions *  EXAMPLE: How To Catch ConsoleWrite() output to a file or to CMD *

"Homo sum; humani nil a me alienum puto" - Publius Terentius Afer
"Program are meant to be read by humans and only incidentally for computers and execute" - Donald Knuth, "The Art of Computer Programming"
:naughty:  :ranting:, be  :) and       \\//_.

Anticipating Errors :  "Any program that accepts data from a user must include code to validate that data before sending it to the data store. You cannot rely on the data store, ...., or even your programming language to notify you of problems. You must check every byte entered by your users, making sure that data is the correct type for its field and that required fields are not empty."

Signature last update: 2020-11-20

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

  • Similar Content

    • By CarlD
      TalkTock is a talking clock. It's configurable via the opening screen, an .ini file, or the command line. The .ini offers the widest range of options, including language preferences.
      Links:
      ReadMe TalkTock.zip: contains .exe, .ini files, ReadMe and ListVoices.exe (TTS utility) Source:
      #cs -------------------------------------- TalkTock.au3 -- Talking Clock CLD rev.2020-10-03 (freeware -- no warranties expressed or implied) Usages (1) TalkTock [/I #] [/C 12|24] [/V #] [/R #] [/S ["]voice name["]|hint] [/U S|M|H|D|W|T|Y=#] [/Q|/QQ] /I = Interval between time announcements (in minutes) /C = Clock style (12- or 24-hour) /V = Volume (range 1 to 100) /R = speaking Rate (range -10 to 10) /S "voice name"|hint (hint = unique substring of voice name) /T = Say time only (no prefix or postfix) /U S|M|H|D|W|T|Y=# = clock stops after # Secs|Mins|Hrs|Days|Wks|monThs|Yrs /Q = Quiet (time displayed on screen, not spoken) /QQ = NOT Quiet (overrides Quiet=1 setting in TalkTock.ini) User-selected values are saved in TalkTock.ini. Language preferences and other settings can be changed by editing TalkTock.ini in any text editor. (2) TalkTock /?|?H|/SayHelp|/Kill /?|/H = Display on-screen help /SayHelp = Speak the help screen /Kill = Kill ALL running TalkTock.exe processes (3) TalkTock /L List available voices (4) TalkTock /UseFile [d:\path\]INI_filename Take settings from a specified settings file (must have TalkTock.ini format) (5) TalkTock /RESET Create new TalkTock.ini with default settings (existing TalkTock.ini is backed up to TalkTock.IN_) (6) TalkTock /SOURCE View AutoIt source code -------------------------------------- #ce #include <AutoItConstants.au3> #include <ButtonConstants.au3> #include <Date.au3> #include <FileConstants.au3> #include <GUIConstants.au3> #include <GUIConstantsEx.au3> #include <Misc.au3> #include <MsgBoxConstants.au3> #include <StaticConstants.au3> #include <TrayConstants.au3> #include <WindowsConstants.au3> #pragma compile(AutoItExecuteAllowed, True) Opt("MustDeclareVars", 1) Opt("TrayAutoPause", 0) Opt("TrayMenuMode", 1) Opt("TrayOnEventMode", 1) ; Icon by Ampeross (free for non-commercial use) ; http://www.iconarchive.com/show/qetto-2-icons-by-ampeross/timer-icon.html FileInstall("X:\Ampeross-Qetto-2-Timer.ico", @TempDir, 1) FileInstall("X:\ausource.txt", @TempDir, 1) Global $sCMline = $CmdLineRaw Global $sCurWin = WinGetTitle("[active]") ; Warning on multiple TalkTock processes If ProcessList(@ScriptName)[0][0] > 1 Then If $CmdLine[0] = 0 Or ( StringInStr($sCMline, "kill") + StringInStr($sCMline, "reset") + StringInStr($sCMline, "source") + StringInStr($sCMline, "/?") + StringInStr($sCMline, "-?") + StringInStr($sCMline, "/h") + StringInStr($sCMline, "-h") + StringInStr($sCMline, "/L") + StringInStr($sCMline, "-L") = 0 ) Then ReStartTT() EndIf ; Default interval, 12|24, volume, talk rate settings, etc. Global $idFreq = 15 ; Default interval every 15 minutes Global $vdT12or24 = 12 ; 12- or 24-hour time (Clock style) Global $sdVoice = "" ; TTS voice (""=use default voice) Global $idVol = 80 ; Volume (range 0 to 100) Global $idRate = 0 ; Speaking rate (range -10 to 10) Global $idStop = 0 ; Clock stops = 0 (Never) Global $sdUnits = "H" ; Stop clock units (default = H = hours) Global $bdQuiet = 0 ; Quiet operation (time shown on screen) Global $idDisplay = 2 ; Duration of on-screen time display in secs. ; ; (has effect only if $bQuiet = 1) ; --------------------------------------------------------------- Global $bCanned = 1 ; "Canned" or custom interval Global $bdTimeOnly = 0 ; ; ; Default phrases Global $sdHi = "Welcome to TalkTock, the Talking Clock" Global $sdPause = "TalkTock paused" Global $sdResume = "TalkTock resumed" Global $sdStopSay = "Goodbye" Global $sdIntro = "The time will be announced every" Global $sdPrefix = "It's" Global $sdPrefix1 = "" Global $bdSayAMPM = 1 Global $sdHowFreq1 = "minnit" ; spelling altered to aid pronunciation Global $sdHowFreq5 = "5 minutes at the 5-minute mark" Global $sdHowFreq10 = "10 minutes at the 10-minute mark" Global $sdHowFreq15 = "15 minutes on the quarter hour" Global $sdHowFreq30 = "30 minutes on the half hour" Global $sdHowFreq60 = "'our on the hour"; pronunciation Global $sdHowFreqCustom = "minutes" Global $sdBye = "Goodbye" #cs ; Default phrases Global $sdHi = "" Global $sdPause = "" Global $sdResume = "" Global $sdStopSay = "" Global $sdIntro = "" Global $sdPrefix = "" Global $sdPrefix1 = "" Global $bdSayAMPM = 1 Global $sdHowFreq1 = "" Global $sdHowFreq5 = "" Global $sdHowFreq10 = "" Global $sdHowFreq15 = "" Global $sdHowFreq30 = "" Global $sdHowFreq60 = "" Global $sdHowFreqCustom = "" Global $sdBye = "" #ce ; Default GUI labels Global $sgdTitle = "TalkTock - Talking Clock" Global $sgdTop = "Say the time every" Global $sgdMinute = "minute" Global $sgdMinutes = "minutes" Global $sgdQuarterHour = "quarter hour" Global $sgdHalfHour = "half hour" Global $sgdHour = "hour" Global $sgdHours = "hours" Global $sgdCustom = "Custom" Global $sgdClock = "Clock style" Global $sgd12hr_Label = "12-hour" Global $sgd24hr_label = "24-hour" Global $sgdQuiet_label = "Time is: " Global $sgdSpeak_label = "spoken" Global $sgdDisplay_label = "displayed" Global $sgdExpires = "Clock stops " Global $sgdExpNever = " Never" Global $sgdExpAfter = " After " Global $sgdExpSecs = "secs" Global $sgdExpMins = "mins" Global $sgdExpHours = "hours" Global $sgdExpDays = "days" Global $sgdExpWeeks = "weeks" Global $sgdExpMons = "months" Global $sgdExpYears = "years" Global $sgdVolume_label = "Volume" Global $sgdStart_button = "Start" Global $sgdCancel_button = "Cancel" Global $sgdPause = "Pause" Global $sgdResume = "Resume" Global $sgdExit = "Stop" ; Failsafe assignments Global $sVoice = $sdVoice Global $iFreq = $idFreq Global $vT12or24 = $vdT12or24 If $vT12or24 <> 24 Then $vT12or24 = 12 Global $iVol = $idVol Global $iRate = $idRate Global $bQuiet = $bdQuiet Global $iDisplay = $idDisplay Global $iStop = $idStop Global $sUnits = $sdUnits Global $sStopFn = "" Global $sHi = $sdHi Global $sPause = $sdPause Global $sResume = $sdResume Global $sStopSay = $sdStopSay Global $sIntro = $sdIntro Global $sPrefix = $sdPrefix Global $sPrefix1 = $sdPrefix1 Global $bSayAMPM = $bdSayAMPM If $vT12or24 = 24 Then $bSayAMPM = 0 Global $sHowFreq1 = $sdHowFreq1 Global $sHowFreq5 = $sdHowFreq5 Global $sHowFreq10 = $sdHowFreq10 Global $sHowFreq15 = $sdHowFreq15 Global $sHowFreq30 = $sdHowFreq30 Global $sHowFreq60 = $sdHowFreq60 Global $sHowFreqCustom = $sdHowFreqCustom Global $sBye = $sdBye ; GUI Labels Global $sgPause = $sgdPause Global $sgResume = $sgdResume Global $sgExit = $sgdExit Global $sgTitle = $sgdTitle Global $sgTop = $sgdTop Global $sgMinute = $sgdMinute Global $sgMinutes = $sgdMinutes Global $sgQuarterHour = $sgdQuarterHour Global $sgHalfHour = $sgdHalfHour Global $sgHour = $sgdHour Global $sgHours = $sgdHours Global $sgCustom = $sgdCustom Global $sgClock = $sgdClock Global $sg12hr_label = $sgd12hr_Label Global $sg24hr_label = $sgd24hr_label Global $sgQuiet_label = $sgdQuiet_label Global $sgSpeak_label = $sgdSpeak_label Global $sgDisplay_label = $sgdDisplay_label Global $sgExpires = $sgdExpires Global $sgExpNever = $sgdExpNever Global $sgExpAfter = $sgdExpAfter Global $sgExpSecs = $sgdExpSecs Global $sgExpMins = $sgdExpMins Global $sgExpHours = $sgdExpHours Global $sgExpDays = $sgdExpDays Global $sgExpWeeks = $sgdExpWeeks Global $sgExpMons = $sgdExpMons Global $sgExpYears = $sgdExpYears Global $sgVolume_label = $sgdVolume_label Global $sgStart_button = $sgdStart_button Global $sgCancel_button = $sgdCancel_button Global $sPad = " "; | & $sPad | Global $sHelp = "TalkTock -- The Talking Clock" & @CRLF & "CLD rev.2020-07-31 (freeware -- no warranties expressed or implied)" & @CRLF & @CRLF & "Usage:" & @CRLF & "(1) START /MIN TalkTock.exe" & @CRLF & $sPad & "Choose options, then click ""Start""" & @CRLF & @CRLF & "(2) START /MIN TalkTock.exe [/I #] [/C 12|24] [/V #]] [/R #] [/S [""]voice name[""]|hint] [/U S|M|H|D|W|T|Y=#] [/Q|/QQ]" & @CRLF & $sPad & "/I = Interval between time announcements (in minutes)" & @CRLF & $sPad & "/C = Clock style (12- or 24-hour)" & @CRLF & $sPad & "/V = Volume (range 1 to 100)" & @CRLF & $sPad & "/R = speaking Rate (range -10 to 10)" & @CRLF & $sPad & "/S ""voice name""|hint (hint = unique substring of voice name)" & @CRLF & $sPad & "/T = Say time only, no prefix or postfix (instant compatibility with any language)" & @CRLF & $sPad & "/U S|M|H|D|W|T|Y=# = clock stops after # Secs|Mins|Hrs|Days|Wks|monThs|Yrs" & @CRLF & $sPad & "/Q = Quiet (time displayed on screen, not spoken)" & @CRLF & $sPad & "/QQ = NOT Quiet (overrides Quiet=1 setting in TalkTock.ini)" & @CRLF & @CRLF & "User-selected values are saved in TalkTock.ini." & @CRLF & "Language preferences and other settings can be changed by editing" & @CRLF & " TalkTock.ini in any text editor." & @CRLF & "" & @CRLF & "(3) TalkTock /?|/H|/SayHelp|/Kill" & @CRLF & $sPad & "/?|/H = Display on-screen help" & @CRLF & $sPad & "/SayHelp = Spoken command-line usage" & @CRLF & $sPad & "/Kill = Kill ALL running TalkTock.exe processes" & @CRLF & @CRLF & "(4) TalkTock /L" & @CRLF & $sPad & "List available voices" & @CRLF & @CRLF & "(5) START /MIN TalkTock /UseFile [d:\path\]INI_filename" & @CRLF & $sPad & "Take settings from a specified settings file" & @CRLF & $sPad & "(must have TalkTock.ini format)" & @CRLF & @CRLF & "(6) TalkTock /RESET" & @CRLF & $sPad & "Create new TalkTock.ini with default settings" & @CRLF & $sPad & "(existing TalkTock.ini is backed up to TalkTock.IN_)" & @CRLF & @CRLF & "(6) TalkTock /SOURCE" & @CRLF & $sPad & "View AutoIt source code" & @CRLF ; Create TalkTock.ini (if not already present) Global $sFini = @ScriptName Global $sFini2 = ""; alternate .INI file If StringInStr($sFini, ".") Then $sFini = StringTrimRight($sFini, StringLen($sFini) - StringInStr($sFini, ".", 0, -1) + 1) $sFini = @ScriptDir & "\" & $sFini & ".ini" ;Create new (default) TalkTock.ini If $CmdLine[0] = 1 Then If StringInStr(StringUpper($CmdLine[1]), "RESET") Then If FileExists($sFini) Then FileCopy($sFini, @ScriptDir & "\TalkTock.IN_", $FC_OVERWRITE) FileDelete($sFini) EndIf EndIf EndIf ; Take settings from file not TalkTock.ini If $CmdLine[0] = 2 Then If StringUpper($CmdLine[1]) = "/USEFILE" Or StringUpper($CmdLine[1]) = "-USEFILE" Then $sFini2 = $CmdLine[2] If FileExists($sFini2) Then $sFini = $sFini2 EndIf EndIf If Not FileExists($sFini) Then Global $hIni = FileOpen($sFini, $FO_OVERWRITE + $FO_UTF8) If $hIni > -1 Then Global $sIniC = "Settings file for TalkTock.exe, Talking Clock" & @CRLF & ";" & @CRLF & "[TalkTock]" & @CRLF & ";; Interval between time announcements, in minutes" & @CRLF & "Interval=" & $idFreq & @CRLF & ";; 12- or 24-hour clock" & @CRLF & "ClockStyle=" & $vdT12or24 & @CRLF& ";; Say AM/PM? 1=Yes 0=No; applies to 12-hour clock only" & @CRLF & "SayAMPM=" & $bdSayAMPM & @CRLF& ";; TTS voice" & @CRLF & "Voice=default" & @CRLF & ";Voice=Microsoft George" & @CRLF& ";; Volume, range 1 to 100" & @CRLF & "Volume=" & $idVol & @CRLF& ";; Speaking rate, range -10 to 10" & @CRLF & "TalkRate=" & $idRate & @CRLF & ";; Clock stop timer units" & @CRLF & ";; S=secs M=mins H=hours D=days W=weeks T=months Y=years" & @CRLF & "ClockTimerUnits=" & $sdUnits & @CRLF& ";; Clock stops after how many timer units? (0 = clock never stops)" & @CRLF & "ClockStops=0" & @CRLF & ";; Quiet operation, time shown on screen (1=yes 0=no)" & @CRLF & "Quiet=0" & @CRLF & ";; Duration, in seconds, of on-screen time display" & @CRLF & ";; Fractional (decimal) values are allowed (e.g., Display=3.5)" & @CRLF & "Display=2.5" & @CRLF & @CRLF $sIniC &= "[Language]" & @CRLF & ";; Translate the phrases and labels below into your chosen language." & @CRLF & ";; Any language with a TTS function (a ""Voice"") in its language pack" & @CRLF & ";; should work. To use other languages, edit TalkTock.ini using the" & @CRLF & ";; UTF-8 character set" & @CRLF & ";" & @CRLF & ";; TimeOnly: 1=Yes (phrases set below will NOT be spoken); 0=No" & @CRLF & "TimeOnly=0" & @CRLF & ";" & @CRLF & "onStart=" & $sdHi & @CRLF& "Intro=" & $sdIntro & @CRLF & "Freq1=" & $sdHowFreq1 & @CRLF & "Freq5=" & $sdHowFreq5 & @CRLF & "Freq10=" & $sdHowFreq10 & @CRLF & "Freq15=" & $sdHowFreq15 & @CRLF & "Freq30=" & $sdHowFreq30 & @CRLF & "Freq60=" & $sdHowFreq60 & @CRLF & "FreqCustom=" & $sdHowFreqCustom & @CRLF & ";; Spoken prefix" & @CRLF & "Prefix=" & $sdPrefix & @CRLF & ";; No prefix (just announce the time):" & @CRLF & ";Prefix=" & @CRLF & ";Prefix=It's" & @CRLF & ";Prefix=It's now" & @CRLF & ";Prefix=The time is" & @CRLF & ";; Singular prefix: Prefix1 defines the singular inflection" & @CRLF & ";; for ""one o'clock"" in applicable languages, e.g., Italian" & @CRLF & ";Prefix1=" & @CRLF & ";" & @CRLF $sIniC &= ";; Postfix pairs (optional)" & @CRLF & ";; ------------------------" & @CRLF & ";; Alternatives to saying ""AM/PM"" (or equivalent) after the time" & @CRLF & ";; If time falls within Range, TalkTock says" & @CRLF & ";; Phrase after saying the time" & @CRLF & ";; You can set as many, or as few, of these pairs as you like" & @CRLF & ";; Note: Range# settings must have content (a time range hhmm-hhmm)" & @CRLF & ";; Phrase# settings can be a phrase or empty (say nothing)" & @CRLF & ";Range1=0000-0000" & @CRLF & ";Phrase1=Midnight" & @CRLF& ";Range2=0001-0329" & @CRLF & ";Phrase2=A.M." & @CRLF& ";Range3=0330-1159" & @CRLF & ";Phrase3=in the morning" & @CRLF& ";Range4=1200-1200" & @CRLF & ";Phrase4=Noon" & @CRLF& ";Range5=1201-1659" & @CRLF & ";Phrase5=in the afternoon" & @CRLF& ";Range6=1700-1959" & @CRLF & ";Phrase6=in the evening" & @CRLF & ";Range7=2000-2359" & @CRLF & ";Phrase7=at night" & @CRLF & ";; ------------------------" & @CRLF & ";" & @CRLF & ";; Pause/Resume/Stop" & @CRLF & "onPause=" & $sdPause & @CRLF & "onResume=" & $sdResume & @CRLF & "onStop=" & $sdBye & @CRLF & @CRLF $sIniC &= "[GUI_Labels]" & @CRLF & "Title=" & $sgdTitle & @CRLF & "Top=" & $sgdTop & @CRLF & "Minute=" & $sgdMinute & @CRLF & "Minutes=" & $sgdMinutes & @CRLF & "QuarterHour=" & $sgdQuarterHour & @CRLF & "HalfHour=" & $sgdHalfHour & @CRLF & "Hour=" & $sgdHour & @CRLF & "Hours=" & $sgdHours & @CRLF & "CustomLabel=" & $sgdCustom & @CRLF & "ClockStyle=" & $sgdClock & @CRLF & "12-hour_Label=" & $sgd12hr_Label & @CRLF & "24-hour_Label=" & $sgd24hr_label & @CRLF & "Quiet_label=" & $sgdQuiet_label & @CRLF & "Speak_label=" & $sgdSpeak_label & @CRLF & "Display_label=" & $sgdDisplay_label & @CRLF & "ClockStop_Label=" & $sgdExpires & @CRLF & "ClockStopsNever_Label=" & $sgdExpNever & @CRLF & "ClockStopsAfter_Label=" & $sgdExpAfter & @CRLF & "ClockStopsAfterSecs_Label=" & $sgExpSecs & @CRLF & "ClockStopsAfterMins_Label=" & $sgExpMins & @CRLF & "ClockStopsAfterHours_Label=" & $sgExpHours & @CRLF & "ClockStopsAfterDays_Label=" & $sgdExpDays & @CRLF & "ClockStopsAfterWeeks_Label=" & $sgdExpWeeks & @CRLF & "ClockStopsAfterMons_Label=" & $sgdExpMons & @CRLF & "ClockStopsAfterYears_Label=" & $sgdExpYears & @CRLF & "Volume_Label=" & $sgdVolume_label & @CRLF & "ClockStop_Label=Clock stops" & @CRLF & "ClockStopsAfter_Label=After" & @CRLF & "ClockStopsHours_Label=hours" & @CRLF & "ClockStopsNever_Label=Never" & @CRLF & "Start_button=Start" & @CRLF & "Cancel_button=Cancel" & @CRLF & "Tray_pause=Pause" & @CRLF & "Tray_resume=Resume" & @CRLF & "Tray_exit=Stop" & @CRLF If Not FileWrite($hIni, $sIniC) Then MsgBox($MB_ICONWARNING, @ScriptName, "Error writing " & $sFini, 3) FileClose($hIni) EndIf EndIf Global $sFiniV = _IniFileReadFile($sFini) If Not $sFiniV Then _ExitErr("Error reading " & $sFini) ; Read values from TalkTock.ini/alternate .ini $iFreq = _IniFileRead("sFiniV", "TalkTock", "Interval", $idFreq) $vT12or24 = _IniFileRead("sFiniV", "TalkTock", "ClockStyle", $vdT12or24) $bSayAMPM = _IniFileRead("sFiniV", "TalkTock", "SayAMPM", $bdSayAMPM) $sVoice = _IniFileRead("sFiniV", "TalkTock", "Voice", $sdVoice) If StringUpper($sVoice) = "DEFAULT" Then $sVoice = "" $iVol = _IniFileRead("sFiniV", "TalkTock", "Volume", $idVol) $iRate = _IniFileRead("sFiniV", "TalkTock", "TalkRate", $idRate) $iStop = _IniFileRead("sFiniV", "TalkTock", "ClockStops", $idStop) $sUnits = _IniFileRead("sFiniV", "TalkTock", "ClockTimerUnits", $sdUnits) $bQuiet = _IniFileRead("sFiniV", "TalkTock", "Quiet", $bdQuiet) $iDisplay = _IniFileRead("sFiniV", "TalkTock", "Display", $idDisplay) Global $bTimeOnly = _IniFileRead("sFiniV", "Language", "onStart", $bdTimeOnly) $sHi = _IniFileRead("sFiniV", "Language", "onStart", $sdHi) $sIntro = _IniFileRead("sFiniV", "Language", "Intro", $sdIntro) $sHowFreq1 = _IniFileRead("sFiniV", "Language", "Freq1", $sdHowFreq1) $sHowFreq5 = _IniFileRead("sFiniV", "Language", "Freq5", $sdHowFreq5) $sHowFreq10 = _IniFileRead("sFiniV", "Language", "Freq10", $sdHowFreq10) $sHowFreq15 = _IniFileRead("sFiniV", "Language", "Freq15", $sdHowFreq15) $sHowFreq30 = _IniFileRead("sFiniV", "Language", "Freq30", $sdHowFreq30) $sHowFreq60 = _IniFileRead("sFiniV", "Language", "Freq60", $sdHowFreq60) $sHowFreqCustom = _IniFileRead("sFiniV", "Language", "FreqCustom", $sdHowFreqCustom) $sPrefix = _IniFileRead("sFiniV", "Language", "Prefix", "") $sPrefix1 = _IniFileRead("sFiniV", "Language", "Prefix1", $sdPrefix1) $sPause = _IniFileRead("sFiniV", "Language", "onPause", $sdPause) $sResume = _IniFileRead("sFiniV", "Language", "onResume", $sdResume) $sStopSay = _IniFileRead("sFiniV", "Language", "onStop", $sdStopSay) $sBye = _IniFileRead("sFiniV", "Language", "onStop", $sdBye) ; GUI_Labels $sgTitle = _IniFileRead("sFiniV", "GUI_Labels", "Title", $sgdTitle) $sgTop = _IniFileRead("sFiniV", "GUI_Labels", "Top", $sgdTop) $sgMinute = _IniFileRead("sFiniV", "GUI_Labels", "Minute", $sgdMinute) $sgMinutes = _IniFileRead("sFiniV", "GUI_Labels", "Minutes", $sgdMinutes) $sgQuarterHour = _IniFileRead("sFiniV", "GUI_Labels", "QuarterHour", $sgdHour) $sgHalfHour = _IniFileRead("sFiniV", "GUI_Labels", "HalfHour", $sgdHours) $sgHour = _IniFileRead("sFiniV", "GUI_Labels", "Hour", $sgdHour) $sgHours = _IniFileRead("sFiniV", "GUI_Labels", "Hours", $sgdHours) $sgCustom = _IniFileRead("sFiniV", "GUI_Labels", "CustomLabel", $sgdCustom) $sgClock = _IniFileRead("sFiniV", "GUI_Labels", "ClockStyle", $sgdClock) $sg12hr_label = _IniFileRead("sFiniV", "GUI_Labels", "12-hour_Label", $sgd12hr_Label) $sg24hr_label = _IniFileRead("sFiniV", "GUI_Labels", "24-hour_Label", $sgd24hr_label) $sgQuiet_label = _IniFileRead("sFiniV", "GUI_Labels", "Quiet_label", $sgdQuiet_label) $sgSpeak_label = _IniFileRead("sFiniV", "GUI_Labels", "Speak_label", $sgdSpeak_label) $sgDisplay_label = _IniFileRead("sFiniV", "GUI_Labels", "Display_label", $sgdDisplay_label) ; $sgExpires = _IniFileRead("sFiniV", "GUI_Labels", "ClockStop_Label", $sgdExpires) $sgExpNever = _IniFileRead("sFiniV", "GUI_Labels", "ClockStopsNever_Label", $sgdExpNever) $sgExpAfter = _IniFileRead("sFiniV", "GUI_Labels", "ClockStopsAfter_Label", $sgdExpAfter) $sgExpSecs = _IniFileRead("sFiniV", "GUI_Labels", "ClockStopsAfterSecs_Label", $sgdExpSecs) $sgExpMins = _IniFileRead("sFiniV", "GUI_Labels", "ClockStopsAfterMins_Label", $sgdExpMins) $sgExpHours = _IniFileRead("sFiniV", "GUI_Labels", "ClockStopsAfterHours_Label", $sgdExpHours) $sgExpDays = _IniFileRead("sFiniV", "GUI_Labels", "ClockStopsAfterDays_Label", $sgdExpDays) $sgExpWeeks = _IniFileRead("sFiniV", "GUI_Labels", "ClockStopsAfterWeeks_Label", $sgdExpWeeks) $sgExpMons = _IniFileRead("sFiniV", "GUI_Labels", "ClockStopsAfterMons_Label", $sgdExpMons) $sgExpYears = _IniFileRead("sFiniV", "GUI_Labels", "ClockStopsAfterYears_Label", $sgdExpYears) ; Global $sgVolume = _IniFileRead("sFiniV", "GUI_Labels", "Volume_Label", $sgdVolume_label) $sgStart_button = _IniFileRead("sFiniV", "GUI_Labels", "Start_button", $sgdStart_button) $sgCancel_button = _IniFileRead("sFiniV", "GUI_Labels", "Cancel_button", $sgdCancel_button) $sgPause = _IniFileRead("sFiniV", "GUI_Labels", "Tray_pause", $sgdPause) $sgResume = _IniFileRead("sFiniV", "GUI_Labels", "Tray_resume", $sgdResume) $sgExit = _IniFileRead("sFiniV", "GUI_Labels", "Tray_exit", $sgdExit) ; Global $hTrayPA = TrayCreateItem($sgPause, -1, 0) Global $hTrayEX = TrayCreateItem($sgExit, -1, 1) TraySetClick(1) TraySetState($TRAY_ICONSTATE_SHOW) TrayItemSetOnEvent($hTrayPA, "_TrayPause") TrayItemSetOnEvent($hTrayEX, "_TrayExit") ; Postfix pairs: get values Global $aParts[1000][2] $aParts[0][0] = 0 If $bTimeOnly = 0 Then $aParts = PostfixPairsRead() $sFiniV = "" Global $iS = 0 ; seconds counter Global $sDate1, $sDate2, $sTimerFn = "", $iBabyPID = -1 Global $oVox = ObjCreate("SAPI.spVoice") If @error Then _ExitErr("SAPI error") $oVox.Volume = $iVol $oVox.Rate = $iRate ; Args so skip the GUI (except if arg = RESET) If $CmdLine[0] > 0 Then If StringInStr($sCMline, "/s") Then $sVoice = _GetArgValue("/s") If StringInStr($sCMline, "-s") Then $sVoice = _GetArgValue("-s") Global $oVoices If $sVoice Then $oVoices = $oVox.GetVoices() For $vName in $oVoices If StringInStr($vName.GetDescription(), $sVoice) Then $oVox.Voice = $vName ExitLoop EndIf Next EndIf If StringInStr(StringUpper($CmdLine[1]), "RESET") Then Exit MsgBox($MB_OK, @ScriptName, "Default settings restored in " & $sFini) Else Exit MAIN() EndIf EndIf ; GUI interface ; ------------- Global $hgTT = GUICreate($sgTitle, 638, 365, -1, -1, $WS_EX_APPWINDOW) GUISetState(@SW_SHOW, $hgTT) ;#Region ### START Koda GUI section ### Form=TT1.kxf ;$GroupBox1 = GUICtrlCreateGroup("", -8, -32, 526, 822) GUICtrlSetFont(-1, 10, 400, 0, "MS Sans Serif") GUICtrlSetColor(-1, 0x000000) GUICtrlSetBkColor(-1, 0xFFFFFF) Global $Label1 = GUICtrlCreateLabel($sgTop & ":", 8, 16, 137, 24) Global $hgA = GUICtrlCreateCheckbox($sgMinute, 16, 48, 113, 17) If $iFreq = 1 Then GUICtrlSetState($hgA, $GUI_CHECKED) Else GUICtrlSetState($hgA, $GUI_UNCHECKED) EndIf Global $hgB = GUICtrlCreateCheckbox("5 " & $sgMinutes, 16, 72, 113, 17) If $iFreq = 5 Then GUICtrlSetState($hgB, $GUI_CHECKED) Else GUICtrlSetState($hgB, $GUI_UNCHECKED) EndIf Global $hgC = GUICtrlCreateCheckbox("10 " & $sgMinutes, 16, 96, 113, 17) If $iFreq = 10 Then GUICtrlSetState($hgC, $GUI_CHECKED) Else GUICtrlSetState($hgC, $GUI_UNCHECKED) EndIf Global $hgD = GUICtrlCreateCheckbox($sgQuarterHour, 16, 120, 113, 17) If $iFreq = 15 Then GUICtrlSetState($hgD, $GUI_CHECKED) Else GUICtrlSetState($hgD, $GUI_UNCHECKED) EndIf Global $hgE = GUICtrlCreateCheckbox($sgHalfHour, 16, 144, 113, 17) If $iFreq = 30 Then GUICtrlSetState($hgE, $GUI_CHECKED) Else GUICtrlSetState($hgE, $GUI_UNCHECKED) EndIf Global $hgF = GUICtrlCreateCheckbox($sgHour, 16, 168, 113, 17) If $iFreq = 60 Then GUICtrlSetState($hgF, $GUI_CHECKED) Else GUICtrlSetState($hgF, $GUI_UNCHECKED) EndIf Global $hgX = GUICtrlCreateCheckbox($sgCustom & ":", 16, 192, 80, 17) Global $hgXt = GUICtrlCreateInput("", 96, 192, 41, 28) Global $Label2 = GUICtrlCreateLabel(" " & $sgMinutes, 144, 192, 60, 24) If Not StringInStr("|1|5|10|15|30|60|", "|" & $iFreq & "|") Then GUICtrlSetState($hgX, $GUI_CHECKED) GUICtrlSetState($hgX, $GUI_ENABLE) GUICtrlSetState($hgXt, $GUI_ENABLE) GUICtrlSetData($hgXt, $iFreq) Else GUICtrlSetState($hgX, $GUI_UNCHECKED) GUICtrlSetState($hgXt, $GUI_DISABLE) EndIf Global $Label3 = GUICtrlCreateLabel($sgClock & ":", 180, 16, 79, 24) Global $hgK = GUICtrlCreateCheckbox($sg12hr_label, 182, 48, 97, 17) If $vT12or24 = 12 Then GUICtrlSetState($hgK, $GUI_CHECKED) Else GUICtrlSetState($hgK, $GUI_UNCHECKED) $bSayAMPM = 0 EndIf Global $hgL = GUICtrlCreateCheckbox($sg24hr_label, 182, 72, 97, 17) If $vT12or24 = 24 Then GUICtrlSetState($hgL, $GUI_CHECKED) $bSayAMPM = 0 Else GUICtrlSetState($hgL, $GUI_UNCHECKED) EndIf Global $Label4 = GUICtrlCreateLabel($sgQuiet_label, 182, 130) Global $hgSpeak = GUICtrlCreateCheckbox($sgSpeak_label, 265, 130, 205, 17) GUICtrlSetState($hgSpeak, $GUI_ENABLE) Global $hgDisplay = GUICtrlCreateCheckbox($sgDisplay_label, 265, 155, 205, 17) GUICtrlSetState($hgDisplay, $GUI_ENABLE) If $bQuiet = 0 Then GUICtrlSetState($hgSpeak, $GUI_CHECKED) GUICtrlSetState($hgDisplay, $GUI_UNCHECKED) Else GUICtrlSetState($hgSpeak, $GUI_UNCHECKED) GUICtrlSetState($hgDisplay, $GUI_CHECKED) EndIf ; Clock stops Global $Label5 = GUICtrlCreateLabel($sgExpires & ":", 390, 16, 90, 24) Global $hgExpNever = GUICtrlCreateCheckbox($sgExpNever, 392, 48, 97, 17) If $iStop = 0 Then GUICtrlSetState($hgExpNever, $GUI_CHECKED + $GUI_ENABLE) Else GUICtrlSetState($hgExpNever, $GUI_UNCHECKED + $GUI_ENABLE) EndIf Global $hgExp = GUICtrlCreateCheckbox($sgExpAfter, 398, 72, 65, 17) If $iStop > 0 Then GUICtrlSetState($hgExp, $GUI_CHECKED + $GUI_ENABLE) Else GUICtrlSetState($hgExp, $GUI_UNCHECKED + $GUI_ENABLE) EndIf Global $hgExpAft = GUICtrlCreateInput("", 456, 64, 41, 28) If $iStop > 0 Then GUICtrlSetState($hgExpAft, $GUI_ENABLE) GUICtrlSetData($hgExpAft, $iStop) Else GUICtrlSetState($hgExpAft, $GUI_DISABLE) EndIf Global $hgExpUsecs = GUICtrlCreateRadio($sgExpSecs, 414, 96, 113, 17) If $iStop > 0 And $sUnits = "S" Then GUICtrlSetState($hgExpUsecs, $GUI_CHECKED + $GUI_ENABLE) Else GUICtrlSetState($hgExpUsecs, $GUI_UNCHECKED + $GUI_DISABLE) EndIf Global $hgExpUmins = GUICtrlCreateRadio($sgExpMins, 414, 120, 113, 17) If $iStop > 0 And $sUnits = "M" Then GUICtrlSetState($hgExpUmins, $GUI_CHECKED + $GUI_ENABLE) Else GUICtrlSetState($hgExpUmins, $GUI_UNCHECKED + $GUI_DISABLE) EndIf Global $hgExpUhours = GUICtrlCreateRadio($sgExpHours, 414, 144, 113, 17) If $iStop > 0 And $sUnits = "H" Then GUICtrlSetState($hgExpUhours, $GUI_CHECKED + $GUI_ENABLE) Else GUICtrlSetState($hgExpUhours, $GUI_UNCHECKED + $GUI_DISABLE) EndIf Global $hgExpUdays = GUICtrlCreateRadio($sgExpDays, 414, 168, 113, 17) If $iStop > 0 And $sUnits = "D" Then GUICtrlSetState($hgExpUdays, $GUI_CHECKED + $GUI_ENABLE) Else GUICtrlSetState($hgExpUdays, $GUI_UNCHECKED + $GUI_DISABLE) EndIf Global $hgExpUweeks = GUICtrlCreateRadio($sgExpWeeks, 414, 192, 113, 17) If $iStop > 0 And $sUnits = "W" Then GUICtrlSetState($hgExpUweeks, $GUI_CHECKED + $GUI_ENABLE) Else GUICtrlSetState($hgExpUweeks, $GUI_UNCHECKED + $GUI_DISABLE) EndIf Global $hgExpUmons = GUICtrlCreateRadio($sgExpMons, 414, 216, 113, 17) If $iStop > 0 And $sUnits = "T" Then GUICtrlSetState($hgExpUmons, $GUI_CHECKED + $GUI_ENABLE) Else GUICtrlSetState($hgExpUmons, $GUI_UNCHECKED + $GUI_DISABLE) EndIf Global $hgExpUyears = GUICtrlCreateRadio($sgExpYears, 414, 240, 113, 17) If $iStop > 0 And $sUnits = "Y" Then GUICtrlSetState($hgExpUyears, $GUI_CHECKED + $GUI_ENABLE) Else GUICtrlSetState($hgExpUyears, $GUI_UNCHECKED + $GUI_DISABLE) EndIf Global $iX = 8 GUICtrlCreateLabel($sgVolume_label, 8, 230+12) Global $hgV = GUICtrlCreateSlider(8, 255+12, 360) GUICtrlSetLimit($hgV, 100, 1) GUICtrlSetData($hgV, $iVol) GUICtrlSetState($hgV, $GUI_SHOW) GUICtrlCreateLabel("0", $iX, 280, 360) GUICtrlCreateLabel("20", $iX + 1*71, 280, 360) GUICtrlCreateLabel("40", $iX + 2*70, 280, 360) GUICtrlCreateLabel("60", $iX + 1 + 3*70, 280, 360) GUICtrlCreateLabel("80", $iX - 2 + 4*69, 280, 360) GUICtrlCreateLabel("100", $iX - 2 + 5*69, 280, 360) GUICtrlCreateGroup("", -99, -99, 1, 1) Global $hgStart = GUICtrlCreateButton($sgStart_button, 534, 22, 92, 30, $BS_DEFPUSHBUTTON) GUICtrlSetState($hgStart, $GUI_FOCUS) Global $hgCancel = GUICtrlCreateButton($sgCancel_button, 534, 62, 92, 31) GUISetState(@SW_SHOW) ; #EndRegion ### END Koda GUI section ### If $bQuiet = 0 Then _SayTxt($sHi) WHILE 1 Switch GUIGetMsg() Case $hgA $iFreq = 1 GUICtrlSetState($hgA, $GUI_CHECKED) GUICtrlSetState($hgB, $GUI_UNCHECKED) GUICtrlSetState($hgC, $GUI_UNCHECKED) GUICtrlSetState($hgD, $GUI_UNCHECKED) GUICtrlSetState($hgE, $GUI_UNCHECKED) GUICtrlSetState($hgF, $GUI_UNCHECKED) GUICtrlSetState($hgX, $GUI_UNCHECKED) GUICtrlSetState($hgXt, $GUI_DISABLE) Case $hgB $iFreq = 5 GUICtrlSetState($hgA, $GUI_UNCHECKED) GUICtrlSetState($hgB, $GUI_CHECKED) GUICtrlSetState($hgC, $GUI_UNCHECKED) GUICtrlSetState($hgD, $GUI_UNCHECKED) GUICtrlSetState($hgE, $GUI_UNCHECKED) GUICtrlSetState($hgF, $GUI_UNCHECKED) GUICtrlSetState($hgX, $GUI_UNCHECKED) GUICtrlSetState($hgXt, $GUI_DISABLE) Case $hgC $iFreq = 10 GUICtrlSetState($hgA, $GUI_UNCHECKED) GUICtrlSetState($hgB, $GUI_UNCHECKED) GUICtrlSetState($hgC, $GUI_CHECKED) GUICtrlSetState($hgD, $GUI_UNCHECKED) GUICtrlSetState($hgE, $GUI_UNCHECKED) GUICtrlSetState($hgF, $GUI_UNCHECKED) GUICtrlSetState($hgX, $GUI_UNCHECKED) GUICtrlSetState($hgXt, $GUI_DISABLE) Case $hgD $iFreq = 15 GUICtrlSetState($hgA, $GUI_UNCHECKED) GUICtrlSetState($hgB, $GUI_UNCHECKED) GUICtrlSetState($hgC, $GUI_UNCHECKED) GUICtrlSetState($hgD, $GUI_CHECKED) GUICtrlSetState($hgE, $GUI_UNCHECKED) GUICtrlSetState($hgF, $GUI_UNCHECKED) GUICtrlSetState($hgX, $GUI_UNCHECKED) GUICtrlSetState($hgXt, $GUI_DISABLE) Case $hgE $iFreq = 30 GUICtrlSetState($hgA, $GUI_UNCHECKED) GUICtrlSetState($hgB, $GUI_UNCHECKED) GUICtrlSetState($hgC, $GUI_UNCHECKED) GUICtrlSetState($hgD, $GUI_UNCHECKED) GUICtrlSetState($hgE, $GUI_CHECKED) GUICtrlSetState($hgF, $GUI_UNCHECKED) GUICtrlSetState($hgX, $GUI_UNCHECKED) GUICtrlSetState($hgXt, $GUI_DISABLE) Case $hgF $iFreq = 60 GUICtrlSetState($hgA, $GUI_UNCHECKED) GUICtrlSetState($hgB, $GUI_UNCHECKED) GUICtrlSetState($hgC, $GUI_UNCHECKED) GUICtrlSetState($hgD, $GUI_UNCHECKED) GUICtrlSetState($hgE, $GUI_UNCHECKED) GUICtrlSetState($hgF, $GUI_CHECKED) GUICtrlSetState($hgX, $GUI_UNCHECKED) GUICtrlSetState($hgXt, $GUI_DISABLE) Case $hgX $bCanned = 0 GUICtrlSetState($hgA, $GUI_UNCHECKED) GUICtrlSetState($hgB, $GUI_UNCHECKED) GUICtrlSetState($hgC, $GUI_UNCHECKED) GUICtrlSetState($hgD, $GUI_UNCHECKED) GUICtrlSetState($hgE, $GUI_UNCHECKED) GUICtrlSetState($hgF, $GUI_UNCHECKED) GUICtrlSetState($hgX, $GUI_CHECKED) GUICtrlSetState($hgXt, $GUI_ENABLE) Case $hgXt $bCanned = 0 $iFreq = GUICtrlRead($hgXt) Case $hgK $vT12or24 = 12 $bSayAMPM = 0 GUICtrlSetState($hgK, $GUI_CHECKED) GUICtrlSetState($hgL, $GUI_UNCHECKED) Case $hgL $vT12or24 = 24 $bSayAMPM = 0 GUICtrlSetState($hgK, $GUI_UNCHECKED) GUICtrlSetState($hgL, $GUI_CHECKED) Case $hgDisplay $bQuiet = 1 GUICtrlSetState($hgSpeak, $GUI_UNCHECKED) GUICtrlSetState($hgDisplay, $GUI_CHECKED) Case $hgSpeak $bQuiet = 0 GUICtrlSetState($hgSpeak, $GUI_CHECKED) GUICtrlSetState($hgDisplay, $GUI_UNCHECKED) Case $hgV $iVol = GUICtrlRead($hgV) GUICtrlSetState($hgV, $GUI_ENABLE) Global $aCartesian = MouseGetPos() ToolTip($iVol, $aCartesian[0], $aCartesian[1], "", 0, 2) Sleep(500) ToolTip("") GUICtrlSetState($hgV, $GUI_CHECKED) Case $hgExp GUICtrlSetState($hgExp, $GUI_CHECKED) GUICtrlSetState($hgExpNever, $GUI_UNCHECKED) GUICtrlSetState($hgExpAft, $GUI_ENABLE) GUICtrlSetState($hgExpUsecs, $GUI_UNCHECKED + $GUI_ENABLE) GUICtrlSetState($hgExpUmins, $GUI_UNCHECKED + $GUI_ENABLE) GUICtrlSetState($hgExpUhours, $GUI_CHECKED + $GUI_ENABLE) GUICtrlSetState($hgExpUdays, $GUI_UNCHECKED + $GUI_ENABLE) GUICtrlSetState($hgExpUweeks, $GUI_UNCHECKED + $GUI_ENABLE) GUICtrlSetState($hgExpUmons, $GUI_UNCHECKED + $GUI_ENABLE) GUICtrlSetState($hgExpUyears, $GUI_UNCHECKED + $GUI_ENABLE) Case $hgExpAft $iStop = GUICtrlRead($hgExpAft) If Not StringIsDigit($iStop) Then $iStop = 0 Case $hgExpUsecs $sUnits = "S" Case $hgExpUmins $sUnits = "M" Case $hgExpUhours $sUnits = "H" Case $hgExpUdays $sUnits = "D" Case $hgExpUweeks $sUnits = "W" Case $hgExpUmons $sUnits = "T" Case $hgExpUyears $sUnits = "Y" Case $hgExpNever $iStop = 0 GUICtrlSetState($hgExpNever, $GUI_CHECKED) GUICtrlSetState($hgExp, $GUI_UNCHECKED) GUICtrlSetState($hgExpAft, $GUI_DISABLE) GUICtrlSetState($hgExpUsecs, $GUI_UNCHECKED + $GUI_DISABLE) GUICtrlSetState($hgExpUmins, $GUI_UNCHECKED + $GUI_DISABLE) GUICtrlSetState($hgExpUhours, $GUI_CHECKED + $GUI_DISABLE) GUICtrlSetState($hgExpUdays, $GUI_UNCHECKED + $GUI_DISABLE) GUICtrlSetState($hgExpUweeks, $GUI_UNCHECKED + $GUI_DISABLE) GUICtrlSetState($hgExpUmons, $GUI_UNCHECKED + $GUI_DISABLE) GUICtrlSetState($hgExpUyears, $GUI_UNCHECKED + $GUI_DISABLE) Case $hgStart GUISetState(@SW_HIDE, $hgTT) MAIN() Case $hgCancel ContinueCase Case $GUI_EVENT_CLOSE ; _SayTxt($sBye) If Not $sFini2 Then WriteTTini() Exit EndSwitch WEND ; Function definitions ; -------------------- Func MAIN() ; TalkTock If $sFini2 = "" And $CmdLine[0] > 0 Then ; ---------------------------------------- If StringInStr($CmdLine[1], "/L") Then Exit MsgBox($MB_OK, @ScriptName, _ListVoices()) If StringInStr($CmdLine[1], "/source") Then Exit _ShowSource("txt") If StringInStr($CmdLine[1], "/?") = 1 Or StringInStr($CmdLine[1], "-?") = 1 Or StringInStr($CmdLine[1], "/h") = 1 Or StringInStr($CmdLine[1], "-h") = 1 Then Exit _ShowHelp() If StringInStr($CmdLine[1], "sayhelp") Then Exit _SayHelp() If StringInStr($CmdLine[1], "kill") Then Local $aP = ProcessList(@ScriptName) Local $iP = $aP[0][0] - 1 If Not @error Or $iP > 1 Then Local $sT = "Killing " & $iP & @ScriptName _Splash($sT & " process(es)") Sleep(1000) SplashOff() While ProcessClose(@ScriptName) Sleep(100) WEnd Exit Else _ExitErr("No running " & @ScriptName & " processes") EndIf EndIf If StringInStr($sCMline, "/i") Then $iFreq = _GetArgValue("/i") If StringInStr($sCMline, "-i") Then $iFreq = _GetArgValue("-i") If StringInStr($sCMline, "/c") Then $vT12or24 = _GetArgValue("/c") If StringInStr($sCMline, "-c") Then $vT12or24 = _GetArgValue("-c") If StringInStr($sCMline, "/v") Then $iVol = _GetArgValue("/v") If StringInStr($sCMline, "-v") Then $iVol = _GetArgValue("-v") If StringInStr($sCMline, "/q") Or StringInStr($sCMline, "-q") Then $bQuiet = 1 If StringInStr($sCMline, "/qq") Or StringInStr($sCMline, "-qq") Then $bQuiet = 0 If StringInStr($sCMline, "/t") Or StringInStr($sCMline, "-t") Then $bTimeOnly = 1 $bSayAMPM = 0 EndIf If StringInStr($sCMline, "/r") Then $iRate = _GetArgValue("/r") If StringInStr($sCMline, "-r") Then $iRate = _GetArgValue("-r") Local $sU = "H" If StringInStr($sCMline, "/u ") Then $sU = _GetArgValue("/u") If StringInStr($sCMline, "-u ") Then $sU = _GetArgValue("-u") If StringInStr($sU, "=") Then Local $aU = StringSplit($sU, "=") $sUnits = $aU[1] If $aU[0] > 1 Then $iStop = $aU[2] If Not $iStop Then $iStop = 0 Switch $sU Case "S" $sUnits = "seconds" Case "M" $sUnits = "minutes" Case "H" $sUnits = "hours" Case "D" $sUnits = "days" Case "W" $sUnits = "weeks" Case "T" $sUnits = "months" Case "Y" $sUnits = "years" EndSwitch EndIf If StringInStr($sCMline, "/usefile") Then $sFini = _GetArgValue("/usefile") If StringInStr($sCMline, "-usefile") Then $sFini = _GetArgValue("-usefile") EndIf ; -------------------- If $bTimeOnly = 1 Then $sHi = "" $sIntro = "" $sHowFreq1 = "" $sHowFreq5 = "" $sHowFreq10 = "" $sHowFreq15 = "" $sHowFreq30 = "" $sHowFreq60 = "" $sHowFreqCustom = "" $sPrefix = "" $sPrefix1 = "" $sPause = "" $sResume = "" $sStopSay = "" $sBye = "" EndIf #cs; debug Exit MsgBox(0,"", _ "$bTimeOnly = " & $bTimeOnly & @CRLF & _ "$iFreq = " & $iFreq & @CRLF & _ "$vT12or24 = " & $vT12or24 & @CRLF & _ "$sVoice = " & $sVoice & @CRLF & _ "$iVol = " & $iVol & @CRLF & _ "$iRate = " & $iRate & @CRLF & _ "$iStop = " & $iStop & @CRLF & _ "$sUnits = " & $sUnits & @CRLF & _ "$bQuiet = " & $bQuiet & @CRLF & _ "$iDisplay = " & $iDisplay & @CRLF) #ce; debug ; Failsafe defaults If Not StringIsDigit(String($iFreq)) Then $iFreq = 15 If Not $vT12or24 = "24" Then $vT12or24 = 12 If Not StringIsDigit(String($iVol)) Then $iVol = 80 If $iVol > 100 Then $iVol = 100 If String(Abs($iRate)) <> String($iRate) Then $iRate = 0 If $iRate < -10 Or $iRate > 10 Then $iRate = 0 If Not StringIsDigit(String($iStop)) Then $iStop = 0 If Not StringInStr("|S|M|H|D|W|T|Y|", ("|" & $sUnits & "|")) Then $sUnits = "H" Local $sAllFreqs = "|1|5|10|15|30|60|", $sHowFreq = "" If StringInStr($sAllFreqs, "|" & $iFreq & "|") < 1 Then $bCanned = 0 If Not $bCanned Then If StringIsDigit(String($iFreq)) Then $iFreq = Int($iFreq) If $iFreq < 1 Then Exit _ShowHelp() Else EndIf EndIf If $bCanned Then Switch $iFreq Case 1 $sHowFreq = $sHowFreq1 Case 5 $sHowFreq = $sHowFreq5 Case 10 $sHowFreq = $sHowFreq10 Case 15 $sHowFreq = $sHowFreq15 Case 30 $sHowFreq = $sHowFreq30 Case 60 $sHowFreq = $sHowFreq60 EndSwitch Else $sHowFreq = $iFreq & $sHowFreqCustom EndIf If Not $sFini2 Then WriteTTini() If $bQuiet = 0 Then _SayTxt($sIntro & " " & $sHowFreq) Else $sHowFreq = StringReplace($sHowFreq, "minnit", " minute") $sHowFreq = StringReplace($sHowFreq, "'", "h") If StringLen($sHowFreq) > 10 Then $sHowFreq = @CRLF & $sHowFreq If $sHowFreq Then _Splash($sIntro & $sHowFreq) Sleep(2000) SplashOff() EndIf If $iStop > 0 Then $sDate1 = @YEAR & "/" & @MON & "/" & @MDAY & " " & @HOUR & ":" & @MIN & ":" & @SEC $sTimerFn = _TmpFile(@TempDir, "au3", 8, "TkTk") $iS = _SetTimer($iStop, $sUnits) $iBabyPID = _StartTimer($iS) EndIf If $bCanned Then While 1 Do Sleep(200) Until @SEC = 00 And Mod(@MIN, $iFreq) = 0 _SayTime($vT12or24) _CheckTimer() Sleep(45000) WEnd Else ; Custom interval Do Sleep(100) Until @SEC = 00 Local $iFreq, $iMin, $iNext While 1 $iMin = @MIN _SayTime($vT12or24) _CheckTimer() If $iFreq = 60 Then Sleep(60500) $iNext = Mod($iMin + $iFreq, 60) Do Sleep(100) Until @MIN = $iNext WEnd EndIf EndFunc ;==>MAIN ; --------------- Func _GetArgValue($sArg) ; Get value (if any) following /SWitch (arg) Local $sVal = "" If $CmdLine[0] > 1 Then For $i = 1 To $CmdLine[0] If $sArg = $CmdLine[$i] Then If $CmdLine[0] > $i Then $sVal = StringStripWS($CmdLine[$i + 1], 1) If StringInStr($sVal, "/") = 1 Or StringInStr($sVal, "-") = 1 Then If StringInStr($sArg, "r") = 2 And StringInStr($sVal, "-") And StringIsDigit(StringTrimLeft($sVal, 1)) Then Return $sVal Else Return "" EndIf EndIf EndIf EndIf Next EndIf Return $sVal EndFunc ;==>_GetArgValue Func _SetTimer($iN, $sUnits = "H") If StringLen($sUnits) > 1 Then $sUnits = StringLeft($sUnits, 3) If $sUnits = "mon" Then $sUnits = "T" $sUnits = StringUpper(StringLeft($sUnits, 1)) EndIf Local $iM = 0 Switch $sUnits Case "S" $iM = 1 Case "M" $iM = 60 Case "H" $iM = 3600 Case "D" $iM = 86400 Case "W" $iM = 604800 Case "T" $iM = 2592000 Case "Y" $iM = 31536000 EndSwitch $iN *= $iM Return $iN EndFunc ;==>_SetTimer Func _StartTimer($iSecs) Local $sFn = $sTimerFn Local $sFc = "Opt(""TrayIconHide"", 1)" & @CRLF & "$iS = " & $iSecs & @CRLF & "Do" & @CRLF & "Do" & @CRLF & "$iSec = @SEC" & @CRLF & "Sleep(100)" & @CRLF & "Until @SEC <> $iSec " & @CRLF & "$iS -= 1" & @CRLF & "Until $iS < 1" & @CRLF & "Exit" & @CRLF Local $hT = FileOpen($sFn, 2) If $hT > -1 Then FileWrite($hT, $sFc) FileClose($hT) Else _ExitErr("Error writing temp file") EndIf Local $iPID = Run(@ScriptFullPath & " /AutoIt3ExecuteScript " & $sFn, @TempDir, @SW_HIDE) Sleep(200) Return $iPID EndFunc ;==>_StartTimer Func _CheckTimer() If $iStop > 0 Then If Not ProcessExists($iBabyPID) Then FileDelete($sTimerFn) $sDate2 = @YEAR & "-" & @MON & "-" & @MDAY & " " & @HOUR & ":" & @MIN & ":" & @SEC Local $sDDType = "", $sDDUnits = "" Switch $sUnits Case "S" $sDDType = "s" $sDDUnits = "seconds" Case "M" $sDDType = "n" $sDDUnits = "minutes" Case "H" $sDDType = "h" $sDDUnits = "hour(s)" Case Else $sDDType = "D" $sDDUnits = "day(s)" EndSwitch Local $vETime = _DateDiff($sDDType, $sDate1, $sDate2) If @error Then $vETime = "[??]" Exit MsgBox($MB_OK, @ScriptName, @ScriptName & " stopped as requested at " & $sDate2 & @CRLF & "Elapsed time: " & $vETime & " " & $sDDUnits, 60) EndIf EndIf Return EndFunc ;==>_CheckTimer Func _ExitErr($sMg, $iSecs = 0) Exit MsgBox($MB_OK + $MB_ICONERROR, @ScriptName, $sMg, $iSecs) EndFunc ;==>_ExitErr Func _IniFileRead($sVarName, $sSection, $sKey, $sDefault) #cs; ----------------------------------------------- IniRead with default text encoding @error codes: 1 = Variable $sVarName Not Declared 2 = Error reading contents of $sVarName 3 = Section not found 4 = Key not found 5 = Key not found in section #ce; ----------------------------------------------- If Not IsDeclared($sVarName) Then If $sDefault Then Return $sDefault Else Return SetError(1, "Variable " & $sVarName & " is not declared", "") EndIf EndIf Local $sFc = Eval($sVarName) If Not $sFc Then If $sDefault Then Return $sDefault Else Return SetError(2, "Error reading INI file contents", "") EndIf EndIf Local $sCrLf = @LF $sFc = StringReplace($sFc, @CRLF, $sCrLf) Local $iXsec = StringInStr(StringUpper($sFc), $sCrLf & "[" & StringUpper($sSection) & "]") If $iXsec < 1 Then If $sDefault Then Return $sDefault Else Return SetError(3, "Section not found", "") EndIf EndIf $iXsec += StringLen($sCrLf & "[" & StringUpper($sSection) & "]") Local $sSecC = $sCrLf & StringTrimLeft($sFc, $iXsec) If StringInStr($sSecC, $sCrLf & "[") And StringInStr($sSecC, "]" & $sCrLf) > StringInStr($sSecC, $sCrLf & "[") Then _ $sSecC = StringTrimRight($sSecC, StringLen($sSecC) - StringInStr($sSecC, $sCrLf & "[")) If Not StringInStr(StringUpper($sSecC), StringUpper($sKey) & "=") Then If $sDefault Then Return $sDefault Else Return SetError(4, "Key not found", "") EndIf EndIf Local $sVal0 = StringTrimLeft($sSecC, StringInStr($sSecC, $sCrLf & $sKey & "=")) $sVal0 = StringTrimRight($sVal0, 1 + StringLen($sVal0) - StringInStr($sVal0, String($sCrLf))) Local $sValue = StringTrimLeft($sVal0, StringInStr($sVal0, "=")) If Not $sValue Then $sValue = $sDefault Return SetError(0, 0, $sValue) EndFunc ;==>_IniFileRead Func _IniFileReadFile($sFn) #cs; ------------------------------------------------ Read INI file contents into a (string) variable @error codes: 1 = $sVarName Is Not Declared 2 = Error reading $sVarName 3 = Section does not exit 4 = Key does not exit #ce; ------------------------------------------------ If Not FileExists($sFn) Then Return SetError(1, 0, "") Local $h = FileOpen($sFn) If $h = -1 Then Return SetError(2, 0, "") Local $sFc = FileRead($h) If Not FileClose($h) Then Return SetError(3, 0, "") If StringRight($sFc, 1) = Chr(26) Then $sFc = StringTrimRight($sFc, 1) Return @CRLF & $sFc EndFunc ;==>_IniFileReadFile Func _ListVoices() $oVox = ObjCreate("SAPI.spVoice") If @error Then Exit _ExitErr("Error creating SAPI object", 10) $oVoices = $oVox.GetVoices() Local $sVlist = "" For $vName in $oVoices $sVlist &= $vName.GetDescription() & @CRLF Next Return $sVlist EndFunc ;==>_ListVoices Func _PauseVoice($iBeats = 1) If StringIsDigit(String($iBeats)) Then $iBeats = Int($iBeats) Sleep($iBeats * 100) EndIf Return EndFunc ;==>_PauseVoice Func _SayHelp() _SayTxt("Welcome to TalkTock, The Talking Clock.") _PauseVoice(1) _SayTxt("To get started, command START, space, forward slash, M,I,N, space, TalkTock, Enter. Choose your settings, and click Start.") _PauseVoice(1) _SayTxt("For command-line help, command TalkTock, space, forward slash, question mark, and hit Enter.") _PauseVoice(1) _SayTxt("To view and customize all available TalkTock settings, open TalkTock dot I,N,I, in any text editor.") _PauseVoice(1) _SayTxt("I hope you enjoy TalkTock!") Return EndFunc ;==>_SayHelp Func _SayTime($vTime12or24 = 12) Local $h = Int(@HOUR) Local $sAMPM = "" Local $sPostfix = PostfixPairsSet() If $vTime12or24 = "12" Then If $bSayAMPM Then $sAMPM = "AM" If $h > 11 Then $sAMPM = "PM" EndIf If $h > 11 Then $h = Mod($h, 12) If $h = 0 Then $h = 12 EndIf If $sPrefix1 And Int($h) = 1 Then $sPrefix = $sPrefix1 If Not $sPostfix Then $sPostfix = $sAMPM Local $sTime = $sPrefix & " " & $h & ":" & @MIN & " " & $sPostfix If $bQuiet > 0 Then _Splash($sTime) If $iDisplay < 1 Then $iDisplay = 1 Sleep(Int(1000 * $iDisplay)) SplashOff() Else _SayTxt($sTime) EndIf Return EndFunc ;==>_SayTime Func _SayTxt($sIn) ; Text-to-Speech Local $iRC = -1 If $sIn Then $oVox.Speak($sIn) $iRC = StringLen($sIn) EndIf Return $iRC EndFunc ;==>_SayTxt Func _ShowHelp() MsgBox($MB_OK, @ScriptName & " - Talking Clock", $sHelp) EndFunc ;==>_ShowHelp Func _ShowSource($postfx) ; Show source code Local $Ext If Not $postfx Then $Ext = "txt" Else $Ext = $postfx EndIf Local $TmpFile = @TempDir & "\ausource." & $Ext If FileExists($TmpFile) Then If FileGetAttrib($TmpFile) = "R" Then FileSetAttrib($TmpFile, "-R") EndIf Select Case $Ext = "txt" FileInstall("X:\ausource.txt", $TmpFile, 1) Case $Ext = "pdf" ;FileInstall("X:\ausource.pdf", $TmpFile, 1) EndSelect Sleep(50) ShellExecute($TmpFile, "", @TempDir, "open") EndFunc ;==>_ShowSource Func _Splash($sTxt) SplashTextOn(@ScriptName, $sTxt, 650, 150, -1, -1, 32, "", 14, 600) Return EndFunc ;==>_Splash Func _TmpFile($sDir = @TempDir, $sExt = "tmp", $iLen = 8, $sPre = "") ; Generate a non-existent 8.3 filename ; Returns null string on failure Local $aA = StringSplit("ABCDEFGHIJKLMNPQRSTUVWXYZ123456789", "") Local $sX = "nul", $itr = 0 If $sPre Then $iLen -= StringLen($sPre) While FileExists($sX) $itr += 1 $sX = $sPre For $i = 1 To $iLen $sX &= $aA[Random(1, $aA[0])] Next $sX = $sDir & "\" & $sX & "." & $sExt If $itr > 50 Then $sX = "" ExitLoop EndIf WEnd Return $sX EndFunc ;==>_TmpFile Func _TrayPause() If TrayItemGetText($hTrayPA) = $sgPause Then TrayItemSetText($hTrayPA, $sgResume) If $bQuiet = 0 Then _SayTxt($sPause) Else _Splash($sPause) Sleep(1500) SplashOff() EndIf Else TrayItemSetText($hTrayPA, $sgPause) If $bQuiet = 0 Then _SayTxt($sResume) Else _Splash($sResume) Sleep(1500) SplashOff() EndIf Return EndIf Do Sleep(200) Until TrayItemGetState($hTrayPA) Or TrayItemGetState($hTrayEX) EndFunc ;==>_TrayPause Func _TrayExit() If Not $sFini2 Then WriteTTini() If $bQuiet = 0 Then _SayTxt($sBye) Else _Splash($sBye) Sleep(1000) SplashOff() EndIf If $iBabyPID > -1 Then ProcessClose($iBabyPID) Sleep(500) EndIf Exit EndFunc ;==>_TrayExit Func PostfixPairsRead() Local $aFParts[1000][2] $aFParts[0][0] = 0 Local $sValPt = "", $sValSp = "" For $n = 1 To 999 $sValPt = _IniFileRead("sFiniV", "Language", "Range" & $n, "") If $sValPt Then $sValSp = _IniFileRead("sFiniV", "Language", "Phrase" & $n, "") $aFParts[$n][0] = $sValPt $aFParts[$n][1] = $sValSp Else $aFParts[0][0] = $n - 1 ExitLoop EndIf Next Return $aFParts EndFunc ;==>PostfixPairsRead Func PostfixPairsSet() Local $vTime = String(@HOUR & @MIN) Local $sPostfix = "", $aPtt If $aParts[0][0] > 0 Then For $z = 1 To $aParts[0][0] $aPtt = StringSplit($aParts[$z][0], "-") If $vTime >= $aPtt[1] And $vTime <= $aPtt[2] Then ExitLoop Next $sPostfix = $aParts[$z][1] EndIf Return $sPostfix EndFunc ;==>PostfixPairsSet Func WriteTTini() IniWrite($sFini, "TalkTock", "Interval", $iFreq) IniWrite($sFini, "TalkTock", "ClockStyle", $vT12or24) IniWrite($sFini, "TalkTock", "SayAMPM", $bSayAMPM) If $sVoice = "" Then $sVoice = "default" IniWrite($sFini, "TalkTock", "Voice", $sVoice) IniWrite($sFini, "TalkTock", "Volume", $iVol) IniWrite($sFini, "TalkTock", "TalkRate", $iRate) IniWrite($sFini, "TalkTock", "ClockStops", $iStop) IniWrite($sFini, "TalkTock", "ClockTimerUnits", $sUnits) IniWrite($sFini, "TalkTock", "Quiet", $bQuiet) IniWrite($sFini, "TalkTock", "Display", $iDisplay) EndFunc ;==>WriteTTini Func RestartTT() Local $hgRE = GUICreate(@ScriptName, 350, 150, -1, -1, $ES_CENTER) GUISetState(@SW_HIDE, $hgRE) GUICtrlCreateLabel(@ScriptName & " is running. What would you like to do?", 18, 22, 337, 24) Local $hgREStart = GUICtrlCreateButton("Restart", 20, 55, 70, -1, $BS_DEFPUSHBUTTON) Local $hgREQuit = GUICtrlCreateButton("Quit", 105, 55, 70, -1, -1) Local $hgRECancel = GUICtrlCreateButton("Cancel", 190, 55, 70, -1, -1) ;---------- Local $aTTp = ProcessList(@ScriptName) Local $iThis = @AutoItPID GUISetState(@SW_SHOW, $hgRE) While 1 Switch GUIGetMsg($hgRE) Case $hgREStart For $q = 1 To $aTTp[0][0] If $aTTp[$q][1] <> $iThis Then ProcessClose($aTTp[$q][1]) Next GUIDelete($hgRE) ExitLoop Case $hgREQuit For $q = 1 To $aTTp[0][0] If $aTTp[$q][1] <> $iThis Then ProcessClose($aTTp[$q][1]) Next ContinueCase Case $hgRECancel ContinueCase Case $GUI_EVENT_CLOSE Exit EndSwitch WEnd ;---------- EndFunc ;==>ReStartTT Settings file (TalkTock.ini):
      Settings file for TalkTock.exe, Talking Clock ; [TalkTock] ;; Interval between time announcements, in minutes Interval=15 ;; 12- or 24-hour clock ClockStyle=12 ;; Say AM/PM? 1=Yes 0=No; applies to 12-hour clock only SayAMPM=1 ;; TTS voice Voice=default ;Voice=Microsoft George ;; Volume, range 1 to 100 Volume=80 ;; Speaking rate, range -10 to 10 TalkRate=0 ;; Clock stop timer units ;; S=secs M=mins H=hours D=days W=weeks T=months Y=years ClockTimerUnits=H ;; Clock stops after how many timer units? (0 = clock never stops) ClockStops=0 ;; Quiet operation, time shown on screen (1=yes 0=no) Quiet=0 ;; Duration, in seconds, of on-screen time display ;; Fractional (decimal) values are allowed (e.g., Display=3.5) Display=2.5 [Language] ;; Translate the phrases and labels below into your chosen language. ;; Any language with a TTS function (a "Voice") in its language pack ;; should work. To use other languages, edit TalkTock.ini using the ;; UTF-8 character set ; ;; TimeOnly: 1=Yes (phrases set below will NOT be spoken); 0=No TimeOnly=0 ; onStart=Welcome to TalkTock, the Talking Clock Intro=The time will be announced every Freq1=minnit Freq5=5 minutes at the 5-minute mark Freq10=10 minutes at the 10-minute mark Freq15=15 minutes on the quarter hour Freq30=30 minutes on the half hour Freq60='our on the hour FreqCustom=minutes ;; Spoken prefix Prefix=It's ;; No prefix (just announce the time): ;Prefix= ;Prefix=It's ;Prefix=It's now ;Prefix=The time is ;; Singular prefix: Prefix1 defines the singular inflection ;; for "one o'clock" in applicable languages, e.g., Italian ;Prefix1= ; ;; Postfix pairs (optional) ;; ------------------------ ;; Alternatives to saying "AM/PM" (or equivalent) after the time ;; If time falls within Range, TalkTock says ;; Phrase after saying the time ;; You can set as many, or as few, of these pairs as you like ;; Note: Range# settings must have content (a time range hhmm-hhmm) ;; Phrase# settings can be a phrase or empty (say nothing) ;Range1=0000-0000 ;Phrase1=Midnight ;Range2=0001-0329 ;Phrase2=A.M. ;Range3=0330-1159 ;Phrase3=in the morning ;Range4=1200-1200 ;Phrase4=Noon ;Range5=1201-1659 ;Phrase5=in the afternoon ;Range6=1700-1959 ;Phrase6=in the evening ;Range7=2000-2359 ;Phrase7=at night ;; ------------------------ ; ;; Pause/Resume/Stop onPause=TalkTock paused onResume=TalkTock resumed onStop=Goodbye [GUI_Labels] Title=TalkTock - Talking Clock Top=Say the time every Minute=minute Minutes=minutes QuarterHour=quarter hour HalfHour=half hour Hour=hour Hours=hours CustomLabel=Custom ClockStyle=Clock style 12-hour_Label=12-hour 24-hour_Label=24-hour Quiet_label=Time is: Speak_label=spoken Display_label=displayed ClockStop_Label=Clock stops ClockStopsNever_Label= Never ClockStopsAfter_Label= After ClockStopsAfterSecs_Label=secs ClockStopsAfterMins_Label=mins ClockStopsAfterHours_Label=hours ClockStopsAfterDays_Label=days ClockStopsAfterWeeks_Label=weeks ClockStopsAfterMons_Label=months ClockStopsAfterYears_Label=years Volume_Label=Volume ClockStop_Label=Clock stops ClockStopsAfter_Label=After ClockStopsHours_Label=hours ClockStopsNever_Label=Never Start_button=Start Cancel_button=Cancel Tray_pause=Pause Tray_resume=Resume Tray_exit=Stop Enjoy!
    • By mLipok
      This UDF was created for give any/some kind of support for GDPR solutions in AutoIt.
      This is a modest attempt at implementation.
       
      More details in support topic:
       
    • By mLipok
      This UDF was created for give any kind of support for GDPR solutions in AutoIt.
       
      #include "GDPR.au3" #AutoIt3Wrapper_Run_AU3Check=Y #AutoIt3Wrapper_Au3Check_Parameters=-d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6 -w 7 #Tidy_Parameters=/sort_funcs /reel ; #AutoIt3Wrapper_Run_Debug_Mode=Y _Example() Func _Example() _GDPR_Crypter_Wrapper(_Example_Crypter) Local $sText = 'AutoIt v3 is a freeware BASIC-like scripting language designed for automating the Windows GUI and general scripting.' MsgBox(0, @ScriptLineNumber, _GDPR_Anonymize_String($sText)) Local $dCrypted = _GDPR_Crypt_String($sText) MsgBox(0, @ScriptLineNumber, $dCrypted & @CRLF & @error & @CRLF & @extended) Local $sDecrypted = _GDPR_DeCrypt_AsString($dCrypted) MsgBox(0, @ScriptLineNumber, $sDecrypted & @CRLF & @error & @CRLF & @extended) _GDPR_Crypt_File(@ScriptFullPath, @ScriptFullPath & '.CRYPTED') If @error Then ConsoleWrite('! ---> @error=' & @error & ' @extended=' & @extended & ' : _GDPR_Crypt_File' & @CRLF) _GDPR_DeCrypt_File(@ScriptFullPath & '.CRYPTED', @ScriptFullPath & '.DECRYPTED.au3') If @error Then ConsoleWrite('! ---> @error=' & @error & ' @extended=' & @extended & ' : _GDPR_DeCrypt_File' & @CRLF) EndFunc ;==>_Example Func _Example_Crypter($dBinaryData, $bDataAlreadyEncrypted) _Crypt_Startup() ; Start the Crypt library. Local $dResult If $bDataAlreadyEncrypted Then $dResult = _Crypt_DecryptData($dBinaryData, 'securepassword', $CALG_3DES) ; Decrypt the data using the generic password string. The return value is a binary string. Else $dResult = _Crypt_EncryptData($dBinaryData, 'securepassword', $CALG_3DES) ; Encrypt the text with the new cryptographic key. EndIf _Crypt_Shutdown() ; Shutdown the Crypt library. Return $dResult EndFunc ;==>_Example_Crypter  
      Download link:
       
      WIKI:
      This UDF was added here:  https://www.autoitscript.com/wiki/User_Defined_Functions
       
       
    • By mLipok
      This UDF was created to facilitate the saving and reading of email configuration.
      Thanks to @water, @jchd, @Jos for helping in translation of _EmailConfig_GUI_Preset_**()
      Hope to have _EmailConfig_GUI_Preset_ES() version soon.

      If you want to create your national version of _EmailConfig_GUI_Preset_**() please do not hesitate ... contribute.
      _EmailConfig_GUI_Preset_EN() is translated by me and Google Translator (from my national Polish language), so if you have any fix for this please do not hesitate ... contribute.
       
      The EmailConfig_Example_STMP_Mailer.au3   is using modified version of Jos SMTP Mailer UDF
       
      #AutoIt3Wrapper_UseX64=N #AutoIt3Wrapper_Run_AU3Check=Y #AutoIt3Wrapper_Au3Check_Parameters=-d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6 -w 7 #Tidy_Parameters=/sort_funcs /reel #include <Array.au3> #include <AutoItConstants.au3> #include <ButtonConstants.au3> #include <ComboConstants.au3> #include <Crypt.au3> #include <EditConstants.au3> #include <File.au3> #include <GUIConstantsEx.au3> #include <StaticConstants.au3> #include <WindowsConstants.au3> #include "EmailConfig.au3" #include "GDPR.au3" ; https://www.autoitscript.com/forum/files/file/509-gdpr/ Global $oMyRet[2] #Region - EXAMPLE _MY_EXAMPLE__EmailConfig() Func _MY_EXAMPLE__EmailConfig() _GDPR_Crypter_Wrapper(_EmailConfig_ExampleCrypter) _EmailConfig_GUI_Preset_EN() ;~ _EmailConfig_GUI_Preset_DE() ;~ _EmailConfig_GUI_Preset_FR() ;~ _EmailConfig_GUI_Preset_NL() ;~ _EmailConfig_GUI_Preset_PL() _EmailConfig_SaveWrapper(_EmailConfig_SaveToINI) _EmailConfig_LoadWrapper(_EmailConfig_LoadFromINI) _EmailConfig_LoadWrapper() If $IDYES = MsgBox($MB_YESNO + $MB_TOPMOST + $MB_ICONQUESTION + $MB_DEFBUTTON1, 'Question #' & @ScriptLineNumber, _ 'Do you want to set email configuration ?') Then _EmailConfig_ShowGUI() EndIf Local $s_ToAddress = 'whereisyourdestination@your.email.com' Local $s_Subject = 'Testing email sending : ' & @YEAR & @MON & @MDAY & ' ' & @HOUR & @MIN & @SEC Local $s_Body = 'This is only a test' Local $s_Attachments = '' _SMTP_SendEmail_Example($s_ToAddress, $s_Subject, $s_Body, $s_Attachments) EndFunc ;==>_MY_EXAMPLE__EmailConfig Func _EmailConfig_ExampleCrypter($dBinaryData, $bDataAlreadyEncrypted) _Crypt_Startup() ; Start the Crypt library. Local $dResult If $bDataAlreadyEncrypted Then $dResult = _Crypt_DecryptData($dBinaryData, 'securepassword', $CALG_AES_256) ; Decrypt the data using the generic password string. The return value is a binary string. Else $dResult = _Crypt_EncryptData($dBinaryData, 'securepassword', $CALG_AES_256) ; Encrypt the text with the new cryptographic key. EndIf _Crypt_Shutdown() ; Shutdown the Crypt library. Return $dResult EndFunc ;==>_EmailConfig_ExampleCrypter #EndRegion - EXAMPLE ; ; The UDF Func _INetSmtpMailCom($s_SmtpServer, $s_FromName, $s_FromAddress, $s_ToAddress, $s_Subject = "", $as_Body = "", $s_AttachFiles = "", $s_CcAddress = "", $s_BccAddress = "", $s_Importance = "Normal", $s_Username = "", $s_Password = "", $IPPort = 25, $ssl = 0, $tls = 0) Local $oCOM_Error_Handler = ObjEvent("AutoIt.Error", "MyErrFunc") #forceref $oCOM_Error_Handler Local $objEmail = ObjCreate("CDO.Message") $objEmail.From = '"' & $s_FromName & '" <' & $s_FromAddress & '>' $objEmail.To = $s_ToAddress Local $i_Error = 0 #forceref $i_Error Local $i_Error_desciption = "" #forceref $i_Error_desciption If $s_CcAddress <> "" Then $objEmail.Cc = $s_CcAddress If $s_BccAddress <> "" Then $objEmail.Bcc = $s_BccAddress $objEmail.Subject = $s_Subject If StringInStr($as_Body, "<") And StringInStr($as_Body, ">") Then $objEmail.HTMLBody = $as_Body Else $objEmail.Textbody = $as_Body & @CRLF EndIf If $s_AttachFiles <> "" Then Local $S_Files2Attach = StringSplit($s_AttachFiles, ";") For $x = 1 To $S_Files2Attach[0] $S_Files2Attach[$x] = _PathFull($S_Files2Attach[$x]) ;~ ConsoleWrite('@@ Debug : $S_Files2Attach[$x] = ' & $S_Files2Attach[$x] & @LF & '>Error code: ' & @error & @LF) ;### Debug Console If FileExists($S_Files2Attach[$x]) Then ConsoleWrite('+> File attachment added: ' & $S_Files2Attach[$x] & @LF) $objEmail.AddAttachment($S_Files2Attach[$x]) Else ConsoleWrite('!> File not found to attach: ' & $S_Files2Attach[$x] & @LF) SetError(1) Return 0 EndIf Next EndIf $objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2 $objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = $s_SmtpServer If Number($IPPort) = 0 Then $IPPort = 25 $objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = $IPPort ; Authenticated SMTP If $s_Username <> "" Then $objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1 $objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = $s_Username $objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = $s_Password EndIf ; Set security params If $ssl Then $objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = True If $tls Then $objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendtls") = True ; Update settings $objEmail.Configuration.Fields.Update ; Set Email Importance Switch $s_Importance Case "High" $objEmail.Fields.Item("urn:schemas:mailheader:Importance") = "High" Case "Normal" $objEmail.Fields.Item("urn:schemas:mailheader:Importance") = "Normal" Case "Low" $objEmail.Fields.Item("urn:schemas:mailheader:Importance") = "Low" EndSwitch $objEmail.Fields.Update ; Sent the Message $objEmail.Send If @error Then SetError(2) Return $oMyRet[1] EndIf $objEmail = "" EndFunc ;==>_INetSmtpMailCom Func _SMTP_SendEmail_Example($s_ToAddress, $s_Subject, $s_Body, $s_Attachments) #Tidy_ILC_Pos=120 Local $aEMAIL_CONFIG = __EmailConfig__API() Local $SmtpServer = $aEMAIL_CONFIG[$EMAIL_CONFIG__22__SMTP_SERVER_NAME][$EMAIL_CONFIG__COL3_SAVELOAD_VALUE] ; address for the smtp-server to use - REQUIRED Local $FromName = $aEMAIL_CONFIG[$EMAIL_CONFIG__02__COMMON_NAME][$EMAIL_CONFIG__COL3_SAVELOAD_VALUE] ; name from who the email was sent Local $FromAddress = $aEMAIL_CONFIG[$EMAIL_CONFIG__03__EMAIL_ADDRESS][$EMAIL_CONFIG__COL3_SAVELOAD_VALUE] ; address from where the mail should come Local $ToAddress = $s_ToAddress ; destination address of the email - REQUIRED Local $Subject = $s_Subject ; subject from the email - can be anything you want it to be Local $Body = $s_Body ; the messagebody from the mail - can be left blank but then you get a blank mail Local $AttachFiles = $s_Attachments ; the file(s) you want to attach seperated with a ; (Semicolon) - leave blank if not needed Local $CcAddress = "" ; address for cc - leave blank if not needed Local $BccAddress = "" ; address for bcc - leave blank if not needed Local $Importance = "Normal" ; Send message priority: "High", "Normal", "Low" Local $Username = $aEMAIL_CONFIG[$EMAIL_CONFIG__20__SMTP_USER_NAME][$EMAIL_CONFIG__COL3_SAVELOAD_VALUE] ; username for the account used from where the mail gets sent - REQUIRED Local $Password = $aEMAIL_CONFIG[$EMAIL_CONFIG__21__SMTP_PASSWORD][$EMAIL_CONFIG__COL3_SAVELOAD_VALUE] ; password for the account used from where the mail gets sent - REQUIRED Local $IPPort = $aEMAIL_CONFIG[$EMAIL_CONFIG__23__SMTP_PORT_NUMBER][$EMAIL_CONFIG__COL3_SAVELOAD_VALUE] ; port used for sending the mail ; in many country port 25 is not recomended, in such case use 587 instead Local $ssl = 0 ; enables/disables secure socket layer sending - put to 1 if using httpS Local $tls = 0 ; enables/disables TLS when required ;~ Local $IPPort = 465 ; GMAIL port used for sending the mail ;~ Local $ssl = 1 ; GMAIL enables/disables secure socket layer sending - put to 1 if using httpS Local $rc = _INetSmtpMailCom($SmtpServer, $FromName, $FromAddress, $ToAddress, $Subject, $Body, $AttachFiles, $CcAddress, $BccAddress, $Importance, $Username, $Password, $IPPort, $ssl, $tls) If @error Then MsgBox(0, "Error sending email", "Error code: " & @error & @CRLF & "Description: " & $rc) EndIf EndFunc ;==>_SMTP_SendEmail_Example ; ; ; Com Error Handler Func MyErrFunc(ByRef $oMyError) Local $HexNumber = Hex($oMyError.number, 8) $oMyRet[0] = $HexNumber $oMyRet[1] = StringStripWS($oMyError.description, 3) ConsoleWrite("### COM Error ! Number: " & $HexNumber & " ScriptLine: " & $oMyError.scriptline & " Description:" & $oMyRet[1] & @LF) SetError(1) ; something to check for when this function returns Return EndFunc ;==>MyErrFunc  

       
      EmailConfig.au3 EmailConfig_Example_STMP_Mailer.au3
    • By pat4005
      A tiny UDF that can shoot magic packets at your computers to wake them the heck up. All credits to Olish.
      The only parameter it needs to be specified – is your machine's MAC-address (ip address (the second parameter), at which you will be sending magic packet is generating automatically from @IPAddress1 macro)
      Example:
      _WoL_WakeDevice('001CC0CAED7A') ; the second parameter (if necessery) must be a broadcast address of your local network segment (i.e. 192.168.0.255 for a network 192.168.0.0)  
      _WakeOnLan.au3
×
×
  • Create New...