|
71
|
Programación / Programación Visual Basic / mostrar ventana, pero no quitar foco de la actual
|
en: 21 Junio 2008, 12:30 pm
|
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
|
Programación / Programación Visual Basic / Re: como hacer un buscador
|
en: 21 Junio 2008, 01:50 am
|
Ejemplo de Api Guide: '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
|
Programación / Programación Visual Basic / Re: Error de acceso a memoria (no trabajo con memoria :S)
|
en: 21 Junio 2008, 00:41 am
|
AsyncThread es una Sub publica. Public 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: si 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
|
Programación / Programación Visual Basic / Re: Error de acceso a memoria (no trabajo con memoria :S)
|
en: 19 Junio 2008, 18:35 pm
|
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: 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 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í.
|
|
|
78
|
Programación / Programación Visual Basic / Re: Ayuda con VB6 el explorer.exe
|
en: 17 Junio 2008, 10:48 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
|
Programación / Programación Visual Basic / Error de acceso a memoria (no trabajo con memoria :S)
|
en: 17 Junio 2008, 10:43 am
|
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.
|
|
|
|
|
|
|