Página 1 de 1

No se me activa ventana agregar nuevo registro

Publicado: 18 Ene 2013, 08:52
por Fosforito
No se me activa ventana agregar nuevo registro
El programa en cuestión tiene tres objetivos :
1) abrir un conjunto de directorios o carpetas a partir de un archivo de texto : txt extension file.
2) Abrir un conjunto de url o buscar en el buscador al uso las cadenas que se proponen como líneas en un archivo de texto (txt)
3) Leer las líneas de texto o párrafos de un archivo txt e ir introduciendo dichas líneas o párrafos en mi base de datos Goldmine.

Los pasos 1 y 2 se han logrado, pero el tercero ha coincidido con una invasión vírica bajo windows 7 y me ha detenido porque tengo que terminar antes otros módulos dispersos.
Bueno, el asunto es que el script que adjunto no me funciona bien.
Tenía un par de módulos en AHK que si me trotaban, aunque con contenidos mucho más limitados e interactivos.
Pudiera deberse a alguna cuestión interna con AutoIt, ya que igualmente la combinación Control+Alt+Win+2 no pude asignarla, y en cambio en AHK no tengo ese problema.

Por alguna razón Goldmine no obedece las teclas que se le mandan con AutoIt. Y si obedece con AHK. En fin a ver si alguien me orienta y observa a qué se debe que no logre añadir el registro al no saltar la ventana de agregar nuevo registro.

El primer módulo no tiene observación alguna. Es sencillo.
El segundo módulo mi intención es para uso intuitivo en campañas de posicionamiento web. Su uso empata con sofisticadas hojas excel con listas múltiples condicionales y con ayuda de VBA para control de eventos.
El tercer módulo tiene como finalidad aliviar de la labor de introducción de registros en mi base de conocimiento. Es un paso hacia la semi automatización.

De esta manera suplía el objetivo de la máquina "léctor" o máquina de lectura de datos en alguno de sus aspectos.

Código: Seleccionar todo

#NoTrayIcon

#Include <Clipboard.au3>
#Include <Crypt.au3>
#Include <Constants.au3>
#Include <Misc.au3>
#Include <StaticConstants.au3>
#Include <String.au3>
#Include <APIConstants.au3>
#Include <WinAPIEx.au3>


;==============================================================================

AutoItSetOption("MustDeclareVars", 1) 
AutoItSetOption("TrayAutoPause", 0)
AutoItSetOption("TrayMenuMode", 1)
AutoItSetOption("WinTitleMatchMode", 1)

OnAutoItExitRegister("DetectarApagado")


Local  $intErrorConfiguracion = 0
Local  $intErrorParametros = 0
Local  $int_ErrorHotKeySet = 0
Local  $int_ErrorModePrevio = 0
Local  $int_ErrorModeAnterior = 0
Local  $int_MensajeActual = 0
Global $ctrlid_OpcionLineToClipCarpetas
Global $ctrlid_OpcionLineToClipURLs
Global $ctrlid_OpcionLineToClipBaseDatos
Global $ctrlid_OpcionConfiguracionBorrarUsuario
Global $ctrlid_OpcionConfiguracionBorrarTeclas
Global $ctrlid_OpcionAyuda
Global $ctrlid_OpcionSalir
Global $str_Archivo = ""
Global $str_GoldMine5Key = BinaryToString(_Crypt_HashData(@ComputerName & @UserName, $CALG_RC4 , True, 0))
Global $str_GoldMine5User = ""
Global $str_GoldMine5Password = ""
Global $str_HotKeyCarpetas = ""
Global $str_HotKeyURLs = ""
Global $str_HotKeyBaseDatos = ""


If _Singleton("LineToClip", 1) = 0 Then Exit -1

TraySetIcon ("LineToClip.ico", 0)
TraySetToolTip("Leer archivos con HotKey")
$ctrlid_OpcionLineToClipCarpetas = TrayCreateItem("Leer archivo de carpetas")
$ctrlid_OpcionLineToClipURLs = TrayCreateItem("Leer archivo de URLs")
$ctrlid_OpcionLineToClipBaseDatos = TrayCreateItem("Leer archivo de registros para base de datos")
TrayCreateItem("")
$ctrlid_OpcionConfiguracionBorrarUsuario = TrayCreateItem("Quitar datos de usuario y contraseña de GoldMine")
$ctrlid_OpcionConfiguracionBorrarTeclas = TrayCreateItem("Restablecer metodos abreviados de teclado")
TrayCreateItem("")
$ctrlid_OpcionAyuda = TrayCreateItem("Ayuda")
TrayCreateItem("")
$ctrlid_OpcionSalir = TrayCreateItem("Cerrar")
TraySetState(1)
TrayItemSetState($ctrlid_OpcionAyuda, $TRAY_DEFAULT)

$int_ErrorModePrevio = _WinAPI_SetErrorMode($SEM_FAILCRITICALERRORS)
$int_ErrorModeAnterior = _WinAPI_SetErrorMode(BitOR($int_ErrorModePrevio, $SEM_FAILCRITICALERRORS))

$intErrorConfiguracion = LeerConfiguracion()
If $intErrorConfiguracion <> 0 Then
    $int_ErrorModeAnterior = _WinAPI_SetErrorMode($int_ErrorModePrevio)
    Exit
EndIf

$int_ErrorHotKeySet = HotKeySet($str_HotKeyCarpetas, "LineToClipCarpetas_HotKey")
If $int_ErrorHotKeySet <> 1 Then
    MsgBox(16, "LineToClip - Error", "No ha sido posible registrar el método abreviado de teclado para leer un archivo de carpetas. El método abreviado ya está siendo utilizado por otro programa.", 300)
EndIf
$int_ErrorHotKeySet = HotKeySet($str_HotKeyURLs, "LineToClipURLs_HotKey")
If $int_ErrorHotKeySet <> 1 Then
    MsgBox(16, "LineToClip - Error", "No ha sido posible registrar el método abreviado de teclado para leer un archivo de direcciones URL. El método abreviado ya está siendo utilizado por otro programa.", 300)
EndIf
$int_ErrorHotKeySet = HotKeySet($str_HotKeyBaseDatos, "LineToClipBaseDatos_HotKey")
If $int_ErrorHotKeySet <> 1 Then
    MsgBox(16, "LineToClip - Error", "No ha sido posible registrar el método abreviado de teclado para leer un archivo de registros para bases de datos. El método abreviado ya está siendo utilizado por otro programa.", 300)
EndIf

While 1
    TrayItemSetState($ctrlid_OpcionLineToClipCarpetas, $TRAY_UNCHECKED)
    TrayItemSetState($ctrlid_OpcionLineToClipURLs, $TRAY_UNCHECKED)
    TrayItemSetState($ctrlid_OpcionLineToClipBaseDatos, $TRAY_UNCHECKED)
    TrayItemSetState($ctrlid_OpcionAyuda, $TRAY_UNCHECKED)
    TrayItemSetState($ctrlid_OpcionSalir, $TRAY_UNCHECKED)

    $int_MensajeActual = TrayGetMsg()
    Select
    Case $int_MensajeActual = 0
        ContinueLoop
    Case $int_MensajeActual = $ctrlid_OpcionLineToClipCarpetas
        TraySetClick(0)
        LineToClipCarpetas_HotKey()
        TraySetClick(8)
    Case $int_MensajeActual = $ctrlid_OpcionLineToClipURLs
        TraySetClick(0)
        LineToClipURLs_HotKey()
        TraySetClick(8)
    Case $int_MensajeActual = $ctrlid_OpcionLineToClipBaseDatos
        TraySetClick(0)
        LineToClipBaseDatos_HotKey()
        TraySetClick(8)
    Case $int_MensajeActual = $ctrlid_OpcionConfiguracionBorrarUsuario
        TraySetClick(0)
        BorrarConfiguracion_Usuario()
        TrayItemSetState($ctrlid_OpcionConfiguracionBorrarUsuario, $TRAY_CHECKED + $TRAY_DISABLE)
        TraySetClick(8)
    Case $int_MensajeActual = $ctrlid_OpcionConfiguracionBorrarTeclas
        TraySetClick(0)
        BorrarConfiguracion_Teclas()
        TrayItemSetState($ctrlid_OpcionConfiguracionBorrarTeclas, $TRAY_CHECKED + $TRAY_DISABLE)
        TraySetClick(8)
    Case $int_MensajeActual = $ctrlid_OpcionAyuda
        TraySetClick(0)
        MsgBox(64, "LineToClip - Ayuda (Versión de prueba 16/01/13)", "Pulse Ctrl+Alt+C, Ctrl+Alt+U o Ctrl+Alt+R para leer y procesar un archivo de carpetas, URLs o registros para base de datos respectivamente.", 300)
        TraySetClick(8)
    Case $int_MensajeActual = $ctrlid_OpcionSalir
        TraySetState(2)
        ExitLoop
    EndSelect
WEnd

$int_ErrorModeAnterior = _WinAPI_SetErrorMode($int_ErrorModePrevio)

Exit


;===============================================================================

Func LineToClipCarpetas_HotKey()
    Local $handle_ArchivoCarpetas
    Local $int_ArchivoCarpetas_LineaActual = 0
    Local $int_ErrorFileClose = 0
    Local $int_ResultadoMsgBox = 0
    Local $str_Linea = ""
    
    
    TraySetClick(0)
    TraySetState(4)

    $intErrorParametros = LeerParametros()
    If $intErrorParametros <> 0 Then
        $str_Archivo = ""
        TraySetClick(8)
        TraySetState(8)
        Return
    EndIf

    $handle_ArchivoCarpetas = FileOpen($str_Archivo, 0)
    If $handle_ArchivoCarpetas = -1 Then
        MsgBox(16, "LineToClip - Error", "El archivo " & $str_Archivo & " no ha podido ser abierto. Compruebe que el archivo cuyo nombre ha introducido existe y tiene permisos para leerlo.", 300)
        FileClose($handle_ArchivoCarpetas)
        $str_Archivo = ""
        TraySetClick(8)
        TraySetState(8)
        Return
    EndIf

    While 1
        $int_ArchivoCarpetas_LineaActual = $int_ArchivoCarpetas_LineaActual + 1
        $str_Linea = FileReadLine($handle_ArchivoCarpetas, $int_ArchivoCarpetas_LineaActual)
        Switch @error
        Case 1
            MsgBox(16, "LineToClip - Error", "Se ha producido un error al leer al leer la linea " & $int_ArchivoCarpetas_LineaActual & " del archivo " & $str_Archivo & ".", 300)
            FileClose($handle_ArchivoCarpetas)
            $str_Archivo = ""
            TraySetClick(8)
            TraySetState(8)
            Return
        Case -1
            ExitLoop
        EndSwitch
        
        If FileExists($str_Linea) = 1 Then
            ShellExecute($str_Linea)
            _ClipBoard_SetData($str_Linea, $CF_OEMTEXT)
        Else
            $int_ResultadoMsgBox = MsgBox(566, "LineToClip", "La linea " & $int_ArchivoCarpetas_LineaActual & " del archivo " & $str_Archivo & " no contiene una ruta completa válida de una carpeta. ¿Desea continuar leyendo lineas de este archivo?", 300)
            Select
            Case $int_ResultadoMsgBox = 2
                FileClose($handle_ArchivoCarpetas)
                $str_Archivo = ""
                TraySetClick(8)
                TraySetState(8)
                Return
            Case $int_ResultadoMsgBox = 10
                $int_ArchivoCarpetas_LineaActual = $int_ArchivoCarpetas_LineaActual - 1
                ContinueLoop
            Case $int_ResultadoMsgBox = 11
                ContinueLoop
            Case Else
                MsgBox(16, "LineToClip - Error", "La función 'MsgBox' de AutoIt ha indicado un valor de retorno inesperado.", 300)
                FileClose($handle_ArchivoCarpetas)
                $str_Archivo = ""
                TraySetClick(8)
                TraySetState(8)
                Return
            EndSelect
        EndIf
    Wend

    $int_ErrorFileClose = FileClose($handle_ArchivoCarpetas)
    If $int_ErrorFileClose <> 1 Then
        MsgBox(16, "LineToClip - Error", "El archivo " & $str_Archivo & " no ha podido ser cerrado. Compruebe que el archivo cuyo nombre ha introducido existe y tiene permisos para leerlo.", 300)
        $str_Archivo = ""
        TraySetClick(8)
        TraySetState(8)
        Return
    EndIf

    $str_Archivo = ""
    TraySetClick(8)
    TraySetState(8)
    Return

EndFunc


;===============================================================================

Func LineToClipURLs_HotKey()
    Local $handle_ArchivoURLs
    Local $int_ArchivoURLs_LineaActual = 0
    Local $int_ErrorFileClose = 0
    Local $int_ResultadoMsgBox = 0
    Local $str_Linea = ""


    TraySetClick(0)
    TraySetState(4)

    $intErrorParametros = LeerParametros()
    If $intErrorParametros <> 0 Then
        $str_Archivo = ""
        TraySetClick(8)
        TraySetState(8)
        Return
    EndIf

    $handle_ArchivoURLs = FileOpen($str_Archivo, 0)
    If $handle_ArchivoURLs = -1 Then
        MsgBox(16, "LineToClip - Error", "El archivo " & $str_Archivo & " no ha podido ser abierto. Compruebe que el archivo cuyo nombre ha introducido existe y tiene permisos para leerlo.", 300)
        FileClose($handle_ArchivoURLs)
        $str_Archivo = ""
        TraySetClick(8)
        TraySetState(8)
        Return
    EndIf

    While 1
        $int_ArchivoURLs_LineaActual = $int_ArchivoURLs_LineaActual + 1
        $str_Linea = FileReadLine($handle_ArchivoURLs)
        Switch @error
        Case 1
            MsgBox(16, "LineToClip - Error", "Se ha producido un error al leer al leer la linea " & $int_ArchivoURLs_LineaActual & " del archivo " & $str_Archivo & ".", 300)
            FileClose($handle_ArchivoURLs)
            $str_Archivo = ""
            TraySetClick(8)
            TraySetState(8)
            Return
        Case -1
            ExitLoop
        EndSwitch
        
        If StringLeft ($str_Linea, 7) = "file://" Or StringLeft ($str_Linea, 6) = "ftp://" Or StringLeft ($str_Linea, 9) = "mailto://" Or StringLeft ($str_Linea, 7) = "http://" Or StringLeft ($str_Linea, 8) = "https://" Or StringLeft ($str_Linea, 4) = "www." Then
            ShellExecute($str_Linea)
            _ClipBoard_SetData($str_Linea, $CF_OEMTEXT)
			Sleep(4000)

        ElseIf StringLeft ($str_Linea, 1) = "*" Then
            $str_Linea = StringTrimLeft ($str_Linea, 1)
            $str_Linea = StringReplace ($str_Linea, " ", "%20")
            ShellExecute("http://www.google.com/search?q=" & $str_Linea)
            _ClipBoard_SetData("http://www.google.com/search?q=" & $str_Linea, $CF_OEMTEXT)
			Sleep(4000)

        Else
            $int_ResultadoMsgBox = MsgBox(566, "LineToClip", "La linea " & $int_ArchivoURLs_LineaActual & " del archivo " & $str_Archivo & " no contiene una URL válida. ¿Desea continuar leyendo lineas de este archivo?", 300)
            Select
            Case $int_ResultadoMsgBox = 2
                FileClose($handle_ArchivoURLs)
                $str_Archivo = ""
                TraySetClick(8)
                TraySetState(8)
                Return
            Case $int_ResultadoMsgBox = 10
                $int_ArchivoURLS_LineaActual = $int_ArchivoURLS_LineaActual - 1
                ContinueLoop
            Case $int_ResultadoMsgBox = 11
                ContinueLoop
            Case Else
                MsgBox(16, "LineToClip - Error", "La función 'MsgBox' de AutoIt ha indicado un valor de retorno inesperado.", 300)
                FileClose($handle_ArchivoURLs)
                $str_Archivo = ""
                TraySetClick(8)
                TraySetState(8)
                Return
            EndSelect
        EndIf
    Wend

    $int_ErrorFileClose = FileClose($handle_ArchivoURLs)
    If $int_ErrorFileClose <> 1 Then
        MsgBox(16, "LineToClip - Error", "El archivo " & $str_Archivo & " no ha podido ser cerrado. Compruebe que el archivo cuyo nombre ha introducido existe y tiene permisos para leerlo.", 300)
        FileClose($handle_ArchivoURLs)
        $str_Archivo = ""
        TraySetClick(8)
        TraySetState(8)
        Return
    EndIf

    $str_Archivo = ""
    TraySetClick(8)
    TraySetState(8)
    Return

EndFunc


;===============================================================================

Func LineToClipBaseDatos_HotKey()
    Local $handle_ArchivoRegistrosBaseDatos
    Local $handle_VentanaGoldMinePrincipal
    Local $handle_VentanaGoldMineBloqueoRegistroMultiusuario
	Local $handle_VentanaGoldMineNuevoRegistro
    Local $handle_VentanaGoldMineRegistroDuplicado
    Local $bool_ArchivoFinalAlcanzado = False
    Local $int_ArchivoRegistrosBaseDatos_LineaActual = 0
    Local $int_ErrorFileClose = 0
    Local $int_PIDGoldMine = 0
    Local $int_ResultadoMsgBox = 0
    Local $int_ResultadoWinClose = 0
    Local $int_ResultadoWinWaitClose
    Local $str_Linea = ""
    Local $str_LineaSiguiente = ""
    Local $str_Registro = ""


    TraySetClick(0)
    TraySetState(4)

    $intErrorParametros = LeerParametros()
    If $intErrorParametros <> 0 Then
        $str_Archivo = ""
        TraySetClick(8)
        TraySetState(8)
        Return
    EndIf

    $handle_ArchivoRegistrosBaseDatos = FileOpen($str_Archivo, 0)
    If $handle_ArchivoRegistrosBaseDatos = -1 Then
        MsgBox(16, "LineToClip - Error", "El archivo " & $str_Archivo & " no ha podido ser abierto. Compruebe que el archivo cuyo nombre ha introducido existe y tiene permisos para leerlo.", 300)
        FileClose($handle_ArchivoRegistrosBaseDatos)
        $str_Archivo = ""
        TraySetClick(8)
        TraySetState(8)
        Return
    EndIf

    While 1
        $int_ArchivoRegistrosBaseDatos_LineaActual = $int_ArchivoRegistrosBaseDatos_LineaActual + 1
        $str_Linea = FileReadLine($handle_ArchivoRegistrosBaseDatos, $int_ArchivoRegistrosBaseDatos_LineaActual)
        Switch @error
        Case 1
            MsgBox(16, "LineToClip - Error", "Se ha producido un error al leer al leer la linea " & $int_ArchivoRegistrosBaseDatos_LineaActual & " del archivo " & $str_Archivo & ".", 300)
            FileClose($handle_ArchivoRegistrosBaseDatos)
            $str_Archivo = ""
            TraySetClick(8)
            TraySetState(8)
            Return
        Case -1
            ExitLoop
        EndSwitch
        
        If FileExists($str_Linea) = 1 Then
            _ClipBoard_SetData($str_Linea, $CF_OEMTEXT)

            If ProcessExists("gmw5.exe") = 0 Then
                $str_GoldMine5User = _StringEncrypt(0, $str_GoldMine5User, $str_GoldMine5Key, 1)
                If $str_GoldMine5User == "" Or @error = 1 Then
                    MsgBox(16, "LineToClip - Error", "Se ha producido un error al procesar los datos de nombre de usuario o contraseña para ejecutar GoldMine.", 300)
                    FileClose($handle_ArchivoRegistrosBaseDatos)
                    $str_Archivo = ""
                    TraySetClick(8)
                    TraySetState(8)
                    Exit
                EndIf				
                $str_GoldMine5Password = _StringEncrypt(0, $str_GoldMine5Password, $str_GoldMine5Key, 1)
                If $str_GoldMine5Password == "" Or @error = 1 Then
                    MsgBox(16, "LineToClip - Error", "Se ha producido un error al procesar los datos de nombre de usuario o contraseña para ejecutar GoldMine.", 300)
                    FileClose($handle_ArchivoRegistrosBaseDatos)
                    $str_Archivo = ""
                    TraySetClick(8)
                    TraySetState(8)
                    Exit
                EndIf				
                $int_PIDGoldMine = Run('"Y:\GoldminePrg\gmw5.exe" /i:esm /u:' & $str_GoldMine5User & ' /p:' & $str_GoldMine5Password, '"Y:\GoldminePrg"', @SW_MAXIMIZE , 0)
                If $int_PIDGoldMine <> 0 Then
                    Sleep (5000)
                Else
                    MsgBox(16, "LineToClip - Error", "Se ha producido un error al intentar ejecutar GoldMine. Ejecute GoldMine manualmente antes de iniciar la lectura de un archivo.", 300)
                    FileClose($handle_ArchivoRegistrosBaseDatos)
                    $str_Archivo = ""
                    TraySetClick(8)
                    TraySetState(8)
                    Exit
                EndIf
                $str_GoldMine5User = _StringEncrypt(1, $str_GoldMine5User, $str_GoldMine5Key, 1)
                If $str_GoldMine5User == "" Or @error = 1 Then
                    MsgBox(16, "LineToClip - Error", "Se ha producido un error al procesar los datos de nombre de usuario o contraseña para ejecutar GoldMine.", 300)
                    FileClose($handle_ArchivoRegistrosBaseDatos)
                    $str_Archivo = ""
                    TraySetClick(8)
                    TraySetState(8)
                    Exit
                EndIf	

Re: No se me activa ventana agregar nuevo registro

Publicado: 18 Ene 2013, 08:53
por Fosforito

Código: Seleccionar todo

$str_GoldMine5Password = _StringEncrypt(1, $str_GoldMine5Password, $str_GoldMine5Key, 1)
                If $str_GoldMine5Password == "" Or @error = 1 Then
                    MsgBox(16, "LineToClip - Error", "Se ha producido un error al procesar los datos de nombre de usuario o contraseña para ejecutar GoldMine.", 300)
                    FileClose($handle_ArchivoRegistrosBaseDatos)
                    $str_Archivo = ""
                    TraySetClick(8)
                    TraySetState(8)
                    Exit
                EndIf				
            EndIf
            $handle_VentanaGoldMinePrincipal = WinActivate("GoldMine 5.5")
            If $handle_VentanaGoldMinePrincipal = 0 Then
                MsgBox(16, "LineToClip - Error", "Se ha producido un error al intentar activar la ventana principal de GoldMine. Puede que el programa no esté ejecutándose o esté tardando demasiado en comenzar a ejecutarse.", 300)
                FileClose($handle_ArchivoRegistrosBaseDatos)
                $str_Archivo = ""
                TraySetClick(8)
                TraySetState(8)
                Return
            EndIf
            ; Esto es lo equivalente a "Ctrl+S"
            Send("!h", 0)
            Send("{ASC 110}", 0)
			Sleep(2000)
            If WinExists("Agregar nuevo registro") = 1 Then
                $handle_VentanaGoldMineNuevoRegistro = WinActivate("Agregar nuevo registro")
                If $handle_VentanaGoldMineNuevoRegistro = 0 Then
                    MsgBox(16, "LineToClip - Error", "Se ha producido un error al intentar activar la ventana de nuevo registro de GoldMine. Puede que el programa no esté ejecutándose o esté tardando demasiado en responder.", 300)
                    FileClose($handle_ArchivoRegistrosBaseDatos)
                    $str_Archivo = ""
                    TraySetClick(8)
                    TraySetState(8)
                    Return
                EndIf
			Else
                MsgBox(16, "LineToClip - Error", "No se ha encontrado la ventana de nuevo registro de GoldMine. Puede que el programa no esté ejecutándose o esté tardando demasiado en responder.", 300)
                FileClose($handle_ArchivoRegistrosBaseDatos)
                $str_Archivo = ""
                TraySetClick(8)
                TraySetState(8)
                Return
            EndIf
            Send("^v", 0)
            Send("{TAB}", 0)
            Send("^v", 0)
            Send("{ENTER}", 0)
			Sleep(2000)
            If WinExists("GoldMine", "Ya hay un registro") = 1 Then
                $handle_VentanaGoldMineRegistroDuplicado = WinActivate("GoldMine", "Ya hay un registro")
                If $handle_VentanaGoldMineRegistroDuplicado = 0 Then
                    MsgBox(16, "LineToClip - Error", "Se ha producido un error al intentar activar la ventana de registro duplicado de GoldMine. Puede que el programa no esté ejecutándose o esté tardando demasiado en responder.", 300)
                    FileClose($handle_ArchivoRegistrosBaseDatos)
                    $str_Archivo = ""
                    TraySetClick(8)
                    TraySetState(8)
                    Return
                EndIf
                $int_ResultadoWinWaitClose = WinWaitClose("GoldMine", "Ya hay un registro", 0)
                If $int_ResultadoWinWaitClose <> 1 Then
                    MsgBox(16, "LineToClip - Error", "Se ha obtenido una respuesta inesperada al esperar al cierre de la ventana de registro duplicado de GoldMine. Puede que el programa no esté ejecutándose o esté tardando demasiado en responder.", 300)
                    FileClose($handle_ArchivoRegistrosBaseDatos)
                    $str_Archivo = ""
                    TraySetClick(8)
                    TraySetState(8)
                    Return
                EndIf
            EndIf
			Sleep(2000)
            If WinExists("Agregar nuevo registro") = 1 Then
                $handle_VentanaGoldMineNuevoRegistro = WinActivate("Agregar nuevo registro")
                If $handle_VentanaGoldMineNuevoRegistro = 0 Then
                    MsgBox(16, "LineToClip - Error", "Se ha producido un error al intentar activar la ventana de nuevo registro de GoldMine. Puede que el programa no esté ejecutándose o esté tardando demasiado en responder.", 300)
                    FileClose($handle_ArchivoRegistrosBaseDatos)
                    $str_Archivo = ""
                    TraySetClick(8)
                    TraySetState(8)
                    Return
                EndIf
				Send("{ESC}", 0)
			Else
				Send("!c", 0)
				Send("{ASC 105}", 0)
				Send("^i", 0)
				Send("{TAB}", 0)
				Send("^v", 0)
				Send("{TAB}", 0)
				Send("{TAB}", 0)
				Send("{TAB}", 0)
				Send("{TAB}", 0)
				Sleep (2000)
				If WinExists("Bloqueo de registro multiusuario") = 1 Then
					$handle_VentanaGoldMineBloqueoRegistroMultiusuario = WinActivate("Bloqueo de registro multiusuario")
					If $handle_VentanaGoldMineBloqueoRegistroMultiusuario = 0 Then
						MsgBox(16, "LineToClip - Error", "Se ha producido un error al intentar activar la ventana de bloqueo de registro multiusuario de GoldMine. Puede que el programa no esté ejecutándose o esté tardando demasiado en responder.", 300)
						FileClose($handle_ArchivoRegistrosBaseDatos)
						$str_Archivo = ""
						TraySetClick(8)
						TraySetState(8)
						Return
					EndIf
					$int_ResultadoWinClose = WinClose("Bloqueo de registro multiusuario")
					If $int_ResultadoWinClose = 0 Then
						MsgBox(16, "LineToClip - Error", "Se ha producido un error al intentar cerrar la ventana de bloqueo de registro multiusuario de GoldMine. Puede que el programa no esté ejecutándose o la ventana ya haya sido cerrada.", 300)
					EndIf
				EndIf
				Send("{ESC}", 0)
			EndIf

            Sleep (1000)			
        ElseIf StringLeft ($str_Linea, 7) = "file://" Or StringLeft ($str_Linea, 6) = "ftp://" Or StringLeft ($str_Linea, 9) = "mailto://" Or StringLeft ($str_Linea, 7) = "http://" Or StringLeft ($str_Linea, 8) = "https://" Or StringLeft ($str_Linea, 4) = "www." Then
            _ClipBoard_SetData($str_Linea, $CF_OEMTEXT)
            
            If ProcessExists("gmw5.exe") = 0 Then
                $str_GoldMine5User = _StringEncrypt(0, $str_GoldMine5User, $str_GoldMine5Key, 1)
                If $str_GoldMine5User == "" Or @error = 1 Then
                    MsgBox(16, "LineToClip - Error", "Se ha producido un error al descifrar los datos de nombre de usuario para ejecutar GoldMine.", 300)
                    FileClose($handle_ArchivoRegistrosBaseDatos)
                    $str_Archivo = ""
                    TraySetClick(8)
                    TraySetState(8)
                    Exit
                EndIf				
                $str_GoldMine5Password = _StringEncrypt(0, $str_GoldMine5Password, $str_GoldMine5Key, 1)
                If $str_GoldMine5Password == "" Or @error = 1 Then
                    MsgBox(16, "LineToClip - Error", "Se ha producido un error al descifrar los datos de contraseña para ejecutar GoldMine.", 300)
                    FileClose($handle_ArchivoRegistrosBaseDatos)
                    $str_Archivo = ""
                    TraySetClick(8)
                    TraySetState(8)
                    Exit
                EndIf				
                $int_PIDGoldMine = Run('"Y:\GoldminePrg\gmw5.exe" /i:esm /u:' & $str_GoldMine5User & ' /p:' & $str_GoldMine5Password, '"Y:\GoldminePrg"', @SW_MAXIMIZE , 0)
                If $int_PIDGoldMine <> 0 Then
                    Sleep (5000)
                Else
                    MsgBox(16, "LineToClip - Error", "Se ha producido un error al intentar ejecutar GoldMine. Ejecute GoldMine manualmente antes de iniciar la lectura de un archivo.", 300)
                    FileClose($handle_ArchivoRegistrosBaseDatos)
                    $str_Archivo = ""
                    TraySetClick(8)
                    TraySetState(8)
                    Exit
                EndIf
                $str_GoldMine5User = _StringEncrypt(1, $str_GoldMine5User, $str_GoldMine5Key, 1)
                If $str_GoldMine5User == "" Or @error = 1 Then
                    MsgBox(16, "LineToClip - Error", "Se ha producido un error al cifrar los datos de nombre de usuario para ejecutar GoldMine.", 300)
                    FileClose($handle_ArchivoRegistrosBaseDatos)
                    $str_Archivo = ""
                    TraySetClick(8)
                    TraySetState(8)
                    Exit
                EndIf				
                $str_GoldMine5Password = _StringEncrypt(1, $str_GoldMine5Password, $str_GoldMine5Key, 1)
                If $str_GoldMine5Password == "" Or @error = 1 Then
                    MsgBox(16, "LineToClip - Error", "Se ha producido un error al cifrar los datos de contraseña para ejecutar GoldMine.", 300)
                    FileClose($handle_ArchivoRegistrosBaseDatos)
                    $str_Archivo = ""
                    TraySetClick(8)
                    TraySetState(8)
                    Exit
                EndIf				
            EndIf
            $handle_VentanaGoldMinePrincipal = WinActivate("GoldMine 5.5")
            If $handle_VentanaGoldMinePrincipal = 0 Then
                MsgBox(16, "LineToClip - Error", "Se ha producido un error al intentar activar la ventana principal de GoldMine. Puede que el programa no esté ejecutándose o esté tardando demasiado en comenzar a ejecutarse.", 300)
                FileClose($handle_ArchivoRegistrosBaseDatos)
                $str_Archivo = ""
                TraySetClick(8)
                TraySetState(8)
                Return
            EndIf
            ; Esto es lo equivalente a "Ctrl+Q"
            Send("!h", 0)
            Send("{ASC 110}", 0)
			Sleep(2000)
            If WinExists("Agregar nuevo registro") = 1 Then
                $handle_VentanaGoldMineNuevoRegistro = WinActivate("Agregar nuevo registro")
                If $handle_VentanaGoldMineNuevoRegistro = 0 Then
                    MsgBox(16, "LineToClip - Error", "Se ha producido un error al intentar activar la ventana de nuevo registro de GoldMine. Puede que el programa no esté ejecutándose o esté tardando demasiado en responder.", 300)
                    FileClose($handle_ArchivoRegistrosBaseDatos)
                    $str_Archivo = ""
                    TraySetClick(8)
                    TraySetState(8)
                    Return
                EndIf
			Else
                MsgBox(16, "LineToClip - Error", "No se ha encontrado la ventana de nuevo registro de GoldMine. Puede que el programa no esté ejecutándose o esté tardando demasiado en responder.", 300)
                FileClose($handle_ArchivoRegistrosBaseDatos)
                $str_Archivo = ""
                TraySetClick(8)
                TraySetState(8)
                Return
            EndIf
            Send("^v", 0)
            Send("{TAB}", 0)
            Send("^v", 0)
            Send("{TAB}", 0)
            Send("{TAB}", 0)
            Send("{TAB}", 0)
            Send("{TAB}", 0)
            Send("{TAB}", 0)
            Send("^v", 0)
            Send("{ENTER}", 0)
			Sleep(2000)
            If WinExists("GoldMine", "Ya hay un registro") = 1 Then
                $handle_VentanaGoldMineRegistroDuplicado = WinActivate("GoldMine", "Ya hay un registro")
                If $handle_VentanaGoldMineRegistroDuplicado = 0 Then
                    MsgBox(16, "LineToClip - Error", "Se ha producido un error al intentar activar la ventana de registro duplicado de GoldMine. Puede que el programa no esté ejecutándose o esté tardando demasiado en responder.", 300)
                    FileClose($handle_ArchivoRegistrosBaseDatos)
                    $str_Archivo = ""
                    TraySetClick(8)
                    TraySetState(8)
                    Return
                EndIf
                $int_ResultadoWinWaitClose = WinWaitClose("GoldMine", "Ya hay un registro", 0)
                If $int_ResultadoWinWaitClose <> 1 Then
                    MsgBox(16, "LineToClip - Error", "Se ha obtenido una respuesta inesperada al esperar al cierre de la ventana de registro duplicado de GoldMine. Puede que el programa no esté ejecutándose o esté tardando demasiado en responder.", 300)
                    FileClose($handle_ArchivoRegistrosBaseDatos)
                    $str_Archivo = ""
                    TraySetClick(8)
                    TraySetState(8)
                    Return
                EndIf
            EndIf
			Sleep(2000)
            If WinExists("Agregar nuevo registro") = 1 Then
                $handle_VentanaGoldMineNuevoRegistro = WinActivate("Agregar nuevo registro")
                If $handle_VentanaGoldMineNuevoRegistro = 0 Then
                    MsgBox(16, "LineToClip - Error", "Se ha producido un error al intentar activar la ventana de nuevo registro de GoldMine. Puede que el programa no esté ejecutándose o esté tardando demasiado en responder.", 300)
                    FileClose($handle_ArchivoRegistrosBaseDatos)
                    $str_Archivo = ""
                    TraySetClick(8)
                    TraySetState(8)
                    Return
                EndIf
				Send("{ESC}", 0)
			EndIf
			Send("{ESC}", 0)

            Sleep (1000)
        ElseIf StringLeft ($str_Linea, 1) = "*" Then
            $str_Registro = StringTrimLeft ($str_Linea, 1)

            $str_LineaSiguiente = FileReadLine($handle_ArchivoRegistrosBaseDatos, ($int_ArchivoRegistrosBaseDatos_LineaActual + 1))
            Switch @error
            Case 1
                MsgBox(16, "LineToClip - Error", "Se ha producido un error al leer al leer la linea " & ($int_ArchivoRegistrosBaseDatos_LineaActual + 1) & " del archivo " & $str_Archivo & ".", 300)
                FileClose($handle_ArchivoRegistrosBaseDatos)
                $str_Archivo = ""
                TraySetClick(8)
                TraySetState(8)
                Return
            Case -1
                $bool_ArchivoFinalAlcanzado = True
            EndSwitch

            While FileExists($str_LineaSiguiente) <> 1 And StringLeft ($str_LineaSiguiente, 7) <> "file://" And StringLeft ($str_LineaSiguiente, 6) <> "ftp://" And StringLeft ($str_LineaSiguiente, 9) <> "mailto://" And StringLeft ($str_LineaSiguiente, 7) <> "http://" And StringLeft ($str_LineaSiguiente, 8) <> "https://" And StringLeft ($str_LineaSiguiente, 4) <> "www." And StringLeft ($str_LineaSiguiente, 1) <> "*" And $bool_ArchivoFinalAlcanzado <> True
                $int_ArchivoRegistrosBaseDatos_LineaActual = $int_ArchivoRegistrosBaseDatos_LineaActual + 1
                $str_Linea = FileReadLine($handle_ArchivoRegistrosBaseDatos, $int_ArchivoRegistrosBaseDatos_LineaActual)
                Switch @error
                Case 1
                    MsgBox(16, "LineToClip - Error", "Se ha producido un error al leer al leer la linea " & $int_ArchivoRegistrosBaseDatos_LineaActual & " del archivo " & $str_Archivo & ".", 300)
                    FileClose($handle_ArchivoRegistrosBaseDatos)
                    $str_Archivo = ""
                    TraySetClick(8)
                    TraySetState(8)
                    Return
                Case -1
                    ExitLoop
                EndSwitch

                $str_Registro = $str_Registro & @CRLF & $str_Linea
                
                $str_LineaSiguiente = FileReadLine($handle_ArchivoRegistrosBaseDatos, ($int_ArchivoRegistrosBaseDatos_LineaActual + 1))
                Switch @error
                Case 1
                    MsgBox(16, "LineToClip - Error", "Se ha producido un error al leer al leer la linea " & ($int_ArchivoRegistrosBaseDatos_LineaActual + 1) & " del archivo " & $str_Archivo & ".", 300)
                    FileClose($handle_ArchivoRegistrosBaseDatos)
                    $str_Archivo = ""
                    TraySetClick(8)
                    TraySetState(8)
                    Return
                Case -1
                    $bool_ArchivoFinalAlcanzado = True
                EndSwitch
            WEnd

            _ClipBoard_SetData($str_Registro, $CF_OEMTEXT)			

            If ProcessExists("gmw5.exe") = 0 Then
                $str_GoldMine5User = _StringEncrypt(0, $str_GoldMine5User, $str_GoldMine5Key, 1)
                If $str_GoldMine5User == "" Or @error = 1 Then
                    MsgBox(16, "LineToClip - Error", "Se ha producido un error al procesar los datos de nombre de usuario o contraseña para ejecutar GoldMine.", 300)
                    FileClose($handle_ArchivoRegistrosBaseDatos)
                    $str_Archivo = ""
                    TraySetClick(8)
                    TraySetState(8)
                    Exit
                EndIf				
                $str_GoldMine5Password = _StringEncrypt(0, $str_GoldMine5Password, $str_GoldMine5Key, 1)
                If $str_GoldMine5Password == "" Or @error = 1 Then
                    MsgBox(16, "LineToClip - Error", "Se ha producido un error al procesar los datos de nombre de usuario o contraseña para ejecutar GoldMine.", 300)
                    FileClose($handle_ArchivoRegistrosBaseDatos)
                    $str_Archivo = ""
                    TraySetClick(8)
                    TraySetState(8)
                    Exit
                EndIf				
                $int_PIDGoldMine = Run('"Y:\GoldminePrg\gmw5.exe" /i:esm /u:' & $str_GoldMine5User & ' /p:' & $str_GoldMine5Password, '"Y:\GoldminePrg"', @SW_MAXIMIZE , 0)
                If $int_PIDGoldMine <> 0 Then
                    Sleep (5000)
                Else
                    MsgBox(16, "LineToClip - Error", "Se ha producido un error al intentar ejecutar GoldMine. Ejecute GoldMine manualmente antes de iniciar la lectura de un archivo.", 300)
                    FileClose($handle_ArchivoRegistrosBaseDatos)
                    $str_Archivo = ""
                    TraySetClick(8)
                    TraySetState(8)
                    Exit
                EndIf
                $str_GoldMine5User = _StringEncrypt(1, $str_GoldMine5User, $str_GoldMine5Key, 1)
                If $str_GoldMine5User == "" Or @error = 1 Then
                    MsgBox(16, "LineToClip - Error", "Se ha producido un error al procesar los datos de nombre de usuario o contraseña para ejecutar GoldMine.", 300)
                    FileClose($handle_ArchivoRegistrosBaseDatos)
                    $str_Archivo = ""
                    TraySetClick(8)
                    TraySetState(8)
                    Exit
                EndIf				
                $str_GoldMine5Password = _StringEncrypt(1, $str_GoldMine5Password, $str_GoldMine5Key, 1)
                If $str_GoldMine5Password == "" Or @error = 1 Then
                    MsgBox(16, "LineToClip - Error", "Se ha producido un error al procesar los datos de nombre de usuario o contraseña para ejecutar GoldMine.", 300)
                    FileClose($handle_ArchivoRegistrosBaseDatos)
                    $str_Archivo = ""
                    TraySetClick(8)
                    TraySetState(8)
                    Exit
                EndIf				
            EndIf
            $handle_VentanaGoldMinePrincipal = WinActivate("GoldMine 5.5")
            If $handle_VentanaGoldMinePrincipal = 0 Then
                MsgBox(16, "LineToClip - Error", "Se ha producido un error al intentar activar la ventana principal de GoldMine. Puede que el programa no esté ejecutándose o esté tardando demasiado en comenzar a ejecutarse.", 300)
                FileClose($handle_ArchivoRegistrosBaseDatos)
                $str_Archivo = ""
                TraySetClick(8)
                TraySetState(8)
                Return
            EndIf
            ; Esto es lo equivalente a "Ctrl+S"
            Send("!h", 0)
            Send("{ASC 110}", 0)
			Sleep(2000)
            If WinExists("Agregar nuevo registro") = 1 Then
                $handle_VentanaGoldMineNuevoRegistro = WinActivate("Agregar nuevo registro")
                If $handle_VentanaGoldMineNuevoRegistro = 0 Then
                    MsgBox(16, "LineToClip - Error", "Se ha producido un error al intentar activar la ventana de nuevo registro de GoldMine. Puede que el programa no esté ejecutándose o esté tardando demasiado en responder.", 300)
                    FileClose($handle_ArchivoRegistrosBaseDatos)
                    $str_Archivo = ""
                    TraySetClick(8)
                    TraySetState(8)
                    Return
                EndIf
			Else
                MsgBox(16, "LineToClip - Error", "No se ha encontrado la ventana de nuevo registro de GoldMine. Puede que el programa no esté ejecutándose o esté tardando demasiado en responder.", 300)
                FileClose($handle_ArchivoRegistrosBaseDatos)
                $str_Archivo = ""
                TraySetClick(8)
                TraySetState(8)
                Return
            EndIf
            Send("^v", 0)
            Send("{TAB}", 0)
            Send("^v", 0)
            Send("{ENTER}", 0)
			Sleep(2000)
            If WinExists("GoldMine", "Ya hay un registro") = 1 Then
                $handle_VentanaGoldMineRegistroDuplicado = WinActivate("GoldMine", "Ya hay un registro")
                If $handle_VentanaGoldMineRegistroDuplicado = 0 Then
                    MsgBox(16, "LineToClip - Error", "Se ha producido un error al intentar activar la ventana de registro duplicado de GoldMine. Puede que el programa no esté ejecutándose o esté tardando demasiado en responder.", 300)
                    FileClose($handle_ArchivoRegistrosBaseDatos)
                    $str_Archivo = ""
                    TraySetClick(8)
                    TraySetState(8)
                    Return
                EndIf
                $int_ResultadoWinWaitClose = WinWaitClose("GoldMine", "Ya hay un registro", 0)
                If $int_ResultadoWinWaitClose <> 1 Then
                    MsgBox(16, "LineToClip - Error", "Se ha obtenido una respuesta inesperada al esperar al cierre de la ventana de registro duplicado de GoldMine. Puede que el programa no esté ejecutándose o esté tardando demasiado en responder.", 300)
                    FileClose($handle_ArchivoRegistrosBaseDatos)
                    $str_Archivo = ""
                    TraySetClick(8)
                    TraySetState(8)
                    Return
                EndIf
            EndIf
			Sleep(2000)
            If WinExists("Agregar nuevo registro") = 1 Then
                $handle_VentanaGoldMineNuevoRegistro = WinActivate("Agregar nuevo registro")
                If $handle_VentanaGoldMineNuevoRegistro = 0 Then
                    MsgBox(16, "LineToClip - Error", "Se ha producido un error al intentar activar la ventana de nuevo registro de GoldMine. Puede que el programa no esté ejecutándose o esté tardando demasiado en responder.", 300)
                    FileClose($handle_ArchivoRegistrosBaseDatos)
                    $str_Archivo = ""
                    TraySetClick(8)
                    TraySetState(8)
                    Return
                EndIf
				Send("{ESC}", 0)
			Else
				Send("!c", 0)
				Send("{ASC 105}", 0)
				Send("^i", 0)
				Send("{TAB}", 0)
				Send("^v", 0)
				Send("{TAB}", 0)
				Send("{TAB}", 0)
				Send("{TAB}", 0)
				Send("{TAB}", 0)
				Sleep (2000)
				If WinExists("Bloqueo de registro multiusuario") = 1 Then
					$handle_VentanaGoldMineBloqueoRegistroMultiusuario = WinActivate("Bloqueo de registro multiusuario")
					If $handle_VentanaGoldMineBloqueoRegistroMultiusuario = 0 Then
						MsgBox(16, "LineToClip - Error", "Se ha producido un error al intentar activar la ventana de bloqueo de registro multiusuario de GoldMine. Puede que el programa no esté ejecutándose o esté tardando demasiado en responder.", 300)
						FileClose($handle_ArchivoRegistrosBaseDatos)
						$str_Archivo = ""
						TraySetClick(8)
						TraySetState(8)
						Return
					EndIf
					$int_ResultadoWinClose = WinClose("Bloqueo de registro multiusuario")
					If $int_ResultadoWinClose = 0 Then
						MsgBox(16, "LineToClip - Error", "Se ha producido un error al intentar cerrar la ventana de bloqueo de registro multiusuario de GoldMine. Puede que el programa no esté ejecutándose o la ventana ya haya sido cerrada.", 300)
					EndIf
				EndIf
				Send("{ESC}", 0)
			EndIf

            Sleep (1000)			
        Else
            $int_ResultadoMsgBox = MsgBox(566, "LineToClip", "La linea " & $int_ArchivoRegistrosBaseDatos_LineaActual & " del archivo " & $str_Archivo & " no contiene datos esperados para un registro de base de datos. ¿Desea continuar leyendo lineas de este archivo?", 300)
            Select
            Case $int_ResultadoMsgBox = 2
                FileClose($handle_ArchivoRegistrosBaseDatos)
                $str_Archivo = ""
                TraySetClick(8)
                TraySetState(8)
                Return
            Case $int_ResultadoMsgBox = 10
                $int_ArchivoRegistrosBaseDatos_LineaActual = $int_ArchivoRegistrosBaseDatos_LineaActual - 1
                ContinueLoop
            Case $int_ResultadoMsgBox = 11
                ContinueLoop
            Case Else
                MsgBox(16, "LineToClip - Error", "La función 'MsgBox' de AutoIt ha indicado un valor de retorno inesperado.", 300)
                FileClose($handle_ArchivoRegistrosBaseDatos)
                $str_Archivo = ""
                TraySetClick(8)
                TraySetState(8)
                Return
            EndSelect
        EndIf
    Wend

    $int_ErrorFileClose = FileClose($handle_ArchivoRegistrosBaseDatos)
    If $int_ErrorFileClose <> 1 Then
        MsgBox(16, "LineToClip - Error", "El archivo " & $str_Archivo & " no ha podido ser cerrado. Compruebe que el archivo cuyo nombre ha introducido existe y tiene permisos para leerlo.", 300)
        $str_Archivo = ""
        TraySetClick(8)
        TraySetState(8)
        Return
    EndIf

    $str_Archivo = ""
    TraySetClick(8)
    TraySetState(8)
    Return

EndFunc


;===============================================================================

Func LeerConfiguracion()
    Local $int_Error = 0
    Local $str_InputBox = ""


    $str_HotKeyCarpetas = RegRead("HKCU\SOFTWARE\IngenierosTenerife\LineToClip", "HotKeyCarpetas")
    If $str_HotKeyCarpetas == "" Then
        Switch @error
        Case 1
            $int_Error = 1
            $str_HotKeyCarpetas = "^!c"
            RegWrite("HKCU\SOFTWARE\IngenierosTenerife\LineToClip")
            RegWrite("HKCU\SOFTWARE\IngenierosTenerife\LineToClip", "HotKeyCarpetas", "REG_SZ", "^!c")
        Case 2, 3
            $int_Error = 2
            $str_HotKeyCarpetas = "^!c"
        Case -1, -2
            $int_Error = 1
            $str_HotKeyCarpetas = "^!c"
            RegWrite("HKCU\SOFTWARE\IngenierosTenerife\LineToClip", "HotKeyCarpetas", "REG_SZ", "^!c")
        Case Else
            $int_Error = 3
            $str_HotKeyCarpetas = "^!c"
        EndSwitch
    EndIf

    $str_HotKeyURLs = RegRead("HKCU\SOFTWARE\IngenierosTenerife\LineToClip", "HotKeyURLs")
    If $str_HotKeyURLs == "" Then
        Switch @error
        Case 1
            $int_Error = 1
            $str_HotKeyURLs = "^!u"
            RegWrite("HKCU\SOFTWARE\IngenierosTenerife\LineToClip")
            RegWrite("HKCU\SOFTWARE\IngenierosTenerife\LineToClip", "HotKeyURLs", "REG_SZ", "^!u")
        Case 2, 3
            $int_Error = 2
            $str_HotKeyURLs = "^!u"
        Case -1, -2
            $int_Error = 1
            $str_HotKeyURLs = "^!u"
            RegWrite("HKCU\SOFTWARE\IngenierosTenerife\LineToClip", "HotKeyURLs", "REG_SZ", "^!u")
        Case Else
            $int_Error = 3
            $str_HotKeyURLs = "^!u"
        EndSwitch
    EndIf
    
    $str_HotKeyBaseDatos = RegRead("HKCU\SOFTWARE\IngenierosTenerife\LineToClip", "HotKeyBaseDatos")
    If $str_HotKeyBaseDatos == "" Then
        Switch @error
        Case 1
            $int_Error = 1
            $str_HotKeyBaseDatos = "^!r"
            RegWrite("HKCU\SOFTWARE\IngenierosTenerife\LineToClip")
            RegWrite("HKCU\SOFTWARE\IngenierosTenerife\LineToClip", "HotKeyBaseDatos", "REG_SZ", "^!r")
        Case 2, 3
            $int_Error = 2
            $str_HotKeyBaseDatos = "^!r"
        Case -1, -2
            $int_Error = 1
            $str_HotKeyBaseDatos = "^!r"
            RegWrite("HKCU\SOFTWARE\IngenierosTenerife\LineToClip", "HotKeyBaseDatos", "REG_SZ", "^!r")
        Case Else
            $int_Error = 3
            $str_HotKeyBaseDatos = "^!r"
        EndSwitch
    EndIf

    $str_GoldMine5User = RegRead("HKCU\SOFTWARE\IngenierosTenerife\LineToClip", "GoldMine5User")
    If $str_GoldMine5User == "" Then
        Switch @error
        Case 1
            $int_Error = 1
            $str_GoldMine5User = "(Sin datos)"
            RegWrite("HKCU\SOFTWARE\IngenierosTenerife\LineToClip")
            RegWrite("HKCU\SOFTWARE\IngenierosTenerife\LineToClip", "GoldMine5User", "REG_SZ", "(Sin datos)")
        Case 2, 3
            $int_Error = 2
            $str_GoldMine5User = "(Sin datos)"
        Case -1, -2
            $int_Error = 1
            $str_GoldMine5User = "(Sin datos)"
            RegWrite("HKCU\SOFTWARE\IngenierosTenerife\LineToClip", "GoldMine5User", "REG_SZ", "(Sin datos)")
        Case Else
            $int_Error = 3
            $str_GoldMine5User = "(Sin datos)"
        EndSwitch
    EndIf

    $str_GoldMine5Password = RegRead("HKCU\SOFTWARE\IngenierosTenerife\LineToClip", "GoldMine5Password")
    If $str_GoldMine5Password == "" Then
        Switch @error
        Case 1
            $int_Error = 1
            $str_GoldMine5Password = "(Sin datos)"
            RegWrite("HKCU\SOFTWARE\IngenierosTenerife\LineToClip")
            RegWrite("HKCU\SOFTWARE\IngenierosTenerife\LineToClip", "GoldMine5Password", "REG_SZ", "(Sin datos)")
        Case 2, 3
            $int_Error = 2
            $str_GoldMine5Password = "(Sin datos)"
        Case -1, -2
            $int_Error = 1
            $str_GoldMine5Password = "(Sin datos)"
            RegWrite("HKCU\SOFTWARE\IngenierosTenerife\LineToClip", "GoldMine5Password", "REG_SZ", "(Sin datos)")
        Case Else
            $int_Error = 3
            $str_GoldMine5Password = "(Sin datos)"
        EndSwitch
    EndIf

    Switch $int_Error
    Case 0
        If $str_GoldMine5User == "(Sin datos)" Then
            $str_InputBox = InputBox ( "Nombre de usuario de GoldMine", "Introduzca el nombre de usuario que se utilizará al intentar ejecutar automáticamente GoldMine:", "" , " M")
            Switch @error
            Case 0
                $str_InputBox = _StringEncrypt(1, $str_InputBox, $str_GoldMine5Key, 1)
                $str_GoldMine5User = $str_InputBox
                $str_InputBox = ""
                RegWrite("HKCU\SOFTWARE\IngenierosTenerife\LineToClip", "GoldMine5User", "REG_SZ", $str_GoldMine5User)
            Case 1, 2
                MsgBox(16, "LineToClip - Error", "El nombre de usuario de GoldMine no ha sido registrado. No será posible ejecutar el programa automáticamente si estuviera cerrado.", 300)
            Case 3, 4, 5
                MsgBox(16, "LineToClip - Error", "Se ha producido un error al solicitar el nombre de usuario de GoldMine. No será posible ejecutar el programa automáticamente si estuviera cerrado.", 300)
                Return 1
            Case Else
                MsgBox(16, "LineToClip - Error", "Se ha producido un error desconocido al solicitar el nombre de usuario de GoldMine. No será posible ejecutar el programa automáticamente si estuviera cerrado.", 300)
                Return 1
            EndSwitch
            $str_InputBox = ""
        EndIf
        If $str_GoldMine5Password == "(Sin datos)" Then
            $str_InputBox = InputBox ( "Contraseña de GoldMine", "Introduzca la contraseña que se utilizará al intentar ejecutar automáticamente GoldMine (Introduzca un único espacio en blanco para indicar una contraseña vacía):", "" , "*M")
            Switch @error
            Case 0
                $str_InputBox = _StringEncrypt(1, $str_InputBox, $str_GoldMine5Key, 1)
                $str_GoldMine5Password = $str_InputBox
                $str_InputBox = ""
                RegWrite("HKCU\SOFTWARE\IngenierosTenerife\LineToClip", "GoldMine5Password", "REG_SZ", $str_GoldMine5Password)
            Case 1, 2
                MsgBox(16, "LineToClip - Error", "La contraseña de GoldMine no ha sido registrada. No será posible ejecutar el programa automáticamente si estuviera cerrado.", 300)
            Case 3, 4, 5
                MsgBox(16, "LineToClip - Error", "Se ha producido un error al solicitar la contraseña de GoldMine. No será posible ejecutar el programa automáticamente si estuviera cerrado.", 300)
                Return 1
            Case Else
                MsgBox(16, "LineToClip - Error", "Se ha producido un error desconocido al solicitar la contraseña de GoldMine. No será posible ejecutar el programa automáticamente si estuviera cerrado.", 300)
                Return 1
            EndSwitch
            $str_InputBox = ""
        EndIf
        Return 0
    Case 1
        ;MsgBox(16, "LineToClip - Error", "La configuración de una o más opciones del programa no ha podido ser cargada y se ha restablecido a su valor predeterminado. Corrija la configuración en el Registro.", 300)
        Return 1
    Case 2
        MsgBox(16, "LineToClip - Error", "La configuración de una o más opciones del programa no ha podido ser cargada debido a un error de acceso al Registro.", 300)
        Return 1
    Case Else
        MsgBox(16, "LineToClip - Error", "La configuración de una o más opciones del programa no ha podido ser cargada debido a un error desconocido.", 300)
        Return 1
    EndSwitch

EndFunc


;===============================================================================

Func BorrarConfiguracion_Usuario()
    Local $int_Error = 0
    Local $int_ResultadoRegWrite = 0


    $int_ResultadoRegWrite = RegWrite("HKCU\SOFTWARE\IngenierosTenerife\LineToClip", "GoldMine5User", "REG_SZ", "(Sin datos)")
    If $int_ResultadoRegWrite <> 1 Then
        Switch @error
        Case 1
            $int_Error = 1
            RegWrite("HKCU\SOFTWARE\IngenierosTenerife\LineToClip")
            RegWrite("HKCU\SOFTWARE\IngenierosTenerife\LineToClip", "GoldMine5User", "REG_SZ", "(Sin datos)")
        Case 2, 3
            $int_Error = 2
        Case -1, -2
            $int_Error = 1
            RegWrite("HKCU\SOFTWARE\IngenierosTenerife\LineToClip", "GoldMine5User", "REG_SZ", "(Sin datos)")
        Case Else
            $int_Error = 3
        EndSwitch
    EndIf

    $int_ResultadoRegWrite = RegWrite("HKCU\SOFTWARE\IngenierosTenerife\LineToClip", "GoldMine5Password", "REG_SZ", "(Sin datos)")
    If $int_ResultadoRegWrite <> 1 Then
        Switch @error
        Case 1
            $int_Error = 1
            RegWrite("HKCU\SOFTWARE\IngenierosTenerife\LineToClip")
            RegWrite("HKCU\SOFTWARE\IngenierosTenerife\LineToClip", "GoldMine5Password", "REG_SZ", "(Sin datos)")
        Case 2, 3
            $int_Error = 2
        Case -1, -2
            $int_Error = 1
            RegWrite("HKCU\SOFTWARE\IngenierosTenerife\LineToClip", "GoldMine5Password", "REG_SZ", "(Sin datos)")
        Case Else
            $int_Error = 3
        EndSwitch
    EndIf

    Switch $int_Error
    Case 0
        MsgBox(64, "LineToClip - Información", "Los datos guardados de usuario y contraseña de GoldMine han sido eliminados. La próxima vez que inicie el programa se le solicitarán de nuevo dichos datos.", 300)
        Return 0
    Case 1
        ;MsgBox(16, "LineToClip - Error", "La configuración de una o más opciones del programa no ha podido ser cargada y se ha restablecido a su valor predeterminado. Corrija la configuración en el Registro.", 300)
        Return 1
    Case 2
        MsgBox(16, "LineToClip - Error", "La configuración de una o más opciones del programa no ha podido ser escrita debido a un error de acceso al Registro.", 300)
        Return 1
    Case Else
        MsgBox(16, "LineToClip - Error", "La configuración de una o más opciones del programa no ha podido ser escrita debido a un error desconocido.", 300)
        Return 1
    EndSwitch

EndFunc


;===============================================================================

Func BorrarConfiguracion_Teclas()
    Local $int_Error = 0
    Local $int_ResultadoRegWrite = 0


    $int_ResultadoRegWrite = RegWrite("HKCU\SOFTWARE\IngenierosTenerife\LineToClip", "HotKeyCarpetas", "REG_SZ", "^!c")
    If $int_ResultadoRegWrite <> 1 Then
        Switch @error
        Case 1
            $int_Error = 1
            RegWrite("HKCU\SOFTWARE\IngenierosTenerife\LineToClip")
            RegWrite("HKCU\SOFTWARE\IngenierosTenerife\LineToClip", "HotKeyCarpetas", "REG_SZ", "^!c")
        Case 2, 3
            $int_Error = 2
        Case -1, -2
            $int_Error = 1
            RegWrite("HKCU\SOFTWARE\IngenierosTenerife\LineToClip", "HotKeyCarpetas", "REG_SZ", "^!c")
        Case Else
            $int_Error = 3
        EndSwitch
    EndIf

    $int_ResultadoRegWrite = RegWrite("HKCU\SOFTWARE\IngenierosTenerife\LineToClip", "HotKeyURLs", "REG_SZ", "^!u")
    If $int_ResultadoRegWrite <> 1 Then
        Switch @error
        Case 1
            $int_Error = 1
            RegWrite("HKCU\SOFTWARE\IngenierosTenerife\LineToClip")
            RegWrite("HKCU\SOFTWARE\IngenierosTenerife\LineToClip", "HotKeyURLs", "REG_SZ", "^!u")
        Case 2, 3
            $int_Error = 2
        Case -1, -2
            $int_Error = 1
            RegWrite("HKCU\SOFTWARE\IngenierosTenerife\LineToClip", "HotKeyURLs", "REG_SZ", "^!u")
        Case Else
            $int_Error = 3
        EndSwitch
    EndIf
    
    $int_ResultadoRegWrite = RegWrite("HKCU\SOFTWARE\IngenierosTenerife\LineToClip", "HotKeyBaseDatos", "REG_SZ", "^!r")
    If $int_ResultadoRegWrite == "" Then
        Switch @error
        Case 1
            $int_Error = 1
            RegWrite("HKCU\SOFTWARE\IngenierosTenerife\LineToClip")
            RegWrite("HKCU\SOFTWARE\IngenierosTenerife\LineToClip", "HotKeyBaseDatos", "REG_SZ", "^!r")
        Case 2, 3
            $int_Error = 2
        Case -1, -2
            $int_Error = 1
            RegWrite("HKCU\SOFTWARE\IngenierosTenerife\LineToClip", "HotKeyBaseDatos", "REG_SZ", "^!r")
        Case Else
            $int_Error = 3
        EndSwitch
    EndIf

    Switch $int_Error
    Case 0
        MsgBox(64, "LineToClip - Información", "La configuración de los métodos abreviados del teclado se ha restablecido a los valores predeterminados. La configuración predeterminada comenzará a utilizarse la próxima vez que inicie el programa.", 300)
        Return 0
    Case 1
        ;MsgBox(16, "LineToClip - Error", "La configuración de una o más opciones del programa no ha podido ser cargada y se ha restablecido a su valor predeterminado. Corrija la configuración en el Registro.", 300)
        Return 1
    Case 2
        MsgBox(16, "LineToClip - Error", "La configuración de una o más opciones del programa no ha podido ser escrita debido a un error de acceso al Registro.", 300)
        Return 1
    Case Else
        MsgBox(16, "LineToClip - Error", "La configuración de una o más opciones del programa no ha podido ser escrita debido a un error desconocido.", 300)
        Return 1
    EndSwitch

EndFunc


;===============================================================================

Func LeerParametros()
    Local $array_Archivo
    Local $int_NumeroParametrosOK = 0
    Local $int_ContenidoParametrosOK = 0


    $array_Archivo = _WinAPI_GetOpenFileName("Seleccione el archivo a leer:", "Archivos de texto (*.txt)|Todos los archivos (*.*)", @HomeDrive & @HomePath, "", "", 1 , 0 , 0 , 0)
    If $array_Archivo[2] = "" Then
        $int_NumeroParametrosOK = 0
    Else
        $int_NumeroParametrosOK = 1
        $str_Archivo = $array_Archivo[1] & "\" & $array_Archivo[2]
    EndIf

    If $int_NumeroParametrosOK = 1 Then
        $int_ContenidoParametrosOK = FileExists($str_Archivo)
    EndIf

    If $int_NumeroParametrosOK <> 1 Then
        MsgBox(16, "LineToClip - Error", "Se requiere que seleccione un archivo a procesar.", 300)
        Return 1
    EndIf
    If $int_ContenidoParametrosOK <> 1 Then
        MsgBox(16, "LineToClip - Error", "El archivo " & $str_Archivo & " no existe o no es accesible. Compruebe que el archivo cuyo nombre ha introducido existe y tiene permisos para leerlo.", 300)
        Return 1
    EndIf
    Return 0

EndFunc


;===============================================================================

Func DetectarApagado()
    If ((@ExitMethod = 3) or (@ExitMethod = 4)) Then
        TraySetState(2)
    EndIf
EndFunc


;===============================================================================

He dividido el código para que entre en el mensaje.....

Re: No se me activa ventana agregar nuevo registro

Publicado: 21 Ene 2013, 14:13
por Ximorro
Gracias por compartir el código, pero si el problema es algo concreto es mejor que hagas una reducción del mismo o dupliques el problema en un código nuevo más simple, así podemos centrarnos en el problema y los que no tenemos mucho tiempo vamos más al grano.

Por cierto, he estado mirando lo del hotkey y es raro, no es que no vaya esa combinación, es que no ninguna con la tecla Windows, y yo juraría que esto lo he usado antes.
Windows impide parchear alguna combinación, como CTRL-ALT-DEL, pero TODAS las combinaciones de la tecla Windows desde luego que no...
¿Será algún bug en el último AutoIt? Como digo yo diría haber usado esa tecla en HotKeySet...

Veo en la ayuda que las combinaciones prohibidas son:
Ctrl+Alt+Delete (reservada por Windows)
F12 (reservada por Windows)
ENTER del teclado numérico (se captura junto con el ENTER normal)
Win+B,D,E,F,L,M,R,U; y Win+Shift+M (así que sí hay algunas Win no permitidas, pero no esa que pones ni alguna otra que he probado)
Alt, Ctrl, Shift, Win por sí solas (son teclas modificadoras, hay que usarlas con una tecla "final")
y otras combinaciones prohibidas como dos teclas finales o hotkeys ya asignadas por otros programas (en este último caso el problema es el conflicto con el otro programa, no la combinación de teclas en sí)

Re: No se me activa ventana agregar nuevo registro

Publicado: 21 Ene 2013, 14:30
por Ximorro
SOLUCIONADA LA COMBINACIÓN DE TECLAS

Vale, el problema es que a la hora de asignar el hotkey no se puede separar entre tecla izquierda o tecla derecha. O sea, no se distingue entre LALT+2 y RALT+2, por ejemplo, todo es ALT+2.
Estas cosas funcionan con Send, por ejemplo, pero no a la hora de asignar hotkeys por la API de Windows (sí se podrían distinguir analizando los keycodes del teclado)

Así que para la tecla Windows no se puede usar LWIN o RWIN, hay que usar la tecla genérica... que no tiene "palabra" reservada en AutoIt, tal como tiene ALT, curiosamente sólo se puede poner con "#".
Anda, CTRL y SHIFT tampoco tienen "palabra" reservada, sólo se pueden poner con "^" y "!". ¿Esto siempre ha sido así? ¡yo juraría que las he usado en algún AutoIt más viejo!

Conclusión, que para asignar Control+Alt+Win+2 tienes que hacer
HotKeySet("^!#2", "_funcion")
y he comprobado que funciona perfectamente, al igual que otras combinaciones con WIN que no sean las que he puesto en el comentario de antes.

byee

Re: No se me activa ventana agregar nuevo registro

Publicado: 25 Ene 2013, 03:56
por Fosforito
Estaba pensando en reescribir todo el código hacia AHK, pero das nuevas sendas a seguir.

Tomo nota.
Propondré los códigos específicos que funcionan en AHK, pero que ahora no funcionan en AutoIt, aunque bajo condiciones más complejas.