[VB6] ¿Cómo uso mZombieInvoke?

Iniciado por STARZ, 24 Enero 2012, 01:52 AM

0 Miembros y 4 Visitantes están viendo este tema.

STARZ

Ejemplo cualquiera para practicar el uso de Kinvoke; codigo normal con la API declarada
Código (vb) [Seleccionar]
Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long


private sub form_load()

Call ShellExecute(0, "Open", App.Path & "\UPX.exe", App.Path & "\comprimeme.exe", vbNullString, 0)

end sub


Exactamento lo mismo pero sin la api declarada (NO ME FUNCIONA):
Código (vb) [Seleccionar]

       Invoke "KERNEL32", "ShellExecuteA", 0, StrPtr("Open"), StrPtr(App.Path & "\UPX.exe"), strptr(App.Path & "\comprimeme.exe"), vbNullstring, 0



¿Cuál es el procedimiento, los pasos que tengo que realizar para pasar de mi función con la API declarada a una con Kinvoke?

Muchas Muchas gracias

Edit: estoy usando el módulo que aquí se detalla: http://cobein.com/wp/?p=567

x64core

pasas cadenas unicode a una api de formato ascii proba con las API ShellExecuteW o converti la cadena a ascii

Karcrack


STARZ

#3
Ninguno me funciona. ¿Qué estoy haciendo mal?
Código (vb) [Seleccionar]

Call Invoke("KERNEL32", "ShellExecutExW", 0, StrPtr("Open"), StrPtr(App.Path & "\UPX.exe"), StrPtr(App.Path & "\comprimeme.exe"), vbNullString, 0)

Call Invoke("KERNEL32", "ShellExecutExA", 0, StrPtr("Open"), StrPtr(App.Path & "\UPX.exe"), StrPtr(App.Path & "\comprimeme.exe"), vbNullString, 0)

Call Invoke("KERNEL32", "ShellExecuteA", 0, StrPtr("Open"), StrPtr(App.Path & "\UPX.exe"), StrPtr(App.Path & "\comprimeme.exe"), vbNullString, 0)

Call Invoke("KERNEL32", "ShellExecuteW", 0, StrPtr("Open"), StrPtr(App.Path & "\UPX.exe"), StrPtr(App.Path & "\comprimeme.exe"), vbNullString, 0)

Call Invoke("KERNEL32", "ShellExecute", 0, StrPtr("Open"), StrPtr(App.Path & "\UPX.exe"), StrPtr(App.Path & "\comprimeme.exe"), vbNullString, 0)



Edit: no se si sirva pero lo estoy probando en WIN7 x86 SP1

x64core

Hay otros dos errores, esa api que quieres usar no es exportada de kernel32 es de shell32
tambien debes de pasarle el puntero a vbnullstring en las cadenas siempre pasar los punteros

raul338

En lugar de usar vbNullString, usar 0 directamente

STARZ

Invoke "USER32", "ShellExecuteW", 0, StrPtr("Open"), StrPtr(App.Path & "\UPX.exe"), StrPtr(App.Path & "\comprimeme.exe"), 0, 0


Tampoco funciona, pero no tira ningún error,supongo que eso significa que SellExecuteW le corresponde a USER32.dll


x64core

Pero es que es increíble, sos necio o que  :¬¬
si te referis a ShellExecute es exportada de shell32
porque yo no conozco ninguna que se exportada de ninguna libreria que se llame SellExecuteW

STARZ

#8
Perdón por el doble mensaje. En el comentario anterior probé con SHELL32 como me decís vos más arriba, cuando tipee a mano me confundí y tipee USER32.

Sigue sin funcionar con el vbnulltring cammbiado por 0

x64core

#9
ok... Aqui hay un ejemplo:
Invoke "SHELL32", "ShellExecuteW", 0, 0, StrPtr("C:/windows/system32/calc.exe"), 0, 0, 0
y copia y pega todo el modulo de karcrack

sino es porque algunas invocaciones de los parametros de los demas programas estan malas, proba con ese ejemplo que te deje
y si funciona y todo es por los parametros que se le pasan a los otros programas me imagino que no hacen lo que esperas o
no hacen nada

API ANSI:

Dim MYANSI() As Byte
MYANSI = StrConv("C:/windows/system32/calc.exe", vbFromUnicode)
Invoke "SHELL32", "ShellExecuteA", 0, 0, VarPtr(MYANSI(0)), 0, 0, 0