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 - x64core

#631
ASM / Re: GUI y eventos
26 Marzo 2013, 16:01 PM
Cita de: mDrinky en 24 Marzo 2013, 15:38 PM
@x64Core ya se que Beep no le da el foco  :rolleyes:. Lo que busco es saber cuando se ha clicado en el ListView y que item se a seleccionado.

un saludo.

Lee el codigo de arriba
#632
Cita de: ignorantev1.1 en 26 Marzo 2013, 07:05 AM
Misma burra, nomás que revolcada:

Voy a finalizar la aplicación (la que pone los hooks), antes de que finalice doy por terminado el hook del mouse:

Código (vb) [Seleccionar]
UnhookWindowsHookEx(msHook)

Después que "finaliza" la aplicación, la función que procesa el hook sigue funcionando lo cual provoca que se "frezee" Windows (hasta no cerrar el IDE de visual basic) o se cierra el IDE por si sólo. (porque no es todavía una aplicación, lo estoy corriendo del IDE). Para probar "mi teoría" puse "debug.print "Hola, sigo funcionando aún despues de hacer unhook ;)", y sí, el mensaje sigue apareciendo aún después de detener el programa:

¿Saben de alguna forma de terminar con el hook o manejarlo de tal manera que no suceda ésto?

Perdonen, saludos y gracias.

En que procedimiento remueves el hook? Y de que forma estas terminando?
Asegurate que esta pasando sobre la funcion que remueve el hook y el retorno de la función. Si estas en presionando el boton parar del IDE, ese es el problema.
#633
Cita de: Black Master en 23 Marzo 2013, 18:52 PM
Bueno, lo que puedes hacer es que el programa lea los procesos y si entre ellos se encuentra el administrador de tareas que lo cierre  ;-)
Eso realmente no previene que una aplicación sea terminada por Taskmgr


Cita de: arley12 en 12 Enero 2013, 23:37 PM
Hola me gustaria saber si alguien me puede dar el code o apis para que la aplicacion de visual basic 6 que tengo no se pueda cerrar por medio del administrador de tareas y que al intentarlo le salga
"operaion no se pudo completar"
acesso denegado

muchas gracias aquien me colabore

Lo que estas buscando es Hooking?
#634
Cita de: ignorantev1.1 en 21 Marzo 2013, 23:12 PM
A ver:

Yo uso:

Código (vb) [Seleccionar]

Private function MSProc(byval nCode as long, byval wParam as long, byval lParam as long) as long
if wParam = WM_LBUTTONDOWN then
'ETC, ETC
end if


¿Cómo va el tuyo?

¡Saludos y gracias por tu respuesta!



    If wParam = WM_LBUTTONDOWN Then
        If GetAsyncKeyState(MK_RBUTTON) Then
            Debug.Print "ok"
        End If

el mensaje fue WM_LBUTTONDOWN luego comprueba directamente el estado del otro boton del mouse, asi que
debes detectar ambos WM_LBUTTONDOWN  y WM_RBUTTONDOWN y luego MK_RBUTTON y MK_LBUTTON.
#635
Cita de: ignorantev1.1 en 21 Marzo 2013, 21:53 PM
Buenas, pues estoy haciendo una aplicación de la que ocupo capturar clicks del mouse en otra aplicación, casi todo bien, ya que pretendo realizar la captura cuando ambos botones del mouse sean presionados al mismo tiempo, algo así como "WM_LBUTTONDOWN & WM_RBUTTONDOWN", pero no me funciona. ¿Alguna idea?

Saludos y gracias.

capturar ambos WM_LBUTTONDOWN, WM_RBUTTONDOWN, luego comprobar por MK_RBUTTON y MK_LBUTTON ambos esten presionados también.
#636
Cita de: Arkhin en 21 Marzo 2013, 15:30 PM
Te agradezco muchisimo por el codigo, aunque lamentablemente tengo errores al momento de compilar, estoy usando Dev C++. En cada string que has insertado en el codigo, responde a un error: Cannot Convert const char[8] to const WCHAR* in assignment.
Deberia primero declararlas como string, asignarlas, y luego llamarlas?

No uso Dev-Cpp Talvez podrias arreglarlo usando las cadenas de esta manera:

L"STRING"

No estoy seguro, o utilizalas como comunmente lo haces.
Recomiendo VC por cierto.


#638
Cita de: Arkhin en 21 Marzo 2013, 04:29 AM
Realmente admiro tus conocimientos pero lamentablemente los mios no llegan a tanto. Hasta lo que entendi lo que estas haciendo ahi es leer en la memoria el adress 005D88D0. Lo que quiero no es leer el adress, sino hacer un call a ese adress. La app es una app en vb6, y ese adress es donde comienza el clickeo de un IMAGE. Lo que quiero hacer yo ese que ese image se "clickee", llamando al adress donde empieza el clickeo del image. Ya probe metiendo un "call adress" dentro de timers en la aplicacion, y funciona perfectamente, es lo mismo que hacer click en el image, lo que quiero hacer es llamarlo yo mismo desde una app asi controlo cuando lo llamo y cuando no. Gracias por sus ayudas

Pequeña dll, simplemente cambia el valor de la constante FUNCTION_ADDRESS a la dirección de la función ( Programas en VB 6.0 por defecto no tienen tabla de relocalización asi que puedes escribirla directamente ) , cambia el tipo de definición de la funcion e  inyectala en el proceso y listo cuando presiones el boton llamara a la función.


typedef INT (WINAPI* MyPointer)(INT,INT);

#define FUNCTION_ADDRESS 0x005D88D0


HINSTANCE hInstance;
HWND hWMain;
HWND hWButton;
MyPointer FunctionTarget = (MyPointer)FUNCTION_ADDRESS;

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
   INT mRet;

   switch (message)
{
   case WM_COMMAND:
       /* call Function */
       mRet = FunctionTarget(10,10);
        break;
   case WM_DESTROY:
       PostQuitMessage(0);
       break;
   default:
       return DefWindowProc(hWnd, message, wParam, lParam);
}

return 0;
}

ATOM MyRegisterClass(HINSTANCE hInstance)
{
WNDCLASSEXW    wcex;

wcex.cbSize = sizeof(WNDCLASSEX);

wcex.style        = CS_HREDRAW | CS_VREDRAW;
wcex.lpfnWndProc = WndProc;
wcex.cbClsExtra     = 0;
wcex.cbWndExtra     = 0;
wcex.hInstance = hInstance;
wcex.hIcon        = 0;
wcex.hCursor = 0;
wcex.hbrBackground = (HBRUSH)COLOR_BTNSHADOW;
wcex.lpszMenuName = 0;
wcex.lpszClassName = TEXT("PROJECT");
wcex.hIconSm = 0;

return RegisterClassExW(&wcex);
}

INT MessageLoop()
{
   MSG msg;

   while(GetMessageW(&msg, NULL, 0, 0) > 0)
   {
       TranslateMessage(&msg);
       DispatchMessageW(&msg);
   }
   return 0;
}


INT InitDialog(HINSTANCE hInst)
{
   if(hInst)
       hInstance = hInst;
   else
       hInstance = GetModuleHandleW(NULL);

   if(!MyRegisterClass(hInstance))
       return FALSE;

   hWMain = CreateWindowW(TEXT("PROJECT"),L"PROJECT",DS_3DLOOK | DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_CAPTION | WS_VISIBLE | WS_POPUP | WS_SYSMENU,
                           CW_USEDEFAULT, CW_USEDEFAULT,200,200,NULL,NULL,hInstance,NULL);
   if(!hWMain)
       return FALSE;

   hWButton = CreateWindowW(TEXT("BUTTON"),TEXT("CALL ADDRESS"),WS_CHILDWINDOW | WS_VISIBLE,
                           10,10,150,150,hWMain,NULL,hInstance,NULL);
   if(!hWButton)
       return FALSE;


   ShowWindow(hWMain, SW_SHOW);
   UpdateWindow(hWMain);
   MessageLoop();

   return FALSE;
}

BOOL WINAPI DllMain(HINSTANCE hinstDLL,DWORD fdwReason,LPVOID lpReserved )
{
   switch( fdwReason )
   {
   case DLL_PROCESS_ATTACH:
       CloseHandle(CreateThread(NULL,NULL,(LPTHREAD_START_ROUTINE)InitDialog,hinstDLL,0,NULL));
       break;
   case DLL_THREAD_DETACH:
       break;
   case DLL_PROCESS_DETACH:
       break;
   }
   return TRUE;
}
#639
Cita de: Arkhin en 21 Marzo 2013, 03:20 AM
Lo que quiero es escribir un call 005D88D0 en c, o en vb.
Mi idea es estar inyectado en la aplicacion mediante una dll, y hacer llamadas a adress dentro de esa aplicación. Al estar inyectado, puedo hacer las llamadas directamente ya que estoy dentro de los adress de la app.
Lo que no se hacer, es como escribir ese "call 005D88D0" dentro de C o VB, preferentemente vb ya que es el lenguaje con el cual me manejo mejor, pero me han dicho que no se puede, solo en C pueden hacerse llamadas a codigos en ASM.

Como ya he dicho lo primero es analizar la función a la que quieres llamar y luego para comodidad puedes hacerte un tipo definido de
un puntero a una función, por ejemplo:

typedef INT (__stdcall MyPointer*)(INT,INT)

este es un puntero a una funcion con __stdcall como convencion de llamada, dos parametros de tipo INT, y como retorno se espera un
INT tambíen. luego declarar una variable de tipo "MyPointer" y asignarle la dirección de la función y llamar:

MyPointer Function = 0x005D88D0;
INT RetOfFunction = Function(0x10,0x20);

en VB lo más rapido que se me ocurre seria hacer un array de bytes con instrucciones como estas:

PUSH param
PUSH Param
CALL Address


Copiar esas instrucciones en memoria virtual reservada ( VirtualAlloc ), establecer los valores ( parametros, direccion de la funcion ), y luego llamar a
la dirección de la memoria virtual reservada.  si DEP esta desactivado también puedes usar CreateThread, CallWindowProc. Apuesto a que existen muchas
maneras más.

#640
Cita de: Arkhin en 21 Marzo 2013, 01:56 AM
Hola, gracias por las respuestas. Lo que no se hacer es las llamadas a un call en asm, desde C. No se como codearlas, como hacerlas.

En este foro ya dan una base de una inyección de DLL:
http://www.daniweb.com/software-development/cpp/threads/181713/dll-injection-cc

Pienso basarme en eso para hacer las llamadas cuando la dll se inyecta.

Otra cosa, habria alguna minima posibilidad de hacerlo en visual basic con ThunderVB? (Es un plugin el cual permite ejecutar codigo en C y en ASM dentro de VB6)

Un "Call" en ASM, desde C?
Quieres decir llamar una función escrita en ASM y llamarla desde C?
De todas maneras ya he dicho lo que necesitas, luego que tienes la función objetivo, simplemente la llamas.
Yo mucho antes programaba en VB 6.0, estoy seguro que no necesitas de ese plugin.