elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: ¿Eres nuevo? ¿Tienes dudas acerca del funcionamiento de la comunidad? Lee las Reglas Generales


  Mostrar Mensajes
Páginas: 1 2 3 4 [5] 6 7 8 9 10 11 12 13 14
41  Programación / Programación Visual Basic / Re: [DUDA] paso por valor o por referencia (byval/ byref) en: 11 Julio 2011, 17:57 pm
Citar
ByVal y Byref esta explicado de alguna manera ante los procesos y funciones personalisados (en la liga y todos han ido directo a este punto mas no al real problema de este hilo, las apis.), es decir, las que creamos o las de vb6 mas no a las APIS, asi que aqui te dejo una explicacion ante esto.:

aja ahi esta el punto, porque si el pasar ByVal a una api fuera nomas para "evitar que la funcion sobreescriba la variable pasada" pues en algunos casos donde iria ByVal supongo que cualquiera de las 2 formas seria valida no?, pues un caso:
suponiendo que quiero usar MessageBox

Código
  1.  
  2. Declare Function MessageBox Lib "user32" Alias "MessageBoxA" (ByVal hwnd As Long, ByVal lpText As String, ByVal lpCaption As String, ByVal wType As Long) As Long
  3.  
  4.  
  5.  

y en el parametro wType (icono a mostrar) NO me interesa si sobreescribe o no la variable asi que lo paso como ByRef:

Código
  1. Option Explicit
  2.  
  3. private Declare Function MessageBox Lib "user32" Alias "MessageBoxA" (ByVal hwnd As Long, ByVal lpText As String, ByVal lpCaption As String, ByRef wType As Long) As Long
  4.  
  5. Private Sub Command1_Click()
  6.    Dim Icono As Long
  7.    Icono = 64
  8.    Call MessageBox(Form1.hwnd, "Ejemplo", "xD", Icono)
  9.    MsgBox Icono 'muestra el valor a ver si sobreescribio la variable
  10. End Sub
  11.  

pues al ejecutar no sale el "MessageBox", y el msgbox muestra "64" , pues en este caso la API no sobreescribio la variable y tampoco mostro el mensaje, este tipo de cosas es que generan dudas, supongo que aqui tambien tienne que ver en si la API  porque no sabemos como tratara o que hace con los datos o referencia que le pasamos.
42  Programación / Programación Visual Basic / Re: ¿És Posible? en: 10 Julio 2011, 22:40 pm
hay la funcion API GetPixel esa es la que debes usar.
43  Programación / Programación Visual Basic / Re: [DUDA] paso por valor o por referencia (byval/ byref) en: 10 Julio 2011, 22:32 pm

 :huh:  
Citar
weno al final cual es el que vale? el ByVal/ByRef indicado en la declaracion de funcion o el ByVal/ByRef usado al momento de llamar a esa funcion?

lo que dijo Nakp esta claro.

veo muchos codes que pasan parametros de manera distinta a como lo declaran, ejm: los codes que puse arriba (aqui la duda).

probe a ver q sale quitando los ByVal que tiene el FindWindow:

Código:
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (lpClassName As String, ByVal lpWindowName As String) As Long

y pues no logra encontrar la ventana.
weno ahi nomas dejalo ps.
44  Programación / Programación Visual Basic / Re: Controlar programa externo en: 10 Julio 2011, 21:47 pm
cuando no puedas resolver algo con el vb6 debes averiguar sobre las funciones de windows ( APIs de windows):

Código
  1.  
  2.  
  3. 'FindWindow: Busca una ventana por su classname o por su windowname(barra de titulo)
  4.  
  5.  
  6. Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
  7.  
  8.  
  9. 'parametros:
  10.  
  11. 'lpClassName: nombre de la clase
  12.  
  13. 'windowname: barra de titulo
  14.  
  15.  
  16.  
  17.  
  18.  
  19. 'EnumChildWindows: Enumera las ventanas hijas (command, textbox,etc) de una ventana padre.
  20.  
  21.  
  22. Declare Function EnumChildWindows Lib "user32" (ByVal hWndParent As Long, ByVal lpEnumFunc As Long, ByVal lParam As Long) As Long
  23.  
  24.  
  25. 'parametros:
  26.  
  27. 'hwndParent: hwnd ventana padre
  28.  
  29. 'lpEnumFunc: direccion de la funcion que recibira los hwnd de las ventanas hijas, por cada ventana hija
  30.  
  31.             encontrada esta llamara a la funcion pasada
  32.  
  33.  
  34.  
  35.  
  36. 'SendMessage: Envia un mensaje a un hwnd (los mensajes son un monton)
  37.  
  38.  
  39. Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
  40.  
  41.  
  42. 'hwnd: hwnd donde se envia el mensaje
  43.  
  44. 'wMsg: mensaje que se va enviar (en este caso WM_GETTEXT)
  45.  
  46. 'wParam: creo que iria el tamaño de la cadena inicializada
  47.  
  48. 'lParam: variable donde se guardara el texto obtenido


Form1:

Código
  1. 'agregar estos controles
  2. '1 label con el caption "Titulo Ventana"
  3. '1 textbox (text1) al lado derecho del label
  4. '1 command (command1) debajo del textbox
  5. '1 listbox (list1) al lado derecho del command1
  6.  
  7. Option Explicit
  8.  
  9.  
  10. Private Sub Command1_Click()
  11.    Dim hwnd As Long, Titulo As String
  12.    Titulo = Text1.Text
  13.    'busca la ventana pasandole la barra de titulo
  14.    ' si lo encuentra devolvera el HWND de la ventana ,sino 0
  15.    hwnd = FindWindow(vbNullString, Titulo)
  16.    If hwnd <> 0 Then
  17.        List1.Clear
  18.        Contador = 0
  19.        'enumera las ventanas hijas pasandole el HWND de la ventana padre y la direccion de la funcion
  20.        'que va recibir los HWND de las ventanas hijas (AddressOf EnumChildProc)
  21.        Call EnumChildWindows(hwnd, AddressOf EnumChildProc, ByVal 0&)
  22.    Else
  23.        MsgBox "No se encontro la ventana", vbCritical, ""
  24.    End If
  25. End Sub
  26.  
  27. Private Sub Form_Load()
  28.    Command1.Caption = "Enumerar Ventanas Hijas"
  29.    Label1.Caption = "Titulo ventana: "
  30. End Sub
  31.  

en un module bas: module1

Código
  1. Option Explicit
  2.  
  3. Declare Function EnumChildWindows Lib "user32" (ByVal hWndParent As Long, ByVal lpEnumFunc As Long, ByVal lParam As Long) As Long
  4.  
  5. Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
  6.  
  7. Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
  8.  
  9.  
  10. Public Const WM_GETTEXT = &HD
  11.  
  12. Public Contador As Long
  13.  
  14. 'funcion encargada de recibir cada HWND de las ventanas hijas
  15.  
  16. Public Function EnumChildProc(ByVal hwnd As Long, ByVal lParam As Long) As Long
  17.    Dim Texto As String, Pos As Long
  18.    'crea un espacios de 1000 caracteres para que almacene ahi el texto obtenido
  19.    Texto = Space(1000)
  20.    'aki obtiene el texto del HWND de la ventana hija y lo almacena en variable "Texto"
  21.    Call SendMessage(hwnd, WM_GETTEXT, 1000, ByVal Texto)
  22.    'busca el caracter nulo (este indica el fin de la cadena)
  23.    Pos = InStr(1, Texto, Chr(0))
  24.    'si lo encuentra coge los caracteres excepto el nulo
  25.    If Pos > 0 Then Texto = Left(Texto, Pos - 1)
  26.    'contador para saber el orden de la ventana hija
  27.    Contador = Contador + 1
  28.    'agrega el HWND y el texto de la ventana hija recibida
  29.    Form1.List1.AddItem Contador & "- hWnd Hija: " & hwnd & " / Texto: " & Texto
  30.    EnumChildProc = 1
  31. End Function
  32.  
  33.  


con este codigo sabras los HWND de las ventanas hijas y sabras el orden que tiene la ventana de la q kieres obtener el texto, con ese ejempo puedes hacer otro  codigo para que tome el dato que kieres de la ventana hijas que kieres.
 
para mas info busca info sobre las apis de windows en VB6.
45  Programación / Programación Visual Basic / [DUDA] paso por valor o por referencia (byval/ byref) en: 10 Julio 2011, 02:32 am
en varios codigos he visto que al momento de llamar a una funcion los parametros se pasan de manera distinta que la de su declaracion, si un `parametros esta como byref al llamar lo pasan como byval:


Código
  1. 'en el parametro buffer esta sin nada (por ahi lei que si no se indica es ByRef por defecto)
  2.  
  3.  
  4. Declare Function ReadProcessMemory Lib "kernel32" (ByVal hProcess As Long, ByVal lpBaseAddress As Any, lpBuffer As Any, ByVal nSize As Long, lpNumberOfBytesWritten As Long) As Long
  5.  
  6.  
  7.  


Código
  1. 'pasa el parametro buffer como byval
  2. Dim Buffer As String
  3. Buffer = Space(5000)
  4. Call ReadProcessMemory(hProcess, Direccion, ByVal Buffer, Len(Buffer), BytesLeidos)

otra api:

Código
  1. 'ambas apis son por valor
  2. Private Declare Function FindWindow Lib "user32" _
  3.    Alias "FindWindowA" ( _
  4.        ByVal lpClassName As String, _
  5.        ByVal lpWindowName As String) As Long

Código
  1. 'pasa el windowname - titulo sin nada (por defecto seria ByRef)
  2.    Dim Titulo As String
  3.    Titulo = "Google"
  4.    Call FindWindow(vbNullString, Titulo)

weno al final cual es el que vale? el ByVal/ByRef indicado en la declaracion de funcion o el ByVal/ByRef usado al momento de llamar a esa funcion?
si pudieran explicarme mejor esto del ByVal/ByRef se los agradeceria .

me lei :
http://foro.elhacker.net/programacion_vb/memoria_en_vb-t114052.0.html
no me kedo muy claro.
46  Programación / Programación General / Re: ¿hay alguna web que contenga las APIS de windows para delphi? en: 9 Julio 2011, 20:22 pm
bien, gracias.
47  Programación / Programación Visual Basic / Re: No encuentro por ningún lado como hacer un builder en: 9 Julio 2011, 20:19 pm
creo que eso del builder es algo relacionado con "stub" que es meter un .exe dentro de otro .exe :

http://foro.elhacker.net/programacion_visual_basic/solucionado_server_builder_vb6-t325338.0.html
48  Programación / Programación General / Re: ¿hay alguna web que contenga las APIS de windows para delphi? en: 9 Julio 2011, 00:45 am
claro que busque deberas, los prototipos de apis que se encuentran a monton son los de c++ y visual basic 6.0, mira... la sintaxis de las funciones no es problema sino el como incluir otras apis que no estan incluidas en delphi y sus tipos de datos que manejan porque lo que en C++ es tipo de dato SOCKET en vb6 es long y en delphi vi que es TSocket y ahi es el problemita en que algunos tipos varian, me podrias decir como incluir una funcion api que no esta en delphi? por ejemplo CreateFile no esta directa para usar como si esta MessageBox, o si tuviera que usar alguna funcion de otra dll que no sea de windows como lo haria? en vb6 es sencillo:

Código:
private declare function ShowWindowlib "user32" (byval hwnd as long,byval cmdshow as long) as long

Código:
private declare function MiFuncion lib "C:\mi Libreria.dll" (parametros as tipo) as tipo

como se haria esto en delphi?


edit:
acabo de ver windows.pas contiene una gran cantidad de funciones y sus librerias y es bastante extenso, podrias dar un ejemplo de como agregar una funcion "X" de una libreria "X" para usarla, con ya eso seria suficiente , ah y que delphi me recomiendas yo recien que inicio en este lenguaje.
49  Programación / Programación General / ¿hay alguna web que contenga las APIS de windows para delphi? en: 8 Julio 2011, 19:00 pm
hola estoy practicando delphi (el entorno : delphi 7) y pues queria centrarme en el manejo de las apis de windows pero hay poquisima informacion sobre esto , no se si quiizas alguien conosca alguna web/documento donde las expongan (el prototipo algun ejemplo, como declararlas) algo asi como la web y programa "apiguide" de visual basic 6.0 que tiene ufff como 900 apis.
50  Seguridad Informática / Análisis y Diseño de Malware / Re: ¿como obtener privilegios en windows 7? en: 8 Julio 2011, 00:27 am
no ps pero con programacion como se haria?
q apis deberia investigar?
Páginas: 1 2 3 4 [5] 6 7 8 9 10 11 12 13 14
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines