Показать полную графическую версию : Visual Basic 2008
Страниц :
1
2
3
[
4]
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Вообщем, ещё одна трабла : Необходимо написать прогу, которая бы удаляла файлы по маске (*а.txt) , либо в имени которых есть только цифры (*цифры*.txt) или только буквы (*любые буквы*.txt)
Просто решил немного поэсперементировать с создниями файла, создал прогу
Public Class Form1
Dim i = 1
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Do Until i = 0
i = i + 1
FileOpen(1, i & ".txt", OpenMode.Append)
PrintLine(1, "123")
FileClose(1)
Loop
End Sub
End Class
после того, как она работала 30 секунд, я её остановил, создалось несколько тысяч файлов. Вот теперь хочу сделать чтобы вторая программа удаляла все эти файлы :)
Можно как-то выдирать значения из переменной?
Например у меня перемнная
Dim i("Привет", "Hello"), z
если z =0, тогда выдирается первое значение, если z=1, выдирается второе значение. Это малый пример. мне необходимо сделать чтобы все это происходило автоматически, а не прописывать каждое значение в ручную, как например If z = 0 Then i = "Привет"
Можно ли как-то в GoTo сделать не одно действие, а несколько?
Dim readValue As Object
readValue = My.Computer.Registry.GetValue _
("HKEY_CURRENT_USER\Software\MyApp", "Name", Nothing)
MsgBox("The value is " & CStr(readValue)) »
Таким образом мы вытягиваем значение из реестра. А как-то можно их добавлять или удалять? Срочно необходимо.
Вот ещё. Вообщем выклаюываю пример, помогите разобраться и дописать.
Что необходимо :
1. Когда ничего не делаешь с главным окном, то иконка в трее и контекстное меню работают нормально. Если чуть потеребить окно, то после нажатия на иконку в трее правой кнопкой, появляются какие-то дополнительные штуки в пуске. Дак вот и и необходимо как-то убрать.
2. Когда вызываем контекстное меню, то его невозможно закрыть, только если выбрать какой-то компонент, или выбрать другое окно. Любое нажатие вне контекстного меню игнорируются. Это тоже надо как-то исправить.
Можно указав GoTo на первый нужный оператор, а заним без условий написав второй нужный оператор.
Там же чуть выше указано
всё организовано через объект
My.Computer.Registry
... сохранимся в ...
My.Computer.Registry.SetValue("HKEY_CURRENT_USER\Software\VB and VBA Program Settings\MyApp", "Version", "1")
По удалению My.Computer.Registry.LocalMachine. предлагает на выбор три способа по соответствующему назначению DeleteSubKey, DeleteSubKeyTree, DeleteValue »
К сожалению или к счастью работать с тре не приходилось как я уже говорил выше по теме, по этому практически (кодом) подсказать не смогу.
DeleteSubKey, DeleteSubKeyTree, »
Какая между ними разница?
DeleteSubKey - удаляет параметра, DeleteSubKeyTree - удаляет раздел.
Хм...как я понял, можно каким-то способом получить хэш. Как это можно организовать?
+ ещё : как можно сделать, чтобы когда открыта программа и реестр, то выбраная ветка/значение записывалось в программу?!
Как отменить закрытие формы?
как сделать чтобы она не закрывалась непонимаю.
Private Sub Form1_FormClosed(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed
Dim i
i = MsgBox("Выйти из программы?", MsgBoxStyle.YesNo Or MsgBoxStyle.Question, "Выйти?")
Select Case i
Case MsgBoxResult.No
End Select
End Sub
Как я понял, нужно копать где-то здесь : CancelButton, но это не точно
Да можно, плюс от .NET
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
MsgBox(Me.GetHashCode)
End Sub
выдаст хеш запускаемого файла согласно MD5 алгоритма в виде массива 16 байтов.
Если нужен полноценный, 128 битный вывод согласно MD5 тогда его нужно написать, вот пример Calculating an MD5 Hash in VB.net (http://www.scottwarren.info/2007/12/26/calculating-an-md5-hash-in-vbnet/)
Что бы пример работал необходимо
либо включить в диапазон имён System.Security.Cryptography (про саму службу Cryptographic Services (http://msdn.microsoft.com/en-us/library/93bskf9z(VS.80).aspx)) Project - > Properties -> References -> Imported namespaces и указать собственно System.Security.Cryptography
http://savepic.ru/166469m.png (http://savepic.ru/166469.png)
либо добавить к проекту новый модуль Solution Explorer ->правой кнопкой мыши Add -> Module...
http://balanagaraj.files.wordpress.com/2007/04/windowslivewriterwindowsformsapplications-af6bmodule-thumb5.jpg (http://balanagaraj.files.wordpress.com/2007/04/windowslivewriterwindowsformsapplications-af6bmodule9.jpg)
туда скопировать пример, добавив в начале следующую строчку кода
Imports System.Security.Cryptography
Использование в этом случаи будет таким
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
MsgBox(getFileMd5(System.Windows.Forms.Application.ExecutablePath))
End Sub
Про другие алгоритмы из этого пространства имён можно прочитать здесь
.NET Framework Class Library System.Security.Cryptography Namespace (http://msdn.microsoft.com/en-us/library/system.security.cryptography(VS.80).aspx)
Ещё по теме MD5 Class (http://msdn.microsoft.com/en-us/library/system.security.cryptography.md5(VS.80).aspx), MD5CryptoServiceProvider Class (http://msdn.microsoft.com/en-us/library/system.security.cryptography.md5cryptoserviceprovider.aspx), HashAlgorithm.ComputeHash Method (http://msdn.microsoft.com/en-us/library/system.security.cryptography.hashalgorithm.computehash(VS.80).aspx).
Не проще ли считать нужные строки из реестра самостоятельно? А то в предложенном варианте получается некий перехватчик с другого приложения, в данном случаи с Regedit.exe
Если идея перехватчика вдохновляет то тут .NET языки не лучший выбор, С++/Delphi лучше с этим справятся, так как нужно будет писать ещё драйвер хука.
Блокировка, такого никогда не писал, не было необходимости. По сути не уважения к пользователю, так как не всем такое понравится в виду того что оно ведёт себя как повисшие, если нет диалога. Самое простое что приходит на ум это повторный запуск приложения
Private Sub Form1_FormClosed(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed
Shell(System.Windows.Forms.Application.ExecutablePath)
End Sub
Это по сути защита от дурака, не в обиду ни кому, так как перед Task Managerом, она всё же закроется. Но можно сразу же запускать чем-то другим, например через батник.
Боюсь такое не подойдёт, ведь результат роботы будет потерян. Об этом стоит подумать.
Не совсем, CancelButton (http://msdn.microsoft.com/en-us/library/system.windows.forms.form.cancelbutton.aspx) лишь определяет что было не нажато в случаи если пользователь нажимал ESC, чаше всего в этом случаи на него вешают закрытия того диалога, на который предполагалось нажать Enter.
Не проще ли считать нужные строки из реестра самостоятельно? »
А можно как-то считать все ветки и ключи реестра в программу? Например в TreeView?
Составив цикл и комбинировав операторы чтения из реестра. Но если ветки массивные приложение будет подтормаживать.
Как отпределить : файл или папка, т.е. например Dir("C:\Program Files\") - выводит "Это папка", если Dir("C:\boot.ini") - выводит "Это файл".
Примечание : Пути могут быть любыми.
По предыдущему вопросу есть готовый компонент Registry Toolkit .NET (http://www.componentspace.com/registrytoolkitcodesamples.aspx) если не охота с циклами заморачиватся. Там уверяют что он может сохранить всё содержимое реестра в один XML файл. Так что осталось парсить сей файл на нужные ключи.
Я проверяю само их наличие (файла или папки), а уже потом указываю соответствующие манипуляции.
Можно анализируя ошибки возвращаемые от этих функций
Public Function FileExists(ByVal FileFullPath As String) _
As Boolean
Dim f As New IO.FileInfo(FileFullPath)
Return f.Exists
End Function
Public Function FolderExists(ByVal FolderPath As String) _
As Boolean
Dim f As New IO.DirectoryInfo(FolderPath)
Return f.Exists
End Function
Determine if a File or a Folder Exists (ASP.NET/VB.NET) (http://www.freevbcode.com/ShowCode.asp?ID=4835)
Кстати, нашел более качественный код для перетаскивания формы без "прыжков форы по экрану"
Private b_Down As Boolean
Private oldPoint As Point
Private Sub Form1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseDown
b_Down = True
oldPoint = e.Location
End Sub
Private Sub Form1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseMove
If b_Down Then
Me.Location = New Point(Me.Left + e.X - oldPoint.X, Me.Top + e.Y - oldPoint.Y)
End If
End Sub
Private Sub Form1_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseUp
If b_Down Then
Me.Location = New Point(Me.Left + e.X - oldPoint.X, Me.Top + e.Y - oldPoint.Y)
b_Down = False
End If
End Sub
bbs.vbstreets.ru (http://bbs.vbstreets.ru/viewtopic.php?p=6688938&sid=36de93342ae1f5e3cd1ed10ef0f785e9)
Как сделать поиск определенного файла? Например мне нужно узнать где лежит файл cmd.exe или какой-нибудь другой. Необходимый путь должен выглядеть так : "C:\WINDOWS\System32\" , а не "C:\WINDOWS\System32\cmd.exe"
C VB6 поставлялась даже готовая формочка SEEK.FRM.
В VB.NET 2008 я подобного не нашёл. Возможно плохо искал или она присутствует в не Експресс редакциях.
VB.Net: Recursive File Searching... (http://www.vbforums.com/showthread.php?t=341919) организовано по принципу рекурсивного поиска.
Плюс там же организована возможность поиска по маске.
Так что можно доделать до необходимого ранее по маске (*а.txt) ... только цифры (*цифры*.txt) или только буквы (*любые буквы*.txt) »
Можно ли как-то подгружать картинку из интернета в PictureBox ?
Да.
PictureBox1.Load("http://forum.oszone.net/image.php?u=91692&dateline=1209059773")
О...круто. я так понял можно подгружать почти в любой объект, но не об этом сейчас речь.
У меня вопрос по теме : как-то можно счиать размеры картинки и по результату создать PictureBox ?
Уже ненадо. Сам разобрался...
PictureBox1.Load("http://forum.oszone.net/image.php?u=91692&dateline=1209059773")
Me.Size = PictureBox1.Image.Size
Только возникает следующий вопрос : как сделать чтобы изображение было по середине экрана?
Uzvern, считать ничего не надо.
Создаём PictureBox
Dim PictureBox1 As New PictureBox()
Добавляем его к форме, по умолчанию в верхнем левом углу.
Controls.Add(PictureBox1)
и грузим картинку,
PictureBox1.Load("C:\Windows\Blue Lace 16.bmp")
он примет её размер.
Есть обратная задача, что б картинка приняла размер компонента.
Тогда несомненно указываем его размер
PictureBox1.Size = New System.Drawing.Size(10, 20)
выбираем режим Streetch, что б картинка приняла пропорции компонента
PictureBox1.SizeMode = PictureBoxSizeMode.StretchImage
Подробнее здесь (http://msdn.microsoft.com/en-us/library/system.windows.forms.picturebox.sizemode.aspx).
Me.Size = PictureBox1.Image.Size »
Этот код приводит размеры формы к размерам компонента PictureBox1, и как следствия к размерам загруженной картинки, а не процесс который требует счиать размеры картинки и по результату создать PictureBox »
как сделать чтобы изображение было по середине экрана? »
Для предложенного варианта трактования изображения (форма изменяющая свой размер под размер картинки) это реализируэться следующим кодом
Me.Size = PictureBox1.Image.Size
Me.Left = Screen.PrimaryScreen.Bounds.Width / 2 - Me.Left / 2
Me.Top = Screen.PrimaryScreen.Bounds.Height / 2 - Me.Top / 2
См. также Get the Current Screen Resolution (VB.NET) (http://www.freevbcode.com/ShowCode.asp?ID=5915)
Можно ли как-то сделать эмуляцию нажатия клавишь?
Например запустил прогу, надал на пару кнопок, она автоматом сворачивается, открываешь например окно аси и она автоматом начинет печатать и отправлять. Возможно такое замутить?
Можно. Отличают два вида нажатий: в свою прогу, через свойство нужной кнопки (или элемента) Button1.Value
и для чужой проги через упомянутый SendKey.
Только что б отправить необходимо нужное окно найти и активировать, прийдётся использовать Win32 Api
Сразу после Public Class Form1 пишем
Declare Auto Function FindWindow Lib "USER32.DLL" (ByVal lpClassName As String, ByVal lpWindowName As String) As IntPtr
Declare Auto Function SetForegroundWindow Lib "USER32.DLL" (ByVal hWnd As IntPtr) As Boolean
для использования необходимых Win32 Api
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim HWND As IntPtr = FindWindow(vbNullString, "ICQ")
If HWND <> IntPtr.Zero Then
Dim theForegroundWindow As Boolean = SetForegroundWindow(HWND)
If theForegroundWindow = True Then
For I As Integer = 0 To 10
SendKeys.SendWait(I)
Next I
End If
End If
End Sub
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.