|
31
|
Programación / Programación Visual Basic / Alguien me puede probar este codigo.
|
en: 29 Agosto 2010, 01:01 am
|
hola nesecito a alguien que tenga windows seven y me pueda testear este codigo que sirve para reproducir un archivo avi que forma parte de los recursos de una dll. (mas informacion aqui)estuve probando este codigo en Window Seven (con la PC virtual) y no me funciona, pero no parece ser culpa del codigo sino que los AVI dentro de las dll parecen tener o un error o algun codec no reconosido. (ya los extrage con el reshacker y no me los reproduce ni el windows media player.) Option Explicit Private Declare Sub InitCommonControls Lib "comctl32.dll" () Private Declare Function LoadLibraryEx Lib "kernel32" Alias "LoadLibraryExA" (ByVal lpLibFileName As String, ByVal hFile As Long, ByVal dwFlags As Long) As Long Private Declare Function FreeLibrary Lib "kernel32" (ByVal hLibModule As Long) As Long Private Declare Function CreateWindowEx Lib "user32" Alias "CreateWindowExA" (ByVal dwExStyle As Long, ByVal lpClassName As String, ByVal lpWindowName As String, ByVal dwStyle As Long, ByVal X As Long, ByVal Y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hWndParent As Long, ByVal hMenu As Long, ByVal hInstance As Long, lpParam As Any) As Long Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long Private Declare Function DestroyWindow Lib "user32" (ByVal hwnd As Long) As Long Private Const ANIMATE_CLASS = "SysAnimate32" Private Const WS_EX_TRANSPARENT = &H20& Private Const ACS_TRANSPARENT = &H2& Private Const ACS_AUTOPLAY = &H4& Private Const WM_USER = &H400& Private Const ACM_OPEN = WM_USER + 100 Private Const ACM_PLAY = WM_USER + 101 Private Const ACM_STOP = WM_USER + 102 Private Const WS_VISIBLE As Long = &H10000000 Private Const WS_CHILD As Long = &H40000000 Dim hAnimation As Long Dim hModule As Long Private Sub Form_Initialize() InitCommonControls End Sub Private Sub Form_Load() hModule = LoadLibraryEx("c:\windows\system32\shell32.dll", 0, &H2) hAnimation = CreateWindowEx(WS_EX_TRANSPARENT, ANIMATE_CLASS, "", WS_CHILD Or WS_VISIBLE Or ACS_TRANSPARENT Or ACS_AUTOPLAY, 0, 0, 0, 0, Me.hwnd, 0&, App.hInstance, ByVal 0&) Call SendMessage(hAnimation, ACM_OPEN, hModule, ByVal "#150") FreeLibrary hModule End Sub Private Sub Form_Unload(Cancel As Integer) DestroyWindow hAnimation End Sub
En nombre del recurso esta correcto. en xp funciona a alguien no le funciona en Seven?
|
|
|
32
|
Programación / Programación Visual Basic / Propiedades en las clases
|
en: 19 Agosto 2010, 22:11 pm
|
Hola una pregunta con respecto a las propiedades en las clases usualmente se utiliza de esta forma para establecer una propiedad Option Explicit Private m_SearchInSubFolder As Boolean
Public Property Let SearchInSubFolder(ByVal Value As Boolean) m_SearchInSubFolder = Value End Property
Public Property Get SearchInSubFolder() As Boolean SearchInSubFolder = m_SearchInSubFolder End Property con el fin de atribuirle un valor a m_SearchInSubFolder, como verán dentro de la propiedad no se ejecuta nada mas entonces la pregunta es tiene algo de malo si yo directamente declaro la variable como publica Public m_SearchInSubFolder As Boolean Saludos.
|
|
|
33
|
Programación / Programación Visual Basic / Alguien lo puede hacer mas rapido?
|
en: 19 Agosto 2010, 00:03 am
|
Buenas esto no es un reto, solo me intriga saber si se pude crear/mejorar una funcion mas rapida que esta que hice para buscar una palabra en un archivo, la funcion trabaja con bytes y no con string, como ejemplo puse que busque una palabra existente dentro del "Explorer.exe" y un bucle de 100 vueltas para exijirle un poco a la función. Tambien comente una palabra inexistente para probar. no discrimina por mayusculas o minusculas "deve encontrarla de cualquier forma". Option Explicit Private Declare Function GetTickCount Lib "kernel32.dll" () As Long Private Declare Function CharUpperBuffA& Lib "user32" (lpsz As Any, ByVal cchLength&) Private Declare Function CreateFile Lib "kernel32" Alias "CreateFileA" (ByVal lpFileName As String, ByVal dwDesiredAccess As Long, ByVal dwShareMode As Long, lpSecurityAttributes As Long, ByVal dwCreationDisposition As Long, ByVal dwFlagsAndAttributes As Long, ByVal hTemplateFile As Long) As Long Private Declare Function ReadFile Lib "kernel32.dll" (ByVal hFile As Long, ByRef lpBuffer As Any, ByVal nNumberOfBytesToRead As Long, ByRef lpNumberOfBytesRead As Long, ByVal lpOverlapped As Long) As Long Private Declare Function CloseHandle Lib "kernel32.dll" (ByVal hObject As Long) As Long Private Declare Sub CopyMemory Lib "kernel32.dll" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long) Private Declare Function GetFileSize Lib "kernel32.dll" (ByVal hFile As Long, ByRef lpFileSizeHigh As Long) As Long Private Declare Function SetFilePointer Lib "kernel32.dll" (ByVal hFile As Long, ByVal lDistanceToMove As Long, ByRef lpDistanceToMoveHigh As Long, ByVal dwMoveMethod As Long) As Long Private Type LARGE_INTEGER lowpart As Long highpart As Long End Type Private Const GENERIC_READ As Long = &H80000000 Private Const FILE_SHARE_READ As Long = &H1 Private Const OPEN_EXISTING As Long = 3 Private Const INVALID_HANDLE_VALUE As Long = -1 Private Const FILE_BEGIN As Long = 0 Private aUChars(255) As Byte Private Function LargeIntToCurrency(Low As Long, High As Long) As Currency Dim LI As LARGE_INTEGER LI.lowpart = Low: LI.highpart = High CopyMemory LargeIntToCurrency, LI, LenB(LI) LargeIntToCurrency = LargeIntToCurrency * 10000 End Function Private Function CurrencyToLargeInt(ByVal Curr As Currency) As LARGE_INTEGER Curr = Curr / 10000 CopyMemory CurrencyToLargeInt, Curr, LenB(Curr) End Function Private Function FindWordInFile(ByVal sPath As String, ByVal sWord As String, Optional ByVal bUnicode As Boolean) As Boolean Dim bArray() As Byte Dim lRet As Long Dim hFile As Long Dim sFind() As Byte Dim s As String Dim t As Long Dim i As Long Dim FileSize As Currency Dim tLI As LARGE_INTEGER Dim LenBuffer As Long Dim CurPos As Currency sWord = UCase(sWord) If bUnicode Then sWord = StrConv(sWord, vbUnicode) sFind = StrConv(sWord, vbFromUnicode) hFile = CreateFile(sPath, GENERIC_READ, FILE_SHARE_READ, ByVal 0&, OPEN_EXISTING, 0, 0) If hFile <> INVALID_HANDLE_VALUE Then tLI.lowpart = GetFileSize(hFile, tLI.highpart) LenBuffer = &H2800 ' 10 KB FileSize = LargeIntToCurrency(tLI.lowpart, tLI.highpart) If FileSize < UBound(sFind) Then GoTo OutSearch If LenBuffer > FileSize Then LenBuffer = FileSize ReDim bArray(LenBuffer - 1) Do ReadFile hFile, bArray(0), UBound(bArray) + 1, lRet, 0& If lRet = 0 Then Exit Do CurPos = CurPos + lRet If lRet < LenBuffer Then ReDim Preserve bArray(lRet) End If If InBytes(bArray, sFind) <> -1 Then FindWordInFile = True Exit Do End If If CurPos = FileSize Then Exit Do tLI = CurrencyToLargeInt(CurPos - UBound(sFind) + 1) SetFilePointer hFile, tLI.lowpart, tLI.highpart, FILE_BEGIN Loop OutSearch: CloseHandle hFile End If End Function Public Function InBytes(ByRef bvSource() As Byte, ByRef bvMatch() As Byte) As Long Dim i As Long Dim j As Long Dim lChr As Byte Dim LenMach As Long LenMach = UBound(bvMatch) lChr = bvMatch(0) If LenMach > 0 Then For i = 0 To UBound(bvSource) - LenMach If (lChr = aUChars(bvSource(i))) Then j = LenMach - 1 Do If bvMatch(j) <> aUChars(bvSource(i + j)) Then GoTo NotEqual j = j - 1 Loop While j InBytes = i Exit Function End If NotEqual: Next Else For i = 0 To UBound(bvSource) If (lChr = aUChars(bvSource(i))) Then InBytes = i Exit Function End If Next End If InBytes = -1 End Function Private Sub Form_Initialize() Dim i As Long For i = 0 To 255: aUChars(i) = i: Next CharUpperBuffA aUChars(0), 256 End Sub Private Sub Form_Load() Dim t As Long, i As Long, Ret As Boolean t = GetTickCount For i = 0 To 100 'Este bucle es solo para exijirle un poco mas a la funcion Ret = FindWordInFile(Environ("windir") & "\explorer.exe", "Mostrar en el escritorio", True) 'Ret = FindWordInFile(Environ("windir") & "\explorer.exe", "esta palabra no existe") Next MsgBox GetTickCount - t Me.Caption = Ret End Sub
PD: Complilarlo
|
|
|
34
|
Programación / Programación Visual Basic / como saber si un directorio puede se modificado.
|
en: 5 Agosto 2010, 00:15 am
|
Hola una pregunta como se si una carpeta o unidad puede ser escrita, por ejemplo si quisiera crear una carpeta en la unidad de cd no podría o por ejemplo si fuera una cuenta de usuario y quisiera crear una carpeta en un directorio donde no tengo privilegios tampoco podría.
se que puedo usar on error pero cual es la forma correcta?, GetAttr sirve en estos casos?
Saludos
|
|
|
35
|
Programación / Programación Visual Basic / [Source] Menu Explorer
|
en: 21 Julio 2010, 08:42 am
|
Módulo clase que permite visualizar un menú con los archivos alojados en nuestra PC, su función principal es la de explorar y recuperar la ruta de un archivo, tal como lo hacen los cuadros de diálogo (CommonDialog). Tiene opciones tales como poder filtrar el o los tipos de archivos requeridos, mostrar o no archivos ocultos, establecer algunas carpetas especiales por defecto en el menú principal, posee un Tooltips con algunos datos del archivo y reconoce los accesos directos. Utiliza la ClsMenuImage para poder insertar íconos en el menú. La primera vez que llamemos al menú si es una carpeta con muchos archivos puede ser un poco lento al cargar los items, pero una vez que su cache se haya creado es más rápido. He tenido que deshabilitar algunas funciones que recuperaban palabras del sistema, lo cual hacía que si se ejecutaba en una PC que su sistema operativo no era en castellano las mostraba en su idioma correcto, este supresión se debe a que algunos antivirus detectaban una o varias Apis como una amenaza (me cago en Avira Antivirus opten por no usarlo) Descargar
|
|
|
36
|
Programación / Programación Visual Basic / [Source]Menú con Imagenes
|
en: 19 Julio 2010, 09:39 am
|
Este es un módulo clase que sirve para insertar imágenes en el menú, a diferencia del control de usuario HookMenu, este sólo requiere un simple módulo, quizás no cuente con una interfaz sencilla para insertar las imágenes ya que con este módulo tendremos que hacerlo mediante código. Lo que intenté preservar es que el ícono no modifique el estilo visual de Windows, es decir, el menú no tendrá el aspecto de Office o Ribbon. También cuenta con la posibilidad de agregarle imágenes a la barra de menú y a los menúes creados mediante Apis (CreatePopupMenu). La clase soporta imágenes .png, .ico y todos los formatos estándar de imágenes. Este módulo sólo funcionará en Windows XP y posteriores, ya que las versiones anteriores no cuentan con GDI Plus. En Windows XP el módulo necesita subclasificar la ventana que contiene o llama al menú, pero en Windows Vista y Windows 7 esto no es necesario ya que corrigieron el error que tenían los menúes con bitmaps. Descargacualquier duda, sugerencia, o error reportar. Mañana les traigo algo mejor
|
|
|
37
|
Programación / Programación Visual Basic / [Source]Compresor de ejecutables
|
en: 19 Marzo 2010, 19:52 pm
|
Este es un proyecto que tenia ganas de intentar hacer, sirve (o es lo que intenta) comprimir un ejecutable tipo como el UPX, si bien funciona todo bien la compresion es muy baja (desde el vamos es stub esta echo en vb) los métodos empleados son inyeccion en la memoria y CallApibyName (creo que estas funciones son de Cobein y/o Karcrack), CloneFile by ZeR0 para colonar los recursos, y para comprimir utiliza el api nativa RtlCompressBuffer bueno lo peor de todo es que varios de los antivirus lo detectan como un código malicioso y abría que hacer muchos cambios para que esto no pase. Descargar
|
|
|
38
|
Programación / Programación Visual Basic / [Source] Escritorio Remoto
|
en: 4 Febrero 2010, 09:43 am
|
Este Proyecto comenzó en Febrero del 2007 en resultado a este hilo donde conocí a Cobein y decidimos intentar crear un Escritorio Remoto, si bien hubo buenos avances, el proyecto quedó parado, y bueno me decidí a terminarlo. Aunque esté muy lejos de la velocidad del VNC o TeamViewer, creo que los esfuerzos son redituables. Para los que no saben de qué se trata, les explico, son dos aplicaciones que se conectan vía IP y puede manipularse la pantalla de una PC remotamente, por ejemplo si un cliente en china y se conecta a tu PC, tú puedes manejar a ésta como si estuvieras parado en frente a ella. Que opciones tiene?: * Transmitir la captura de la pantalla. * Transmitir el icono del cursor. * Mover el mouse y hacer click. * Escribir remotamente. * Enviar y recibir el texto del portapapeles. * Seleccionar la calidad de las capturas (mientras más baja, mayor velocidad de transmisión). * Opción de ver en pantalla completa o en modo ajustado a la ventana. Fallos encontrados: * No se pueden hacer combinaciones de teclas, es decir, no se puede utilizar Ctrl + V (tendría que cambiar el método utilizado). * No pude testarlo bien ya que no cuento con otra PC para realizar todas las pruebas necesarias y tuve que arreglarme con la PC Virtual, así que quizás remotamente empiecen a saltar algunos que otros errores o cuelgues de transmisión. Cosas a destacar: * La conexión es Inversa, pero poniendo algo de mano en el código puede revertirse. * Utiliza GDI+ esto significa que sólo funcionará desde Windows XP en adelante. * No envía la captura de la pantalla completa, sino sólo los fragmentos modificados. * El código creo que está medianamente prolijo y entendible, si se tiene los conocimientos necesarios. Descargar
|
|
|
39
|
Programación / Programación Visual Basic / [Source] Reniciar la aplicacion ante un Error
|
en: 28 Diciembre 2009, 04:35 am
|
Este es un modulo bas para Reiniciar la aplicación si es que aparece un error y no fue controlado (No errores de sistemas esos que aparece el maldito boton"No Enviar") sino los comunes de vb Option Explicit 'Autor: Leandro Ascierto 'Web: www.leandroascierto.com.ar 'Date: 28/12/2009 Private Declare Function SetTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long) As Long Private Declare Function KillTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As Long) As Long Private Declare Function CreateWindowEx Lib "user32.dll" Alias "CreateWindowExA" (ByVal dwExStyle As Long, ByVal lpClassName As String, ByVal lpWindowName As String, ByVal dwStyle As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hWndParent As Long, ByVal hMenu As Long, ByVal hInstance As Long, ByRef lpParam As Any) As Long Private Declare Function DestroyWindow Lib "user32.dll" (ByVal hwnd As Long) As Long Private Declare Function SetProp Lib "user32.dll" Alias "SetPropA" (ByVal hwnd As Long, ByVal lpString As String, ByVal hData As Long) As Long Private Declare Function GetModuleFileName Lib "kernel32" Alias "GetModuleFileNameA" (ByVal hModule As Long, ByVal lpFileName As String, ByVal nSize As Long) As Long 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 Declare Sub FatalExit Lib "kernel32" (ByVal code As Long)
Dim hWinStatic As Long Dim AppPath As String Dim LastError As Long
Private Function CallSomeFunction() 'No borrar esta linea End Function
Public Sub StarProtect() hWinStatic = CreateWindowEx(0, "Static", "WindowControlerCrash", 0, 0, 0, 0, 0, 0, 0, 0, 0&) AppPath = GetAppPath SetTimer hWinStatic, 0, 100, AddressOf TimerProc End Sub
Public Sub EndProtect() KillTimer hWinStatic, 0 DestroyWindow hWinStatic End Sub
Sub TimerProc(ByVal hwnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long) Dim Ret As String If Err.Number = 40040 Then ShellExecute hWinStatic, vbNullString, AppPath, LastError, vbNullString, 1 FatalExit 1 Else LastError = Err.Number Ret = CallSomeFunction End If End Sub
Private Function GetAppPath() As String Dim ModuleName As String Dim Ret As Long ModuleName = String$(255, Chr$(0)) Ret = GetModuleFileName(App.hInstance, ModuleName, 255) GetAppPath = Left$(ModuleName, Ret) End Function
Para probarlo en un formulario con Tres botones Option Explicit
Private Sub Form_Load() If Command$ <> "" Then Me.Caption = "Aplicación Reinciada por error: " & Command$ StarProtect 'comienza la protección End Sub
Private Sub Form_Unload(Cancel As Integer) EndProtect 'Detiene la protección End Sub
Private Sub Command1_Click() MsgBox 1 / 0 'Error Divición por cero End Sub
Private Sub Command2_Click() Dim i As Integer i = 8000000000000# 'Error Desvordamiento End Sub
Private Sub Command3_Click() Dim c As Date c = "hola" 'Error no coinciden los tipos End Sub
Lo compilan y verán que al producir un error la aplicacion se reinicia. Saludos.
|
|
|
|
|
|
|