Holas.
Estoy usando Inet para descargar un archivo y este es mi código:
Dim Mx() As Byte
Mx() = intCon.OpenURL(file6.Text, 1)
Open Environ("ProgramFiles") & "\Activision\Call of Duty 2\" & "wallhack.ini" For Binary Access Write As #1
Put #1, , Mx() 'file is saving
Close #1 ' #1 : file is closing
Lo que me gustaría es que el archivo se crease oculto (con el atributo "Oculto", como si fuesemos a Propiedades). ¿Cómo lo puedo hacer? ¿Tengo que modificar el "Write As #1" por otro número?
Gracias.
No, el 1 solo es el canal. Lo mejor es q lo guardes y una vez guardado modifikes sus propiedades. Si no te kieres liar mucho utiliza las funciones del MS-DOS...
con la api SetAtributtes (creo que la escribi bien..xD) puedes darle en teoria artributos aun archivo.
como dejarlo oculto..de lectura...y demaces..pero no se asta que punto esa api haga lo qye realmente dicen que hace..
Gracias a los dos. Estoy Googleando pero solo encuentro ejemplos de VB.NET =/
una vez que lo bajas y lo cierras (todo desde tu codigo claro)
pones dicha api..SetFileAtributtes (ahora si la escribi bien)
solo busca la definiciones en google para VB 6 y la sintaxis correcta y ya..
es mas o menos asi
SetFileAttributes("nombredearchivo.exe",File_ATTRIBUTE_NORMAL,......etc...
algo asi...
ojo es solo un ejemplo de como puede ser
SetFileAttributes segun la pai guide:
CitarDeclare Function SetFileAttributes Lib "kernel32" Alias "SetFileAttributesA" (ByVal lpFileName As String, ByVal dwFileAttributes As Long) As Long
Parameters:
· lpFileName
Points to a string that specifies the name of the file whose attributes are to be set.
Windows 95: This string must not exceed MAX_PATH characters.
Windows NT: There is a default string size limit for paths of MAX_PATH characters. This limit is related to how the SetFileAttributes function parses paths. An application can transcend this limit and send in paths longer than MAX_PATH characters by calling the wide (W) version of SetFileAttributes and prepending "\\?\" to the path. The "\\?\" tells the function to turn off path parsing; it lets paths longer than MAX_PATH be used with SetFileAttributesW. This also works with UNC names. The "\\?\" is ignored as part of the path. For example, "\\?\C:\myworld\private" is seen as "C:\myworld\private", and "\\?\UNC\wow\hotstuff\coolapps" is seen as "\\wow\hotstuff\coolapps".
· dwFileAttributes
Specifies the file attributes to set for the file. This parameter can be a combination of the following values. However, all other values override FILE_ATTRIBUTE_NORMAL.
FILE_ATTRIBUTE_ARCHIVE
The file is an archive file. Applications use this value to mark files for backup or removal.
FILE_ATTRIBUTE_HIDDEN
The file is hidden. It is not included in an ordinary directory listing.
FILE_ATTRIBUTE_NORMAL
The file has no other attributes set. This value is valid only if used alone.
FILE_ATTRIBUTE_OFFLINE
The data of the file is not immediately available. Indicates that the file data has been physically moved to offline storage.
FILE_ATTRIBUTE_READONLY
The file is read-only. Applications can read the file but cannot write to it or delete it.
FILE_ATTRIBUTE_SYSTEM
The file is part of the operating system or is used exclusively by it.
FILE_ATTRIBUTE_TEMPORARY
The file is being used for temporary storage. File systems attempt to keep all of the data in memory for quicker access rather than flushing the data back to mass storage. A temporary file should be deleted by the application as soon as it is no longer needed.
Return Values:
If the function succeeds, the return value is nonzero.
If the function fails, the return value is zero. To get extended error information, call GetLastError.
Y el ejemplo:
Const MOVEFILE_REPLACE_EXISTING = &H1
Const FILE_ATTRIBUTE_TEMPORARY = &H100
Const FILE_BEGIN = 0
Const FILE_SHARE_READ = &H1
Const FILE_SHARE_WRITE = &H2
Const CREATE_NEW = 1
Const OPEN_EXISTING = 3
Const GENERIC_READ = &H80000000
Const GENERIC_WRITE = &H40000000
Private Declare Function SetVolumeLabel Lib "kernel32" Alias "SetVolumeLabelA" (ByVal lpRootPathName As String, ByVal lpVolumeName As String) As Long
Private Declare Function WriteFile Lib "kernel32" (ByVal hFile As Long, lpBuffer As Any, ByVal nNumberOfBytesToWrite As Long, lpNumberOfBytesWritten As Long, ByVal lpOverlapped As Any) As Long
Private Declare Function ReadFile Lib "kernel32" (ByVal hFile As Long, lpBuffer As Any, ByVal nNumberOfBytesToRead As Long, lpNumberOfBytesRead As Long, ByVal lpOverlapped As Any) As Long
Private Declare Function CreateFile Lib "kernel32" Alias "CreateFileA" (ByVal lpFileName As String, ByVal dwDesiredAccess As Long, ByVal dwShareMode As Long, ByVal lpSecurityAttributes As Any, ByVal dwCreationDisposition As Long, ByVal dwFlagsAndAttributes As Long, ByVal hTemplateFile As Long) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Private Declare Function SetFilePointer Lib "kernel32" (ByVal hFile As Long, ByVal lDistanceToMove As Long, lpDistanceToMoveHigh As Long, ByVal dwMoveMethod As Long) As Long
Private Declare Function SetFileAttributes Lib "kernel32" Alias "SetFileAttributesA" (ByVal lpFileName As String, ByVal dwFileAttributes As Long) As Long
Private Declare Function GetFileSize Lib "kernel32" (ByVal hFile As Long, lpFileSizeHigh As Long) As Long
Private Declare Function GetTempFileName Lib "kernel32" Alias "GetTempFileNameA" (ByVal lpszPath As String, ByVal lpPrefixString As String, ByVal wUnique As Long, ByVal lpTempFileName As String) As Long
Private Declare Function MoveFileEx Lib "kernel32" Alias "MoveFileExA" (ByVal lpExistingFileName As String, ByVal lpNewFileName As String, ByVal dwFlags As Long) As Long
Private Declare Function DeleteFile Lib "kernel32" Alias "DeleteFileA" (ByVal lpFileName As String) As Long
Private Sub Form_Load()
'KPD-Team 1998
'URL: http://www.allapi.net/
'E-Mail: KPDTeam@Allapi.net
Dim sSave As String, hOrgFile As Long, hNewFile As Long, bBytes() As Byte
Dim sTemp As String, nSize As Long, Ret As Long
'Ask for a new volume label
sSave = InputBox("Please enter a new volume label for drive C:\" + vbCrLf + " (if you don't want to change it, leave the textbox blank)")
If sSave <> "" Then
SetVolumeLabel "C:\", sSave
End If
'Create a buffer
sTemp = String(260, 0)
'Get a temporary filename
GetTempFileName "C:\", "KPD", 0, sTemp
'Remove all the unnecessary chr$(0)'s
sTemp = Left$(sTemp, InStr(1, sTemp, Chr$(0)) - 1)
'Set the file attributes
SetFileAttributes sTemp, FILE_ATTRIBUTE_TEMPORARY
'Open the files
hNewFile = CreateFile(sTemp, GENERIC_WRITE, FILE_SHARE_READ Or FILE_SHARE_WRITE, ByVal 0&, OPEN_EXISTING, 0, 0)
hOrgFile = CreateFile("c:\config.sys", GENERIC_READ, FILE_SHARE_READ Or FILE_SHARE_WRITE, ByVal 0&, OPEN_EXISTING, 0, 0)
'Get the file size
nSize = GetFileSize(hOrgFile, 0)
'Set the file pointer
SetFilePointer hOrgFile, Int(nSize / 2), 0, FILE_BEGIN
'Create an array of bytes
ReDim bBytes(1 To nSize - Int(nSize / 2)) As Byte
'Read from the file
ReadFile hOrgFile, bBytes(1), UBound(bBytes), Ret, ByVal 0&
'Check for errors
If Ret <> UBound(bBytes) Then MsgBox "Error reading file ..."
'Write to the file
WriteFile hNewFile, bBytes(1), UBound(bBytes), Ret, ByVal 0&
'Check for errors
If Ret <> UBound(bBytes) Then MsgBox "Error writing file ..."
'Close the files
CloseHandle hOrgFile
CloseHandle hNewFile
'Move the file
MoveFileEx sTemp, "C:\KPDTEST.TST", MOVEFILE_REPLACE_EXISTING
'Delete the file
DeleteFile "C:\KPDTEST.TST"
Unload Me
End Sub
Vamos basicamente es lo q dice kichan:
SetFileAttributes "nombredearchivo.exe", atributo
Los atributos los puedes ver en la primera cita
Me parece!!
esa es la pega de un moderador..muy bien..
asi se extraña menos a slasher-k
saludos..
;-D Gracias E0N. Ahora tengo un problema de n00b... cuando intento declarar:
Declare Function SetFileAttributes Lib "kernel32" Alias "SetFileAttributesA" (ByVal lpFileName As String, ByVal dwFileAttributes As Long) As Long
Me salta un error diciendo...
CitarNo se permiten constantes, cadenas de longitud fija, matrices e instrucciones Declare como miembros Public de módulos de objeto
¿Qué es lo que hago mal? Siempre he tenido problemas con las declaraciones... y es que no entiendo muy bien como funcionan. Quizás tenga que volver a los manuales y leermelos en sério.
Gracias por el aporte =D
-----
Edit:
Por cierto, la variable
FILE_ATTRIBUTE_HIDDEN (que es la que me interesa) no viene definida en el ejemplo.
Const MOVEFILE_REPLACE_EXISTING = &H1
Const FILE_ATTRIBUTE_TEMPORARY = &H100
Const FILE_BEGIN = 0
Const FILE_SHARE_READ = &H1
Const FILE_SHARE_WRITE = &H2
Const CREATE_NEW = 1
Const OPEN_EXISTING = 3
Const GENERIC_READ = &H80000000
Const GENERIC_WRITE = &H40000000
¿Sabeis definirla? No sé como puedo sacar los números que tengo q poner.
Gracias
puede ser que quizas no metes en un modulo la declaracion bueno hace rato que no programo en VB.
pero pa evitar declararlas existe un archivo qwue se pone en loa carpeta system32.
pero eso debe ser..
que estas poniendo mal dicha declaracion..o no en el lugar indicado
Puedes utilizar la funcion SetAttr, sin utilizar ninguna Api.
Para archivos ocultos me parece que es:
Private Sub Command1_Click()
SetAttr "c:\archivo.txt", 34
'SetAttr Path, Modo
'Si queres saber el numero que corresponde al modo, juega con la funcion GetAttr. (msgbox getattr("c:\archivo.txt")
'Tambien visual te da la opcion de escojer el tipo de atributo que le queres dar al archivo, vbHidden creo que seria el numero 34
End Sub
Saludos
Perfecto, Hades. Sencillo y muy útil. Ahora tengo otra duda... ¿Como mato un archivo oculto? Con la función Kill no puedo... no hace nada.
Prueva con la api DeleteFile. La descripcion de la api guide:
CitarDeclare Function DeleteFile Lib "kernel32" Alias "DeleteFileA" (ByVal lpFileName As String) As Long
· lpFileName
Points to a null-terminated string that specifies the file to be deleted.
Y el ejemplo:
'This program needs a Dialog box, named CDBox1
' (To add the Common Dialog Box to your tools menu, go to Project->Components (or press CTRL-T)
' and select Microsoft Common Dialog control)
Private Type FILETIME
dwLowDateTime As Long
dwHighDateTime As Long
End Type
Private Type SHFILEOPSTRUCT
hWnd As Long
wFunc As Long
pFrom As String
pTo As String
fFlags As Integer
fAborted As Boolean
hNameMaps As Long
sProgress As String
End Type
Private Type SYSTEMTIME
wYear As Integer
wMonth As Integer
wDayOfWeek As Integer
wDay As Integer
wHour As Integer
wMinute As Integer
wSecond As Integer
wMilliseconds As Integer
End Type
Private Const GENERIC_WRITE = &H40000000
Private Const OPEN_EXISTING = 3
Private Const FILE_SHARE_READ = &H1
Private Const FILE_SHARE_WRITE = &H2
Private Const FO_DELETE = &H3
Private Declare Function CopyFile Lib "kernel32" Alias "CopyFileA" (ByVal lpExistingFileName As String, ByVal lpNewFileName As String, ByVal bFailIfExists As Long) As Long
Private Declare Function CreateDirectory Lib "kernel32" Alias "CreateDirectoryA" (ByVal lpPathName As String, lpSecurityAttributes As Long) As Long
Private Declare Function DeleteFile Lib "kernel32" Alias "DeleteFileA" (ByVal lpFileName As String) As Long
Private Declare Function GetFileSize Lib "kernel32" (ByVal hFile As Long, lpFileSizeHigh As Long) As Long
Private Declare Function GetFileTime Lib "kernel32" (ByVal hFile As Long, lpCreationTime As FILETIME, lpLastAccessTime As FILETIME, lpLastWriteTime As FILETIME) As Long
Private Declare Function MoveFile Lib "kernel32" Alias "MoveFileA" (ByVal lpExistingFileName As String, ByVal lpNewFileName As String) As Long
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 CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Private Declare Function SHFileOperation Lib "shell32.dll" Alias "SHFileOperationA" (lpFileOp As SHFILEOPSTRUCT) As Long
Private Declare Function FileTimeToSystemTime Lib "kernel32" (lpFileTime As FILETIME, lpSystemTime As SYSTEMTIME) As Long
Private Declare Function FileTimeToLocalFileTime Lib "kernel32" (lpFileTime As FILETIME, lpLocalFileTime As FILETIME) As Long
Private Sub Form_Load()
'KPD-Team 1998
'URL: http://www.allapi.net/
'E-Mail: KPDTeam@Allapi.net
Dim lngHandle As Long, SHDirOp As SHFILEOPSTRUCT, lngLong As Long
Dim Ft1 As FILETIME, Ft2 As FILETIME, SysTime As SYSTEMTIME
'Set the dialog's title
CDBox.DialogTitle = "Choose a file ..."
'Raise an error when the user pressed cancel
CDBox.CancelError = True
'Show the 'Open File'-dialog
CDBox.ShowOpen
'Create a new directory
CreateDirectory "C:\KPD-Team", ByVal &H0
'Copy the selected file to our new directory
CopyFile CDBox.filename, "C:\KPD-Team\" + CDBox.FileTitle, 0
'Rename the file
MoveFile "C:\KPD-Team\" + CDBox.FileTitle, "C:\KPD-Team\test.kpd"
'Open the file
lngHandle = CreateFile("C:\KPD-Team\test.kpd", GENERIC_WRITE, FILE_SHARE_READ Or FILE_SHARE_WRITE, ByVal 0&, OPEN_EXISTING, 0, 0)
'Get the file's size
MsgBox "The size of the selected file is" + Str$(GetFileSize(lngHandle, lngLong)) + " bytes."
'Get the fil's time
GetFileTime lngHandle, Ft1, Ft1, Ft2
'Convert the file time to the local file time
FileTimeToLocalFileTime Ft2, Ft1
'Convert the file time to system file time
FileTimeToSystemTime Ft1, SysTime
MsgBox "The selected file was created on" + Str$(SysTime.wMonth) + "/" + LTrim(Str$(SysTime.wDay)) + "/" + LTrim(Str$(SysTime.wYear))
'Close the file
CloseHandle lngHandle
'Delete the file
DeleteFile "C:\KPD-Team\test.kpd"
With SHDirOp
.wFunc = FO_DELETE
.pFrom = "C:\KPD-Team"
End With
'Delete the directory
SHFileOperation SHDirOp
End
End Sub
Aunke me parece mucho ejemplo para lo es la api en si xDD
Si tampoco lo consigues borrar con la api siempre puedes cambiar el atributo oculto del archivo (lo dejas en normal) y ya lo borras con kill :P
Ehm... sí, mejor lo devuelvo a normal y lo mato con kill. Ese ejemplo da miedo, y seguro que también errores para adaptarlo a mi programa =S
simplemente mete la declaracion
Declare Function DeleteFile Lib "kernel32" Alias "DeleteFileA" (ByVal lpFileName As String) As Long
y Llamala asi
DeleteFile "archivoaborrar.extension"
no tiene mas misterio
Por Dios como tener miedo de utilizar las Apis si gracias a ello el programa se vuelve mas sofisticado por decirlo de algun modo, ademas ganamos en velocidad y no tiene ninguna dificultad declararlas y usuarlas..
lo que pasa, es que estas tan acostumbrado a las malas tecniucas de programacion que enseña el basic..
en fin...
saludos.
Cita de: Scratz en 23 Agosto 2007, 11:55 AM
Ehm... sí, mejor lo devuelvo a normal y lo mato con kill. Ese ejemplo da miedo, y seguro que también errores para adaptarlo a mi programa =S
Jajaja si ya te habia dicho yo q:
CitarAunke me parece mucho ejemplo para lo es la api en si xDD
Solo tienes q hacer lo q te dice Lambda, fijate en la explicacion de la api (la primera cita de mi anterior post ;))
Gracias a todos. Pero mi miedo a las apis se debe a que...
Declare Function DeleteFile Lib "kernel32" Alias "DeleteFileA" (ByVal lpFileName As String) As Long
(http://scratzphoenixcreations.googlepages.com/errordeclaracion.png)
Muchas veces tengo errores con las declaraciones, y no entiendo por qué :-\
Por eso prefiero ir a lo fácil.
Es por q la estas poniendo en un form, asi declarada hiria en un modulo. Para ponerla en un form tienes q hacerlo asi (ya te dejo un ejemplo completo)
Private Declare Function DeleteFile Lib "kernel32" Alias "DeleteFileA" (ByVal lpFileName As String) As Long
Private Sub Form_Load()
DeleteFile "C:\hola.txt"
End Sub
De partida deberias perderle el miedo
esque solo tienes un problema de declaracion,,,
porque no creo que de sintaxis en las apis
siempre es preferible meterlas dentro de un modulo..
no en el general form
Cita de: E0N en 23 Agosto 2007, 18:02 PM
Es por q la estas poniendo en un form, asi declarada hiria en un modulo. Para ponerla en un form tienes q hacerlo asi (ya te dejo un ejemplo completo)
Private Declare Function DeleteFile Lib "kernel32" Alias "DeleteFileA" (ByVal lpFileName As String) As Long
Private Sub Form_Load()
DeleteFile "C:\hola.txt"
End Sub
Bien, gracias. No sabía eso =/ Perdón por mi torpeza. Demos este post por acabado ;P