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