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

#71
me gustaria saber como lograr mostrar un form qu tengo cargado (Load FormName) pero que esta con la propiedad visible en false (esto lo se hacer), pero sin quitarle el foco a la ventana actual (esto es lo que no se).

se me ocurre que deberia "fijarme" cual es la ventana activa y al mostrar la que yo quiero devolverle el foco con sendmensage o algo asi.... pero no se como hacerlo, si alguien me pudiera dar una mano estaria agradecido.

desde ya, muchas gracias.
#72
Ejemplo de Api Guide:

Código (vb) [Seleccionar]
'Create a form with a command button (command1), a list box (list1)
'and four text boxes (text1, text2, text3 and text4).
'Type in the first textbox a startingpath like c:\
'and in the second textbox you put a pattern like *.* or *.txt

Private Declare Function FindFirstFile Lib "kernel32" Alias "FindFirstFileA" (ByVal lpFileName As String, lpFindFileData As WIN32_FIND_DATA) As Long
Private Declare Function FindNextFile Lib "kernel32" Alias "FindNextFileA" (ByVal hFindFile As Long, lpFindFileData As WIN32_FIND_DATA) As Long
Private Declare Function GetFileAttributes Lib "kernel32" Alias "GetFileAttributesA" (ByVal lpFileName As String) As Long
Private Declare Function FindClose Lib "kernel32" (ByVal hFindFile As Long) As Long

Const MAX_PATH = 260
Const MAXDWORD = &HFFFF
Const INVALID_HANDLE_VALUE = -1
Const FILE_ATTRIBUTE_ARCHIVE = &H20
Const FILE_ATTRIBUTE_DIRECTORY = &H10
Const FILE_ATTRIBUTE_HIDDEN = &H2
Const FILE_ATTRIBUTE_NORMAL = &H80
Const FILE_ATTRIBUTE_READONLY = &H1
Const FILE_ATTRIBUTE_SYSTEM = &H4
Const FILE_ATTRIBUTE_TEMPORARY = &H100

Private Type FILETIME
    dwLowDateTime As Long
    dwHighDateTime As Long
End Type

Private Type WIN32_FIND_DATA
    dwFileAttributes As Long
    ftCreationTime As FILETIME
    ftLastAccessTime As FILETIME
    ftLastWriteTime As FILETIME
    nFileSizeHigh As Long
    nFileSizeLow As Long
    dwReserved0 As Long
    dwReserved1 As Long
    cFileName As String * MAX_PATH
    cAlternate As String * 14
End Type
Function StripNulls(OriginalStr As String) As String
    If (InStr(OriginalStr, Chr(0)) > 0) Then
        OriginalStr = Left(OriginalStr, InStr(OriginalStr, Chr(0)) - 1)
    End If
    StripNulls = OriginalStr
End Function

Function FindFilesAPI(path As String, SearchStr As String, FileCount As Integer, DirCount As Integer)
    'KPD-Team 1999
    'E-Mail: KPDTeam@Allapi.net
    'URL: http://www.allapi.net/

    Dim FileName As String ' Walking filename variable...
    Dim DirName As String ' SubDirectory Name
    Dim dirNames() As String ' Buffer for directory name entries
    Dim nDir As Integer ' Number of directories in this path
    Dim i As Integer ' For-loop counter...
    Dim hSearch As Long ' Search Handle
    Dim WFD As WIN32_FIND_DATA
    Dim Cont As Integer
    If Right(path, 1) <> "\" Then path = path & "\"
    ' Search for subdirectories.
    nDir = 0
    ReDim dirNames(nDir)
    Cont = True
    hSearch = FindFirstFile(path & "*", WFD)
    If hSearch <> INVALID_HANDLE_VALUE Then
        Do While Cont
        DirName = StripNulls(WFD.cFileName)
        ' Ignore the current and encompassing directories.
        If (DirName <> ".") And (DirName <> "..") Then
            ' Check for directory with bitwise comparison.
            If GetFileAttributes(path & DirName) And FILE_ATTRIBUTE_DIRECTORY Then
                dirNames(nDir) = DirName
                DirCount = DirCount + 1
                nDir = nDir + 1
                ReDim Preserve dirNames(nDir)
            End If
        End If
        Cont = FindNextFile(hSearch, WFD) 'Get next subdirectory.
        Loop
        Cont = FindClose(hSearch)
    End If
    ' Walk through this directory and sum file sizes.
    hSearch = FindFirstFile(path & SearchStr, WFD)
    Cont = True
    If hSearch <> INVALID_HANDLE_VALUE Then
        While Cont
            FileName = StripNulls(WFD.cFileName)
            If (FileName <> ".") And (FileName <> "..") Then
                FindFilesAPI = FindFilesAPI + (WFD.nFileSizeHigh * MAXDWORD) + WFD.nFileSizeLow
                FileCount = FileCount + 1
                List1.AddItem path & FileName
            End If
            Cont = FindNextFile(hSearch, WFD) ' Get next file
        Wend
        Cont = FindClose(hSearch)
    End If
    ' If there are sub-directories...
    If nDir > 0 Then
        ' Recursively walk into them...
        For i = 0 To nDir - 1
            FindFilesAPI = FindFilesAPI + FindFilesAPI(path & dirNames(i) & "\", SearchStr, FileCount, DirCount)
        Next i
    End If
End Function
Sub Command1_Click()
    Dim SearchPath As String, FindStr As String
    Dim FileSize As Long
    Dim NumFiles As Integer, NumDirs As Integer
    Screen.MousePointer = vbHourglass
    List1.Clear
    SearchPath = Text1.Text
    FindStr = Text2.Text
    FileSize = FindFilesAPI(SearchPath, FindStr, NumFiles, NumDirs)
    Text3.Text = NumFiles & " Files found in " & NumDirs + 1 & " Directories"
    Text4.Text = "Size of files found under " & SearchPath & " = " & Format(FileSize, "#,###,###,##0") & " Bytes"
    Screen.MousePointer = vbDefault
End Sub
#73
AsyncThread es una Sub publica.
CitarPublic Sub AsyncThread()


Lo que me resulta llamativo es que el programa crea 2 threads, y solo este me da problemas, ahroa estoy mirando en el codigo a ver si hay algo diferente entre ambos.


EDIT:

Citarsi subieras un poco de code no tendríamos que andar con estas.

es una simple creación de un thread que llama a una sub que usa una api la cual ya he dicho, cualqueira puede reproducir el error con un poco  ganas.... no se porque la insistencia con el code ¬¬


estableciendo hthreadid en 5 da el mismo error.


cobein, como es eso de usar IBindStatusCallback  ???

ah, y un OT para cobein jeje.... has hecho algo sobre el tema de ocultar un exe dentro de otro e inyectarlo desde un byte array????.... me interesa mucho jeje

EDIT2: He usado como base para la creación del thread un ejemplo del apiguide

EDIT3: Dato importante, el error hasta ahora solo lo he visto en Windows XP con SP2, probe en Win98 SE y no arroja errores (raro, porque Win98 es muy "quisquilloso" con la memoria).

Dentro de unas horas probate con XP SP3, y Vista Ultimate (sin SP)

EDIT4: al parcer el error solo ocurre cuando se llama por primera vezal thread desde el form-load, luego no ocurre cuando es llamado por un timr que ejecuta el thread cada x minutos. el error no sale siempre, solo aveces cuando se ejecuta la aplicacion. Si no se acepta (ni cancela) el error del thread la aplicacion continua funcionando hasta qeu se cierre el mnsaje del error que genero el thread.... algo raro.
#74
a ver... no intento acceder a ninguna posicion de memoria, ahi esta el problema.

simplement creo un thread que dscarga un archivo usando api, y arroja ese error (no siempre, esto es lo más curioso).

el thread es creado de la unica forma posible, no hay buena o mala, solo hay una:
Código (vb) [Seleccionar]
        hThread = CreateThread(ByVal 0&, ByVal 0&, AddressOf AsyncThread, ByVal 0&, ByVal 0&, hThreadID)


donde AsyncThread es la funcion qu descarga el archivo en cuestion usando la API URLDownloadToFile


Código (vb) [Seleccionar]
Private Declare Function URLDownloadToFile Lib "urlmon" Alias _
"URLDownloadToFileA" (ByVal pCaller As Long, ByVal szURL As String, ByVal _
szFileName As String, ByVal dwReserved As Long, ByVal lpfnCB As Long) As Long



es por esto que posteo preguntando, porque no hay forma de que yo este tratandod e acceder a memoria, mucho menos  una posicion invalida (0x0 es una posicion del sistema)... asi qeu no cmoprendo, este error me tiene algo loco.... no dberia estar allí.
#75
Programación Visual Basic / Re: IDE or EXE
17 Junio 2008, 23:27 PM
yo miro si el proceso padre es vb6.exe, lueg probaer alguna de las que ofreces.

Gracias.
#76
amigo, a lo que skullsp se referia es a algo mas simple y quizas te suene antipatico, pero es asi:

Este foro es de vb, si quires discutir sobre asm ve a otro foro. aqui solo vb.


Atte: El usuario más antipatico de la red
#77
si, seguramente lo sea, pero hayq eu "avisarle" a windows que esa clave ha cambiado, por eso es mejor usar apis que modifiquen eso puntualmente y no el registro.
#78
Cita de: skullsp en 17 Junio 2008, 05:53 AM
hace lo siguiente....

hace un loop con los archivos del escritorio y dentro un if que vaya verificando si el atributo es oculto o normal, entonces si es oculto lo conveierte a normal y sino alrevez...

se entiende??

sl2

eso no seria bueno, si tiene 10 ocultos y 30 visibles, los pone visibles a todos, y luego... chau, seran 40 ocultos, no 10 y 30.....


investiga sobre las apis del shell de windows y el panel de control
#79
Recibo el siguiente mensaje (aveces, no siempre) cuando ejecuto mi aplicacion (hecha en vb6 obviamente):




He localizado el posible origen del problema, pero aun no me explico porque sucede ni como solucionarlo.

La aplicacion crea un thread llamando a una funcion determinada que a su vez llama a la API URLDownloadToFile, descarga un archivo, analiza el contnido del archvo y ejecuta x accion segun el resultado del analisis.

En teoria no deberia corromper la memoria ni arrojar ningun error. He implementado una variable publica que es usada para prevenir la creacion de dos thread simultaneos (dado que el id del thread se almacena en una variable y si se ejecutara un segundo thread sobreescribiria el id dl primero y "se perderia" su id, no permitiendo matarlo luego)

Al finalizar la aplicacion el thread es matado en caso ed qeu siga en ejecucion. Pero repito, el problema paerce darse al crearse el thread por primera vez (cuando se ejecuta la aplicacion se lanza tl thread y luego se hace ciclicamente con un timer, comprueba informacion disponible en un sitio web).

Notese que el error no es siemper, sino aveces, quizas sea bajo ciertas condiciones del entorno que no suelen darse, pero cuando se dan... chau aplicacion. Otra cosa curiosa es que la aplicacion sigue funcionando bien, si no se acepta el msgbox de error la app sigue corriendo bien, solo se cuelga el thread.

¿Alguien sabe a que se debe y/o como solucionarlo?.

PD: me es necesario usar el thread para no "colgar" la aplicacion por unos instantes (aveces variso segundos dependiendod e la conexion), ddo qu la api URLDownloadToFile "se cuelga" hasta terminar la descarga, utilizando un thread la aplicacion sigue sin notarse ningun cuelgue. No uso winsock por una cuestion de compatibilidad con los SO y simpleza en la aplicacion (podria usar winsock por api pro es mucho codigo para un simple checkeo, y el inet control no me termina de convencer).


Desde ya muchas gracias.
#80
nadie sabe??????