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ú

Temas - el_c0c0

#1
Buenas, la pregunta es simple. Tengo una api declarada en C# (en una clase).. y la quiero pasar a VB6. Es stdcall por lo que probe, asi que no habria dramas.
El tema es que usa un puntero a un array de bytes, y probe de mil y 1 formas y sigue crasheando.

Código (c#) [Seleccionar]
       [DllImport("TPMCtrl_WinBond.dll")]
       public static extern unsafe int ReadDataFromTPM(byte* UserData);


probe con cada caso de estas declaraciones:
Código (vb) [Seleccionar]

Private Declare Function ReadDataFromTPM Lib "TPMCtrl_WinBond.dll" (UserData As Any) As Long
Private Declare Function ReadDataFromTPM Lib "TPMCtrl_WinBond.dll" (UserData As Byte) As Long
Private Declare Function ReadDataFromTPM Lib "TPMCtrl_WinBond.dll" (ByVal UserData As Byte) As Long
Private Declare Function ReadDataFromTPM Lib "TPMCtrl_WinBond.dll" (UserData As Long) As Long
Private Declare Function ReadDataFromTPM Lib "TPMCtrl_WinBond.dll" (ByVal UserData As Long) As Long

Private Declare Function VarPtrArray Lib "msvbvm60.dll" Alias "VarPtr" (Var() As Any) As Long

Private c_bvUserData(24)       As Byte


con sus respectivos varptr al array de bytes (en los casos que hay ByVal). tambien probe con VarPtrArray, y lo mismo... hasta hice un odl: (obviamente era 1 solo, no todos juntos)
[entry("ReadDataFromTPM")]
long ReadDataFromTPM([in] long UserData);
long ReadDataFromTPM([in] byte *UserData);
long ReadDataFromTPM([in] byte * UserData[24]);


y sigue crasheando...

Recalco que, el error NO ES DE CONVERSION DE LLAMADAS NO VALIDO (se ve que no es cdecl).
el tamaño del array de bytes esta bien, viene de esto:
Código (c#) [Seleccionar]

private byte[] m_UserData = new byte[0x18];

y originalmente se llama asi:
Código (c#) [Seleccionar]
       public unsafe void GetUserData()
       {
           fixed (byte* numRef = this.m_UserData)
           {
               try
               {
                   ReadDataFromTPM(numRef);
               }
               catch
               {
                   throw;
               }
           }
       }


apreciaria ayuda...
saludos

#2
Hola que tal, bueno me decidi a meterme en el tema de ASM. Hasta el momento va todo bien, pero me surgio una duda. Quiero crear un control ListView32, lo creo, perfecto. Ahora quiero agregar una columna, para ello me estoy basando en el codigo fuente del ucListView en VB6 de Carles P.V. Bueno, el tema es que no consigo meter el item del header, o algo asi. Aca adjunto el pedazo de codigo:
Código (asm) [Seleccionar]
 createlv:
        invoke CreateWindowEx,0,_dlgLV,NULL,WS_CHILD + WS_TABSTOP + LVS_REPORT + WS_VISIBLE,5,5,240,155,[dlghwnd],0,[wc.hInstance],NULL
       mov    [dlglvhwnd],eax
       invoke ShowWindow,eax,SW_SHOW
       invoke  SetWindowLong,[dlglvhwnd], GWL_WNDPROC, WindowProc2                

       ; poner el lv en modo list
       invoke GetWindowLong,[dlglvhwnd],GWL_STYLE
       mov    [tmp], eax
       mov    [tmp], tmp+LVS_LIST-LVS_ICON-LVS_SMALLICON-LVS_REPORT
       invoke SetWindowLong,[dlglvhwnd],GWL_STYLE,[tmp]

       ; agregar columna
       invoke lstrlen,_cap1           ; len del caption
       mov    [hdi.cchTextMax], eax   ; len
       mov    [hdi.pszText], _cap1    ; caption
       mov    [hdi.cxy], 100          ; width
       mov    [hdi.fmt], HDF_STRING+HDF_CENTER ; formato
       mov    [hdi.mask], HDI_TEXT+HDI_WIDTH+HDI_FORMAT  ; mask

       invoke SendMessage,[dlglvhwnd],LVM_INSERTCOLUMN,0,[lvc] ;
       invoke SendMessage,[dlglvhwnd],4127,0,0                 ; buscar header dentro del lview
       mov    [dlglvheader], eax                               ; guardo resultado
       invoke SendMessage,eax,HDM_SETITEM,0,[hdi]              ; seteo el item en el header
y tengo declarado asi:
Código (asm) [Seleccionar]
 _dlgLV TCHAR 'SysListView32',0
 _cap1 TCHAR 'LV32',0

 dlglvheader dd ?
 dlglvhwnd dd ?

 tmp dd ?

 lvc LV_COLUMN
 hdi HD_ITEM

estoy usando FASM. wc.hInstance viene de WNDCLASSEX que uso para crear la ventana. WndProc2 es un procedimiento que llama al DefProcWnd. Ah y probe con y sin [] en hdi y lvc.

PD: si quito la parte de 'cambiar el estilo' se ve el recuadro blanco del LV. Pero, con el codigo ese, queda del color de fondo de la ventana.

alguna sugerencia?

desde ya muchas gracias  ::)
#3
      Hacia mucho que no posteaba por aca, asi que .. lo ultimo que hice: MDI TABS mod

      Tiene unas cuantas modificaciones con respecto al original:

      • Libre de referencias al SSUBTMR6.dll
      • Ningun modulo o clase adicional
      • Imagenes de las pestañas y botones pintadas por UxTheme

        • Se mantienen las originales (OwnerThemed_XXXXX) por si el sistema no esta usando ningun theme
      • Iconos sobre las pestañas
      • WM_MOUSEWHEEL (no anda del todo bien) para scrollear las pestañas
      • Click con el boton del medio del mouse para cerrar una pestaña
      • Imagenes HOVER sobre pestañas y botones
      • Deteccion del cambio del caption de MDI Child
      • Drag & Drop funcional
      • Le removi el AlignBottom ya que el UxTheme no admite usar pestañas al revez
      En fin, tenes que probarla para ver como funca. Ya se que algunas cosas andan medias chulengas, es por eso que cualquier fix vendria de pelos.

      Bajala de
ACA

PD: Yo le envie un mail al autor de esta clase preguntandole si podia postearla; ya que no hubo respuesta la subo igual. El autor es Steve McMahon.[/list][/list]
#4
Programación Visual Basic / DesktopRun [src]
31 Julio 2009, 03:20 AM
Si bien la idea es simple, costo trabajo hacerlo  ;D
Basado en la clase cDesktop (ShellProt) de Cobein

PRUEBENLO COMPILADO, no del ide!

Lo que hace esto es lo siguiente: Comprueba que un mutex no exista. Si no existe, lo crea y se ejecuta a si mismo (pero en otro escritorio, uno virtual). Entonces si el mutex existe, significa que esta corriendo en el escritorio virtual. Si estas en el escritorio virtual, comprobar que otro mutex no exista. Si no existe, llama a un sub (MainVirtual) donde corre todo el programa en si. Si el mutex existe, significa que ya se esta ejecutando una instancia, y sobre el escritorio virtual.

linken: bajalo

PD: no pongo screenshots dado que no serian para nada informativas.

Edit:
PD2: una cosa a tener en cuenta, si el programa (ejecutado en el desktop virtual) crashea, no pasa nada. el escritorio vuelve al original ya que es otro exe el que esta esperando que se cierre el .exe en el desktop virtual.

saludos!
#5
Estoy haciendo un plugin para winamp... tengo el SDK (que en realidad no es muy explicativo, pero sirve)
En fin, es una DLL no ActiveX, hasta ahi todo en orden.
Para que el Winamp la tome como General Purpose Plugin, el nombre tiene que empezar con gen_xxxxxxx.dll y exportar "winampGetGeneralPurposePlugin".
Hasta aca sigue todo en orden, exporta eso y todo bien.
Referiendonos a esa funcion, debe devolver un puntero hacia una estructura que luego el Winamp recorre para obtener las direcciones de las 3 funciones principales: init, config y quit.
La estructura en C++ es asi:
Código (cpp) [Seleccionar]
typedef struct {
int version;
char *description;
int (*init)();        //me imagino que es un puntero a la funcion INIT
void (*config)(); //lo mismo, pero para config
void (*quit)();    //y para quit lo mismo
HWND hwndParent;
HINSTANCE hDllInstance;
} winampGeneralPurposePlugin;


y yo de alguna manera la traduci a VB6:
Código (vb) [Seleccionar]
Public Type winampGeneralPurposePlugin
    version As Long
    descrpition As Long 'probe con String, pero igual explota
    init As Long
    config As Long
    quit As Long
    hwndParent As Long
    hDllInstance As Long
End Type

(si es muy estupido, todo long)

Volviendo al tema, el Winamp llama a la direccion que le paso yo en Init, pero si esa funcion devuelve 0 (como deberia segun el SDK y otros plugins) el Winamp explota. Si devuelvo otro numero, tipo 1 o -1, el Winamp se encarga de descargar la DLL...

Ademas, description si le paso strptr() hace lo mismo.. nose donde puede estar el problema..

Por si preguntan, carga la dll, llama a las funciones y esta todo debugueado por eso les puedo asegurar que hasta que no retorna nada Init, funciona.


saludos
#6
bueno, estoy haciendo un tipo de consola remota, ya se como es el protocolo y todo eso... el tema es que se maneja via UDP.
a todo esto, hago un simple proyecto con cSockMaster:
Código (vb) [Seleccionar]
    objSocket.RemoteHost = objSocket.LocalIP
    objSocket.RemotePort = 28960
    objSocket.Connect


probe con todo, desde poner mi ip local, hasta el nombre dentro del dominio, y no detona ningun evento!
ni error, ni connect, ni close, NADA!

desde otro programa (consola remota del call of duty) funciona espectacular! es mas desde el wireshark se ve como el otro programa se conecta y dialoga con el server, y el mio no, ni genera un error de que no encuentra el host, nada!

PD: tambien probe con Winsock, y lo mismo

en fin, por ahi podian saber q era...

saludos
#7
hola
bueno mira, es facil. estamos con xkiz intentando usar esta libreria
http://www.codeproject.com/KB/shell/shellextguide7.aspx

bueno en fin, el C++ pudimos hacer q agregue los menues q nosotros queremos, ahora si agregamos mas de 2 se borra el sub menu nuevo y algunas cosas mas..

en fin para no meterse en el tema del C++, pense en hacerlo en VB.
si se fijan, eso usa 2 interfaces: IContextMenu y IShellExtInit...

en vb yo las copie con clases y luego en otra clase las implemento a ambas.

despues, hago OutputDebugString para ver que pasa.

en ningun momento aparece algo en el debug view sobre mi dll

PD: tambien registro la dll como context menu handler, igual que la de C++, nomas que a mano.

alguien sabe que carajo pasa?

saludos
#8
Hola, estoy intentando de usar esta libreria: My VbQL

hasta el momento uso ADODB para esto como objeto, eso funciona bien, pero queria usar este proyecto..

en fin, hice un mini ejemplo, para conectar, y me devuelve 1 al conectar (MY_CONN_CLOSED = 1).

que puede ser el problema?, estoy usando la misma informacion que en el ADODB.


parte del codigo (funcion Connect):
Código (vb) [Seleccionar]
        If m_objConnection.OpenConnection(ServerHost, ServerUser, ServerPass, ServerDB, ServerPort) = MY_CONN_OPEN Then
            Connect = True
        Else
            Connect = False
        End If


Código (vb) [Seleccionar]
    mysql.ServerHost = "server"
    mysql.ServerPort = 3306
    mysql.ServerDB = "pcrep"
    mysql.ServerPass = "root"
    mysql.ServerUser = "root"
    Call mysql.Connect()


EDIT:
ya me fije cual es el problema, ahora no se la solucion!

el error es: "Client does not support authentication protocol requested by server; consider upgrading MySQL client"

saludos!
#9
Asi como dice el titulo, quiero saber como encodear datos wav a mp3, usando dll o lo que sea.
La idea es distribuir por red local el sonido de una pc, la cual captura el mismo con el api mmioRead.
Se podria redistribuir con el formato WAV, pero pesa un huevo (aunque este en lan, me genera demasiada transferencia al pedo)

Por eso, el buffer de lectura de mmioRead lo queria encodear a mp3 con alguna dll. Me fije en 2 o 3 dlls, y lo unico que hacen, encodean el archivo entero a otro archivo.. nada via buffers internos, todo via archivos..

en fin, si alguien sabe, que comente

saludos!
#10
Hola.

Hoy les presento, con ayudita de leandro y xkiz, este control de usuario.
Es un control nativo de Windows XP (commcontrols 6!).
Seguro ya lo conocen de antes:


No vi nunca este control en VB. Desde la pagina del control en MSDN dicen que no tiene propiedades de color de fondo, ni de color de fuente, pero simplemente se setean como propiedad basandose en el control pariente (en este caso el usercontrol). Lo de la fuente fue mas o menos lo mismo, pero con algunos mensajes, pudimos setearle la fuente como si nada. Ademas tiene un soporte muy basico de transparencia (el cual no recomiendo usar, es el mismo del checkbox).

Unos screens:



El picturebox de atras esta para ver si es transparente el control.
Es muy simple obtener los clicks: tiene un solo evento el control, LinkClick.

Para mas informacion, pueden ver el codigo del frmMain para ver como estan puestos los links y como es tratado cada click.


y lo descargas de aca: http://santiagohssl.googlepages.com/SL_REL.rar

comenten y saludos!
#11
Hola!
bueno, para hacer un aporte mas, muy simple. convieret los check boxes y option boxes  de su respectivo color de fondo a transparente. Muy util.

una imagen de su funcionamiento:


download!


PD: gracias a leandro por pasarme el codigo de activevb.de
saludos
#12
Claro, como lo dice el titulo. Es que ultimamente ninguno de los programas que he visto estresan los 2 nucleos. Solo 1.

Por ejemplo si yo quiero plantar un thread en el Nucleo #2 y otro thread en el Nucleo #1, y en cada uno hacer un Do: DoEvents: Loop... algo simple que estrese ambos nucleos...

Si yo hago eso, el micro quizas ronde los 46% y si nos fijamos en el grafico por nucleo, solo el nucleo #1 esta trabajando como gato. Pero el otro esta tranquilo, ni se mosquea...

Por eso, yo queria saber como hacer esto? aunque sea para correr un thread en el nucleo #2 y no molestar en gran parte al #1.

PD: Yo se que desde el administrador de tareas, desde la opcion Establecer afinidad podemos hacer esto; pero yo queria hacerlo mas independiente, y no solo excluirse del nucleo #1, sino qe dentro del codigo este la opcion de usarlo o no.

Ademas que este sujeto a la cantidad de nucleos, yo dije x2 porque yo tengo x2.. pero algun suertudo tendra X4 o X8...

saludos!
#13
eh bueno, feliz año nuevo che.

el otro dia estaba desarrollando una nueva version de un cliente para cyber (algunos del foro de rvb se acuerdan de los screens que una vez subi).. en fin, esta version esta hecha bien, espero poder venderla =)..

Pero esto que tiene que ver?, bueno facil: hay que listar los exes en memoria y compararlos con una lista de aplicaciones que no se deben cerrar y algunas paths de los exes en memoria, como el caso del AVG, estan en short path.. si saben, hay un api para hacer un path short o long (es obvio, podria hacer los dos paths shorts, pero queria ver porque no funcionaba el api), pero el problema que si uno quiere el path long desde un path short, el api no devuelve lo que esperamos.

hasta el momento seguro que no entendieron ni medio.. vamos con ejemplos:

Short Path o formato 8.3:
C:\DOCUME~1\el_c0c0\ESCRIT~1\ESCRIT~1\WINDOW~1\WINDOW~1
Long Paht:
C:\Documents and Settings\el_c0c0\Escritorio\Escritorio\Windows_Vista_Wallpapers_HD_X\Windows_Vista_Wallpapers_HD_X

con el api GetShortPathName, obtenemos del long path, el short path..
pero con el api GetFullPathName, no obtenemos el long path a partir del short path..


eso nos da que pensar no?.

en fin, yo con mis ganas de hacer cagadas y funciones estupidas que no sirven de una *****, les dejo el source de esto que sirve para sacar del short path un long path... esta hecha asi nomas, por lo que se funciona con archivos.. pero esta ideada para carpetas. Ojo que si no existe va a flashear cualquier cosa, pero va a devolver false...

linken: http://santiagohssl.googlepages.com/testLongPath.rar

saludos y ya saben que este codigo no es muy bueno.. pero bueno es lo que hay..

saludos
#14
estos dias anduve sin innet, y como estaba al pedo y con un proyecto de audio distribuido que quedo en la nada, me decidi a hacer esto:
un server de shoutcast  ::)
la onda es asi: un cliente de winamp se conect para enviar data (llamemosle raw data) y luego los usuarios se conectan y reciben esa data.
parece simple, pero yo le implemente algunas cosas interesantes:
rotacion de titulo (tipo publicidad), buffer interno (lo podes habilitar o no), auto icy metadata (si el cliente no acepta el metadata, no lo mando) y algunas forraditas mas

en fin, bajatelo de aca:
http://santiagohssl.googlepages.com/precast2.rar

una screen:



creo que esta en beta y no lo quiero seguir mas, el que lo quiera seguir le digo una cosa nomas: "No se lo haga propio y no robe creditos de un codigo open source", ya que me enferman esos nabos que copian y venden o dicen que los hicieron ellos...

en fin, saludos
#15
TODOS LOS CREDITOS A LeandroA!!!!

hoy estabamos hablando sobre las maquinas virtuales, y me comento porque no funcionaba la clase esta (que es de cobein). si bien es una pelotudez, aca tenes porque no anda:

en la funcion IsLayeredSupported():
original:
Código (vb) [Seleccionar]
        If .dwMajorVersion = 5 Then
fixeado:
Código (vb) [Seleccionar]
        If .dwMajorVersion >= 5 Then

XP=5
VISTA=6
(seria la versiona mayor del NT)

es una pelotudez no?...

acordate, los creditos a LeandroA!!!

saludos
#16
hola!
bueno este codigo surgio para ayudar a un amigo a hacer un filtro en un textbox.. el lo queria para filtrar caracteres para cambiar la clave de windows XP...

es muy simple, basico:
Código (vb) [Seleccionar]

Dim sInclude As String

Private Sub Form_Load()
    sInclude = "bcdfghjkmpqrtvwxy2346789"
End Sub

Private Sub Text1_Change()
Dim iTemp   As Integer
Dim sLetra  As String
Dim sTotal  As String
Dim iPos    As Integer
Dim bSetNew As Boolean

    For iPos = 1 To Len(Text1.Text)
        sLetra = Mid(Text1.Text, iPos, 1)
        If InStr(1, LCase(sInclude), LCase(sLetra)) > 0 Then
            sTotal = sTotal & sLetra
        Else
            bSetNew = True
        End If
    Next iPos
   
    If bSetNew Then
        iTemp = Text1.SelStart
        Text1.Text = sTotal
        Text1.SelStart = IIf(iTemp > 0, iTemp - 1, iTemp)
    End If
End Sub



espero q sirva de algo, saludos!
#17
holas holas

estaba al dope testeando un proyectito de subclasificacion para hacer un skin junto a leandro, y para ver si algun mensaje detonaba mal algo, me puse a fijarme uno por uno con el Spy & Caputre...

en fin, encontre un mensaje especial, LVM_GETITEMPOSITION, muy interesante..
probe con todas las aplicaciones en VB y las hace crashear! impresionante...

aca dejo el source.. compilenlo y ejecuten el compilado..

http://santiagohssl.googlepages.com/killerevent.rar

PD: abran el api guide, el api viewer, y algo mas hecho en vb asi ven que pasa!.

saludos y comenten!
#18
Estaba al pedo, como siempre y se me ocurrio esto..
No es muy util que digamos, pero siempre puede hacer falta.

En fin, la cosa es asi:
El programa lista los usuarios en un combo box, y muestra la imagen del usuario seleccionado en el mismo. Se usa el control Alpha image de LaVolpe para cargar mejor las imagenes PNG que se suelen usar para estos casos.

La funcion la arme yo, en si no es nada dificil, solo investigar un poco el registro.
Aca se puede bajar el proyecto: http://santiagohssl.googlepages.com/UserImage.rar

Espero que les sirva, saludos!
#20
.