Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - ‡‡‡ Ðξλ†Ћ Щλ†ζЋ ‡‡‡

#2
Que onda, como estan  :)

Yo aca con una consulta  :P

Miren, tengo creado un Exe ActiveX, llamado XEjecutor.

Tengo otro Exe normal que hace uso del ActiveX, pero estoy teniendo una serie de problemas:

Dentro de este exe normal, si escribo:

Código (vb) [Seleccionar]
Dim Ejec_1 As Object

Set Ejec_1 = CreateObject("C:\Documents and Settings\DeathWatch\Mis documentos\XEjecutor.exe")


me arroja Error '429' en tiempo de ejecucion :
El componente ActiveX no puede crear el objeto.
Pero igual si en lugar de XEjecutor.exe le cambio el nombre a lasdjflk.exe, me da el mismo error, asi que creo que no este haciendo referencia al archivo.

Por otro lado si escribo:

Código (vb) [Seleccionar]
Sub Main()
' Aqui, se supone que registro el Exe ActiveX, y aparentemente si lo hace, supongo yo...
Shell ("C:\Documents and Settings\DeathWatch\Mis documentos\XEjecutor.exe /RegServer")
' Aqui llamo al Sub Prueba
Prueba
End Sub


Sub Prueba()
' Aqui instancio al proyecto XProyEjec, a la clase XClsEjec, que se encuentran dentro del ActiveX XEjecutor
Dim Ejec_1 As New XProyEjec.XClsEjec
Set Ejec_1 = New XProyEjec.XClsEjec

' Llamo a un procedimiento llamado Proceso, dentro del ActiveX
Ejec_1.Proceso 1

' y despejo el objeto.
Set Ejec_1 = Nothing

End Sub


Pero obtengo Error de compilacion:
No se ha definido el tipo definido por el usuario.

Donde esta mi falla?

Les comento que la idea NO es entrar en VB, a Proyecto - Referencias, porque este exe normal y el exe activex, siempre se van a ejecutar en una maquina diferente.

Me pueden ayudar por favor?

Gracias de antemano  ;)
Un saludo...
#3
Hola como estan  :)
Yo aqui batallando un poco con lo mismo que les preguntaba anteriormente  :P
Espero me puedan ayudar...

La primera consulta es como se usa EnumProcesses.
La he buscado mucho y he entendido por decirlo asi, el conecpto de los parametros:
pProcessIds [out] A pointer to an array that receives the list of process identifiers.
cb [in] The size of the pProcessIds array, in bytes.
pBytesReturned [out] The number of bytes returned in the pProcessIds array.
pero no entiendo que valores numericos asignar en cb y pBytesReturned.

Por ejemplo, en http://foro.elhacker.net/empty-t248082.0.html;msg1194841#msg1194841
cb = 8
cbNeeded = 96
Do While cb <= cbNeeded
cb = cb * 2
ReDim ProcessIDs(cb / 4) As Long
lRet = EnumProcesses(ProcessIDs(1), cb, cbNeeded)
Loop
NumElements = cbNeeded / 4

:huh:  :huh:
Por que cb es 8? Por que no 9 o 7, o 120?
Lo mismo para cbNeeded?
Por que cb se multiplica x 2 y luego en el redim y NumElements, se divide entre 4?
Por que el array es directamente dividido entre 4?

O en http://foro.elhacker.net/empty-t246534.0.html;msg1191015#msg1191015
ReDim lProcesses(1023) As Long
If EnumProcesses(lProcesses(0), 1024 * 4, lRet) Then
For N = 0 To (lRet \ 4) - 1

Por que ahora se multiplica entre 4, y luego se divide entre 4, menos 1?

Si alguien pudiera por favor, poner un ejemplo, unicamente de enumprocesses, mas o menos sencillo, y comentar porque de las divisiones y procesos? En el ApiGuide, y en muchas paginas, vienen ejemplos bastante extensos, y hacen uso de OpenProcess, CloseProcess, etc, pero si no consigo entender EnumProcesses, no tiene caso seguir con Open..., etc.  :P


Por otro lado, hablando del multithread que quiero hacer, estuve investigando acerca de la Api de la liga que comento ░▒▓BlackZeroҖ▓▒░, incluso otras mencionadas en la msdn, CreateThread en el ApiGuide, etc, pero parece que es muy inestable usarlos en VB6, por lo que no va a ser una opcion.
Me encontre que tambien se podia usar un Timer, pero como el programa realiza varias instrucciones, el Timer ejecuta las instrucciones que contiene, al terminar los demas procesos, asi que tampoco va a ser alternativa.

Ahora, me encontre con DDE. No he probado, pero ¿consideran que si dejo la aplicacion como servidor, y el comando listen (y los demas que sean necesarios), y realizando otra aplicacion como cliente, al perder conexion con la unidad de red, el cliente envie algun valor, y el servidor, al recibirlo, realice lo que tenga que hacer, aun cuando no haya terminado los procesos?
Tambien por otro lado, me encontre que DDE ya es anticuado. Que ahora se tiene OLE. ¿se puede hacer algo parecido con OLE, a DDE?
Y tambien me encontre con que, en lugar de usar DDE y OLE, se puede usar un ActiveX. ¿Que sería, un DLL ActiveX o un EXE ActiveX? El archivo, se encuentra en la misma maquina. ¿Saben de alguna pagina donde se exponga un ejemplo parecido?

Como ven WinSock? El problema que le veo, aunque no lo se con seguridad, es que todos los equipos donde ejecutaría el programa, aunque se tienen permisos de admin, y todo, tienen ciertas cosas restringidas por politicas de seguridad, el antivirus, y el firewall, que pudiera bloquearme el puerto que pudiera ocupar para realizar la comunicacion entre aplicaciones.

Ojala me puedan dar una guia o referencia, sus comentarios y opiniones.  ;)

Bueno, despues del choro mareador de preguntas, me despido.  :)
Nos vemos pronto.

P.D. No encontre lo de las APIS Atom. ¿No es Atom APIS? ¿Se basan en xml? Es que no se xml

#4
Perfecto!!!  ;D  :laugh:

En este momento empiezo a investigar las sugerencias que me dieron.

MCKSys Argentina
Algo vi de SendMessage, pero no le hice mucho caso. Voy a investigarlo mas a fondo, porque la neta tampoco se que es eso del WinProc.

░▒▓BlackZeroҖ▓▒░
Si, en el punto 5 es precisamente lo que busco. Igual, voy a investigar lo de las API's Atom, PSC, y demas.

Les agradezco nuevamente su apoyo.
Que tengan buen dia.
Aqui seguimos...  :laugh:  :laugh:
#5
Vientos amigo!!!   :laugh:  :laugh: Super, el dato!!!

A partir de esto, ya puedo tomar la primera ruta, y probar y seguir investigando lo que me comento tambien seba123neo.

Te agradezco mucho este dato  ;D

Si me pudieran sugerir algo para el punto 4 y 5, mientras investigo lo de las apis, que seguro he de volver a consultarles  :P  :P. Si soy muy novato con las api's  :-[

Gracias
Saludos

P.D. Espero terminarlo pronto, para mostrarselos, a ver que les parece. Para que me den su opinion. Y si ayuda a alguien, pues que mejor  :)
#6
Gracias seba123neo:

Pero me quedo en las mismas.

Ponle que FindWindowEx, GetParent, EnumWindows y EnumChildWindows no las he investigado, aunque ya las habia visto, y lo mas seguro es que las use para obtener los controles de una ventana y demas.

Pero las otras si ya las he investigado.
Se que FindWindow te busca una ventana por el parametro que le pases, ya sea el titulo de la ventana o su classname, pero si le pasas el titulo, y hay 2 aplicaciones con el mismo nombre, igual te toma la ventana que no quieres. Por otro lado, muchas de las aplicaciones, como decia anteriormente, son externas. Quiza si copio un ejemplo que me encontre, me coloque sobre la aplicacion y vea su classname, pero no he encontrado informacion acerca de si el classname cambia cada que abras la misma aplicacion.

GetClassName devuelve obviamente el classname, pero por ejemplo:
(disculpen si no se debe insertar un link, pero no recuerdo si se debe o no)
http://www.recursosvisualbasic.com.ar/htm/listado-api/88-hwnd-class-name-parent.htm
En esta sección:

Código (vb) [Seleccionar]
'Obtiene la coordenada del Mouse 
Ret = GetCursorPos(Cor) 
'Recuperamos el HWND de la ventana asociada a esa coordenada 
Handle = WindowFromPoint(Cor.x, Cor.y) 
'Handle de la ventana padre 
hParent = GetParent(Handle) 
'Llenamos un Buffer 
ClassName = Space$(128) 
'Recupera el Classname y lo devuelve en el Buffer 
Ret = GetClassName(Handle, ClassName, 128)

me necesito colocar sobre la ventana, para que me devuelva el classname, lo cual no me sirve, pues la idea es hacerlo sin que tenga que meter mano yo.

GetWindowText devuelve el titulo de la ventana, pero vuelvo a lo mismo: y si hay 2 ventanas con el mismo nombre?
GetWindowTextLength devuelve la longitud del titulo de la ventana, pero lo mismo de antes...

Lo que estoy buscando es esto, por ejemplo:
Para el punto 1, que sin este, para que me sigo al 2 o 3... me encontre que el Shell de VB te devuelve el hInstance (segun recuerdo xq con todo lo que he leido de esto, ya no lo recuerdo bien). La api ShellExecute tambien te regresa el hInstance, pero no he encontrado una api que te devuelva el hWnd, por el hInstance. Igual me encontre con una funcion en la MSDN llamada GetWinhWnd, pero es una funcion x, no es ninguna api.
Lo que requiero es una api que me devuelva la hWnd de la aplicacion que ejecuto, y quiza de ahi ya haga un bucle para ir obteniendo sus controles y subventanas.

Para el punto 4 y 5, me encontre con DoEvents, el cual voy a probar, pero igual no se si aplique para lo que requiero.

Por eso es que estoy consultandoles a ustedes. Para saber si me pueden sugerir algo.

Bueno, pues espero haberme explicado, y que me puedan comentar algunas opciones o quiza codigo para echarle ojo y darme una idea de que rumbo tomar.

Les agradezco
Un saludo

Por cierto, me descargue el api guide hace como 3 semanas y tambien he visto el visor api que trae el VB, pero si no se cual aplique, no me resuelve el saber su sintaxis.
#7
Hola, como estan:  ;D

Vengo en busca de su ayuda, pues llevo varias semanas buscando y leyendo sobre lo que a continuacion les consultaré, y no consigo resolverlo.  :-[

Estoy haciendo una aplicacion en VB para automatizar bastantes procesos, con la intencion de ahorrarnos a un cuate y a mi, un tiempo considerable, en un procedimiento que hacemos muy a menudo, alla en el trabajo.  :P  :P

Ya llevo una buena parte del codigo, el problema es que estoy atorado con las api's, porque aunque me encuentro una e investigo como se usa, no se cuales son las que realmente necesito.

Los detalles estan asi: (mas adelante pondre algunos ejemplos, de varias pruebas que he hecho, pero que no le he encontrado el resultado que busco)

1.- Estoy buscando una api que ejecute un programa, y al mismo tiempo, me devuelva su hwnd, su classname, o de a perdis, su caption.
2.- Una vez que esa api me regreso alguno de los 3 valores que comente antes, que api debo usar, que me permita visualizar sus botones, controles, y demas, para manipularlos, x ej, presionar el boton Aceptar, u obtener o asignar texto a una caja de texto determinada.
3.- Obtener la(s) subventana(s), de la ventana (o programa que se ejecuto), para manipular los controles de tales subventanas.

Como adicional:
4.- Muchos de esos programas a ejecutar, estan en una unidad de red, y quiero hacer un proceso que me este monitoreando si todavia esta "conectada" la unidad de red. Que me recomiendan: usar el filesystemobject y DriveExists, o una api como el winsock, u otra, si consideran mas efectiva?

5.- Tomando en cuenta el punto anterior, tengo el programa en VB que esta ejecutando todos los procesos que debe. Ahora, si a ese programa le agrego un modulo con Do While para que monitoree la conexion con la unidad de red, y lo llamo en algun punto, se va a quedar dentro del Do While, por siempre, a menos que se pierda la conexion con la unidad de red.
Por otro lado, puedo hacer un script u otro mini-programa que este checando lo de la conexion, y que cuando se pierda la conexion, termine el programa principal, pero si lo termina, no sabria que procesos concluyo y cuales faltaron.
Mi pregunta es: como puedo hacer que un modulo, dentro del programa principal, o un 2do programa este checando la conexion con la unidad, y que en el momento en el que se haya perdido tal, le envie el aviso al programa principal, de forma que éste, al recibirlo, muestre un status (ej msgbox o archivo de texto { para esto no es necesario que me indiquen como }), y se finalice el programa principal, o en su caso los 2 programas.

Ejemplos (punto 1, 2, 3):  :P  :P  :P
Me encontre con findwindow, para obtener la ventana (el programa) a trabajar, indicando el caption, y me funciono por ejemplo si tengo la calculadora abierta, pero muchos programas son externos, por lo que no se si me vaya a devolver una ventana diferente a la que requiero.
Tambien me encontre shellexecute, y probe con la calculadora, y me devolvio un 42 (???). Usando getwindowtext, en el parametro hwnd, le pase el valor obtenido con shellexecute, y al hacer un msgbox de la variable que guardo getwindowtext, me regreso 0. (Espero haberme explicado).
Estas fueron unas, de varias pruebas sin logro, que he realizado.


Espero me puedan ayudar...
Por favor, no me malentiendan. No estoy solicitando el progama ya hecho, sino una idea de que apis y opciones puedo seguir.
No soy muy novato en esto de la programacion, e incluso, le dedico mucho tiempo, por lo que les puedo decir que leo e investigo mucho, pero realmente estoy perdido en este momento, con los puntos que les comenté.

Les agradezco de antemano su ayuda.  ;)

Les envio un cordial saludo.
;D  ;D  ;D
#8
Scripting / Re: [Batch] for /R y for /D
8 Marzo 2009, 10:13 AM
Ah, ok, creo que ya voy entendiendo  :laugh:.

Gracias  :D
#9
Scripting / Re: [Batch] for /R y for /D
8 Marzo 2009, 07:52 AM
Otra vez con unas dudas  :-[  :-\
(yo se que no se van a poner a darme clases, solo necesito que me digan si voy bien, por decir, ejemplo 1 es correcto, ejemplo 2 no es correcto)

Por ejemplo, en un archivo llamado x2.txt que contiene

A1 A2 A3 A4 A5 A6 A7
;B1 B2 B3 B4 B5 B6 B7
:C1 C2 C3 C4 C5 C6 C7
@D1 D2 D3 D4 D5 D6 D7

Con

Código (dos) [Seleccionar]

for /F "tokens=3* eol=" %%b in (x2.txt) do (
echo %%b %%c
)
Se tendrían que declarar 2 variables (%%b y %%c), por decirlo asi, una para el 3 y otra para *, cierto?

De igual forma, en

Código (dos) [Seleccionar]
for /F "tokens=2,4* eol=" %%b in (x2.txt) do (
echo %%b %%c %%d
)
Se tendrían que declarar ahora 3 variables (%%b, %%c y %%d), por decirlo asi, una para el 2, otra para el 4, y otra para *, estoy bien?

En

Código (dos) [Seleccionar]
for /F "tokens=2-5 eol=" %%b in (x2.txt) do (
echo %%b %%c %%d %%e
)
Para que se mostrarán los elementos del 2 al 5, se tendrían que declarar variables para 2, 3, 4 y 5, es correcto?

Por ultimo

Código (dos) [Seleccionar]
for /F "tokens=2-4* eol=" %%b in (x2.txt) do (
echo %%b %%c %%d %%e
)
La sintaxis mas facil sería 2* en lugar de 2-4*, pero igual con alguna variación pudiera aplicarse, por eso se los pregunto: serían necesarias todas esas variables para mostrar del 2 al 7?

Si escribo

Código (dos) [Seleccionar]
for /F "delims=2 eol=" %%b in (x2.txt) do (
echo %%b
)

Se muestra
A1 A
;B1 B
:C1 C
@D1 D
Esto es porque muestra hasta donde encuentra un 2, cierto?

Con

Código (dos) [Seleccionar]
for /F "delims=A eol=" %%b in (x2.txt) do (
echo %%b
)

Se muestra
1
;B1 B2 B3 B4 B5 B6 B7
:C1 C2 C3 C4 C5 C6 C7
@D1 D2 D3 D4 D5 D6 D7
Y aqui, porque si la primera linea empieza con A, porque mostró 1?

Disculpen tantas preguntas, pero creo que ya voy por menos, por lo menos en lo que es un conocimiento y uso basico de batch
#10
Scripting / Re: [Batch] for /R y for /D
8 Marzo 2009, 05:15 AM
0x0309:
Prometido men  :-X  :-X  :-X
Y no te preocupes, de por si no soy chismoso ni "ojaldra"
Solo quiero seguir aprendiendo  :).

Te lo agradezco  :D
P.D. Mi correo esta a la vista de los foreros. Es el correo lo que necesitas?

Leo Gutierrez:
Igualmente gracias por tu tiempo y tu respuesta.

En estos momentos estoy haciendo ejercicios probando lo que me comentas, y por lo que veo, va a ser de mucha ayuda  :laugh:.

Gracias a ambos
Un saludo