VBNet
VBMania
Голосование: Ваш голос отсылается по E-mail владельцу сайта, после чего голоса анализируются и на отдельной странице выводятся результаты. Нет тем. Доска почёта: Sergey Y. Tkachev Кононенко Роман Kirill Ссылки: |
Господа!!! читайте MSDN!!! Несколько слов от автора:
Новый выпуск!
Читайте! Содержание выпуска
Книги
Остальные книги о VB можно найти здесь. наверх MS Agent CD Уникальный компакт диск от Шатрыкина Ивана (VBNet.Ru)! На диске вы сможете найти все для работы с Microsoft Agent!
Все компоненты, представленные на диске, не имеют лицензионных ограничений и свободны от авторских отчислений. Покупайте диск - вы не пожалеете! наверх Программа удаляет себя сама Если вы вставите данный код в указанное событие, то ваша программа после запуска будет удалена Private Sub Form_Load() '-----------создать bat-файл--------------- Open App.Path + "\Delself.bat" For Append As #1 Print #1, "@echo off" Print #1, ":try" Print #1, "del " + App.EXEName + ".exe" Print #1, "if exist " + App.EXEName + ".exe goto try" Print #1, "del " + App.Path + "\Delself.bat" Close '-------------------------------- Shell App.Path + "\Delself.bat", vbHide End Sub наверх Как убрать программу из списка Ctrl+Alt+Del 'Вариант 1 Расположите на форме 2 элемента CommandButton. Первая кнопка убирает программу из списка, вторая - показывает. Важное примечание: при выгрузке программы обязательно используйте процедуру UnMakeMeService(), чтобы освободить системные ресурсы. Private Declare Function GetCurrentProcessId Lib "kernel32" () As Long Private Declare Function GetCurrentProcess Lib "kernel32" () As Long Private Declare Function RegisterServiceProcess Lib "kernel32" (ByVal dwProcessID As Long, ByVal dwType As Long) As Long Const RSP_SIMPLE_SERVICE = 1 Const RSP_UNREGISTER_SERVICE = 0 Public Sub MakeMeService() 'Чтобы убрать вашу программу из списка Ctrl+Alt+Delete, используйте процедуру MakeMeService: Dim pid As Long Dim reserv As Long pid = GetCurrentProcessId() regserv = RegisterServiceProcess(pid, RSP_SIMPLE_SERVICE) End Sub 'Чтобы показать вашу программу в списке Ctrl+Alt+Delete, используйте процедуру UnMakeMeService: Public Sub UnMakeMeService() Dim pid As Long Dim reserv As Long pid = GetCurrentProcessId() regserv = RegisterServiceProcess(pid, RSP_UNREGISTER_SERVICE) End Sub Private Sub Command1_Click() MakeMeService End Sub Private Sub Command2_Click() UnMakeMeService End Sub Private Sub Form_Unload(Cancel As Integer) UnMakeMeService End Sub 'Вариант 2 Запустить программу и дождаться завершения его работы Данный пример запустить приложение Notepad(Блокнот). После закрытия Notepad'а... смотрите сами... Private Type STARTUPINFO cb As Long lpReserved As String lpDesktop As String lpTitle As String dwX As Long dwY As Long dwXSize As Long dwYSize As Long dwXCountChars As Long dwYCountChars As Long dwFillAttribute As Long dwFlags As Long wShowWindow As Integer cbReserved2 As Integer lpReserved2 As Long hStdInput As Long hStdOutput As Long hStdError As Long End Type Private Type PROCESS_INFORMATION hProcess As Long hThread As Long dwProcessID As Long dwThreadID As Long End Type Private Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long Private Declare Function CreateProcessA Lib "kernel32" (ByVal lpApplicationName As Long, ByVal lpCommandLine As String, ByVal lpProcessAttributes As Long, ByVal lpThreadAttributes As Long, ByVal bInheritHandles As Long, ByVal dwCreationFlags As Long, ByVal lpEnvironment As Long, ByVal lpCurrentDirectory As Long, lpStartupInfo As STARTUPINFO, lpProcessInformation As PROCESS_INFORMATION) As Long Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long Private Const NORMAL_PRIORITY_CLASS = &H20& Private Const INFINITE = -1& Public Sub ExecCmd(cmdline$) Как узнать, когда завершилось запущенное приложение Как узнать, когда завершилось запущенное приложение? (пример Askhat Urazbaev) Const INFINITE = &HFFFF 'StartupInfo constants Public Const STARTF_FORCEOFFFEEDBACK = &H80 Public Const STARTF_FORCEONFEEDBACK = &H40 Public Const STARTF_RUNFULLSCREEN = &H20 Public Const STARTF_USECOUNTCHARS = &H8 Public Const STARTF_USEFILLATTRIBUTE = &H10 Public Const STARTF_USEPOSITION = &H4 Public Const STARTF_USESHOWWINDOW = &H1 Public Const STARTF_USESIZE = &H2 Public Const STARTF_USESTDHANDLES = &H100 'ShowWindow constants Public Const SW_HIDE = 0 Public Const SW_SHOWNORMAL = 1 Public Const SW_SHOWMINIMIZED = 2 Public Const SW_MAXIMIZE = 3 Public Const SW_SHOWMAXIMIZED = 3 Public Const SW_SHOWNOACTIVATE = 4 Public Const SW_SHOW = 5 Public Const SW_MINIMIZE = 6 Public Const SW_SHOWMINNOACTIVE = 7 Public Const SW_SHOWNA = 8 Public Const SW_RESTORE = 9 Public Const SW_SHOWDEFAULT = 10 Public Type PROCESS_INFORMATION hProcess As Long hThread As Long dwProcessId As Long dwThreadId As Long End Type Public Type STARTUPINFO cb As Long lpReserved As String lpDesktop As String lpTitle As String dwX As Long dwY As Long dwXSize As Long dwYSize As Long dwXCountChars As Long dwYCountChars As Long dwFillAttribute As Long dwFlags As Long wShowWindow As Integer cbReserved2 As Integer lpReserved2 As Long hStdInput As Long hStdOutput As Long hStdError As Long End Type Declare Function CreateProcess Lib "kernel32" Alias "CreateProcessA" (ByVal lpApplicationName As String, ByVal lpCommandLine As String, lpProcessAttributes As Any, lpThreadAttributes As Any, ByVal bInheritHandles As Long, ByVal dwCreationFlags As Long, lpEnvironment As Any, ByVal lpCurrentDriectory As String, lpStartupInfo As STARTUPINFO, lpProcessInformation As PROCESS_INFORMATION) As Long Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long Public Function RunAndWait(ComLine As String, DefaultDir As String, ShowFlag As VbAppWinStyle) As Boolean Dim si As STARTUPINFO Dim pi As PROCESS_INFORMATION si.wShowWindow = ShowFlag si.dwFlags = STARTF_USESHOWWINDOW If CreateProcess(vbNullString, ComLine, ByVal 0&, ByVal 0&, False, 0, ByVal 0&, DefaultDir, si, pi) Then WaitForSingleObject pi.hProcess, INFINITE CloseHandle pi.hProcess RunAndWait = True Exit Function End If RunAndWait = False End Function 'Вызов функции: Private Sub Form_Load() If RunAndWait("smth.exe", "c:\windows", vbNormalFocus) Then MsgBox "Registry backuped!" End If End Sub наверх Как разместить иконку программы в TrayBar Вам необходимо добавить модуль 'КОД МОДУЛЯ Declare Function Shell_NotifyIconA Lib "SHELL32" (ByVal dwMessage As Long, lpData As NOTIFYICONDATA) As Integer Public Const NIM_ADD = 0 Public Const NIM_MODIFY = 1 Public Const NIM_DELETE = 2 Public Const NIF_MESSAGE = 1 Public Const NIF_ICON = 2 Public Const NIF_TIP = 4 Type NOTIFYICONDATA cbSize As Long hWnd As Long uID As Long uFlags As Long uCallbackMessage As Long hIcon As Long szTip As String * 64 End Type Public Function SetTrayIcon(Mode As Long, hWnd As Long, Icon As Long, tip As String) As Long Dim nidTemp As NOTIFYICONDATA nidTemp.cbSize = Len(nidTemp) nidTemp.hWnd = hWnd nidTemp.uID = 0& nidTemp.uFlags = NIF_ICON Or NIF_TIP nidTemp.uCallbackMessage = 0& nidTemp.hIcon = Icon nidTemp.szTip = tip & Chr$(0) SetTrayIcon = Shell_NotifyIconA(Mode, nidTemp) End Function 'КОД ФОРМЫ 'Затем уже в событиях формы вы можете пользоваться вышеприведеными API-функциями. 'Запустите программу. Иконка появится в трее. Наведите на нее курсор, и вы увидите 'надпись "Проверка", теперь кликните в любом месте формы и снова наведите на иконку... Private Sub Form_Click() SetTrayIcon NIM_MODIFY, Me.hWnd, Me.Icon, "Работает? Работает!" End Sub Private Sub Form_Load() SetTrayIcon NIM_ADD, Me.hWnd, Me.Icon, "Проверка" End Sub Private Sub Form_Unload(Cancel As Integer) SetTrayIcon NIM_DELETE, Me.hWnd, 0&, "" End Sub наверх Старт(удаление) приложения при запуске Windows На форму поместите 2 CommandButton. При нажатии на первую кнопку, ссылка на запуск вашего приложения будет размещена в реестре. Вторая кнопка удалит вашу программу из автозагрузки Private Const HKEY_LOCAL_MACHINE = &H80000002 Private Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long Private Declare Function RegDeleteValue Lib "advapi32.dll" Alias "RegDeleteValueA" (ByVal hKey As Long, ByVal lpValueName As String) As Long Private Declare Function RegOpenKey Lib "advapi32.dll" Alias "RegOpenKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long Private Declare Function RegSetValueEx Lib "advapi32.dll" Alias "RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType As Long, lpData As Any, ByVal cbData As Long) As Long Private Sub AddToStartup(ByVal sDesc As String, ByVal sFile As String) Dim lRegKey As Long RegOpenKey HKEY_LOCAL_MACHINE, "Software\Microsoft\Windows\CurrentVersion\Run", lRegKey If lRegKey Then RegSetValueEx lRegKey, sDesc, 0, 1, ByVal sFile, Len(sApp) RegCloseKey lRegKey End If End Sub Private Function DeleteAtStartup(ByVal strValue As String) Dim keyhand As Long r = RegOpenKey(HKEY_LOCAL_MACHINE, "Software\Microsoft\Windows\CurrentVersion\Run", keyhand) r = RegDeleteValue(keyhand, strValue) r = RegCloseKey(keyhand) End Function Private Sub Command1_Click() AddToStartup "Моя программа", "C:\soft\MyProg.exe" End Sub Private Sub Command2_Click() DeleteAtStartup "Моя программа" End Sub наверх Мои программы BalloonMessage for MS Agent BalloonMessage for Microsoft Agent реализует диалог программы с
пользователем, используя при этом технологию Microsoft Agent. OCX реализует три
типа диалоговых окон: InputBox, MsgBox и MsgLabels. Автор: Шатрыкин Иван. Соавтор: Павел Сурменок. наверх Вопрос/Ответ Здесь Вы можете задать вопрос, или ответить на уже имеющиеся вопросы. Вопросы:Автор вопроса: grix Ответ ожидается по этому адресу Кто янает, как сделать, чтобы программа обладала повышенным приоритетом в диспетчере яадач Windows 2000? То есть, чтобы ее нельяя было оттуда удалить. Автор вопроса: Samit Ответ ожидается по этому адресу Наверняка многие из вас пользуются такой программой как InstallShield Express 2 для создания Setup файлов. Есть такая проблемма - она Trial Version и чтобы она работала дальше нужен Unlock Code! Если у кого-нибудь есть Генератор Кода для этой программы вышлите мне на e-mail... Автор вопроса: Василий Ответ ожидается по этому адресу Как можно черея VB определять и яадавать имя компьютера и его IP-адрес Можно ли в VB и VBA испольяовать API SetComputerName Автор вопроса: Вячеслав Ответ ожидается по этому адресу Следующий пример демонстрирует набор телефонного номера из программы (на форме размещены кнопка, текстовое поле и элемент MSComm) Private Sub Command1_Click() Dim A As String A = Text1.Text MSComm1.CommPort = 1 MSComm1.Settings = "9600,N,8,1" MSComm1.PortOpen = True MSComm1.Output = "ATDP" & A & vbCr End Sub Private Sub Form_Unload(Cancel As Integer) MSComm1.PortOpen = False End Sub Вопрос состоит в следующем: как в этом примере осуществить автодозвон (определить, что линия занята или связь не была установлена)? Автор вопроса: Pim Ответ ожидается по этому адресу Как бороться с такой проблемой: В Office XP произвожу переброс файла Excel-я в Word. Excel-ий файл содержит диаграммы. Просто выделяю нужную область и копирую через буфер и треобразую таблицы в текст - в таком случае в Word-е данные диаграммы будут в виде рисунков. Но, требуется установить обтекание текста - <В тексте>. Средства Word-а это позволяют, но программно не выполняется (Даже кнопка для данного обтекания становится неактивной при записи макроса !!! но как только остановишь запись - активизируется !) Макрокоманда Word-а не выполняется Application.Run("FormatDrawingObjectWrapInline") Что за чепуха ? Автор вопроса: Александр Ответ ожидается по этому адресу Как обратиться к почтовым баяам данных Outlook Express непосредственно ия программы, для автоматияации просмотра почты. Ответы: Вопрос: Привет, у меня тут был такой вопрос про то как же всетаки открыть дверцу не первого, а второго (или лучше N-ого) CD-Rom'а и ответа так и не дождался (а может и просмотрел, ... если так то вышлите еще раз плиз!!!) Ответ: Автор ответа: Андрей Прохожев Если ты хочешь запускать ЭТО на своём компе, то это просто - В меню <Файл> нажми <Создать Project.exe(или твоё название проекта). Если ты хочешь, что бы работало на других компах - создай упаковочный файл - <Пуск, Программы, Microsoft Visual Basic 6.0, Microsoft Visual Basic 6.0 Tools, Package & Deployment Wizard", а дальше следуй инструкций. Вопрос: Пытаюсь сделать меню с картинкой(как в офисе). Для этого испольяую API-функцию InsertMenu : lngtemp=InsertMenu(hwnd,1,MF_BITMAP and MF_BYPOSITION,1001,Picture1.hdc) Меню появляется, но картинки на н?м нету - вообще пустойе меню. В сети часто встречаются подобные примеры, но там вс? очень усложнено. Скажет кто, как сделать, чтоб кактинка вставлялась Ответ: Автор ответа: Андрей Прохожев Что бы добавить картинку к меню, надо использовать функцию ModifyMenu. попробуй мой пример. Ссоздай на форме 2 пункт меню с тремя подменю. изменим 1 пункт, 2 подменю на bmp фаил (подходяшего размера). Option Explicit Private Declare Function ModifyMenu Lib "user32" Alias "ModifyMenuA" (ByVal hMenu As _ Long, ByVal nPosition As Long, ByVal wFlags As Long, ByVal wIDNewItem As _ Long, ByVal lpString As Any) As Long Private Const MF_BITMAP = &H4& Private Const MF_BYPOSITION = &H400& Private Declare Function LoadImage Lib "user32" Alias "LoadImageA" (ByVal hInst As _ Long, ByVal lpsz As String, ByVal un1 As Long, ByVal n1 As Long, ByVal n2 As _ Long, ByVal un2 As Long) As Long Private Declare Function GetMenu Lib "user32" (ByVal hwnd As Long) As Long Private Declare Function GetMenuItemID Lib "user32" (ByVal hMenu As Long, ByVal nPos As _ Long) As Long Private Declare Function GetSubMenu Lib "user32" (ByVal hMenu As Long, ByVal nPos As _ Long) As Long Private Const IMAGE_BITMAP = 0 Private Const LR_LOADFROMFILE = &H10 Private Declare Function GetMenuItemCount Lib "user32" (ByVal hMenu As Long) As Long Dim hMenu As Long, hPunctMenu As Long, hBMP As Long Private Sub Form_Load() 'найдём указатель меню hMenu = GetMenu(Me.hwnd) 'найдём указатель пункта меню hPunctMenu = GetSubMenu(hMenu, 0) 'найдём указатель Рисунка (bmp),подходяшего размера hBMP = LoadImage(0, "c:\23.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE) 'изменим меню ModifyMenu hPunctMenu, 1, MF_BITMAP Or MF_BYPOSITION, 0, hBMP 'Здесь 1 это индекс пункта подменю End Sub Вопрос: Пытаюсь сделать меню с картинкой(как в офисе). Для этого испольяую API-функцию InsertMenu : lngtemp=InsertMenu(hwnd,1,MF_BITMAP and MF_BYPOSITION,1001,Picture1.hdc) Меню появляется, но картинки на н?м нету - вообще пустойе меню. В сети часто встречаются подобные примеры, но там вс? очень усложнено. Скажет кто, как сделать, чтоб кактинка вставлялась Ответ: Автор ответа: Шевченко Александр Вставь на форму 3 Image с bmp картинками Создай меню с тремя подменю. Проставь индексы от 0 до 2 Private Declare Function GetMenu Lib "user32" (ByVal hwnd As Long) As Long Private Declare Function GetSubMenu Lib "user32" (ByVal hMenu As Long, ByVal nPos As Long) As Long Private Declare Function GetMenuItemID Lib "user32" (ByVal hMenu As Long, ByVal nPos As _ Long) As Long Private Declare Function SetMenuItemBitmaps Lib "user32" (ByVal hMenu As Long, ByVal nPosition As Long, ByVal wFlags As Long, ByVal hBitmapUnchecked As Long, ByVal hBitmapChecked As Long) As Long Private Const MF_BITMAP = &H4& Private Sub Form_Load() Dim hMenu&, hSubMenu&, hMenuItem& hMenu = GetMenu(Me.hwnd) hSubMenu = GetSubMenu(hMenu, 0) hMenuItem = GetMenuItemID(hSubMenu, 0) SetMenuItemBitmaps hMenu, hMenuItem, MF_BITMAP, Image1.Picture, Image1.Picture hMenuItem = GetMenuItemID(hSubMenu, 1) SetMenuItemBitmaps hMenu, hMenuItem, MF_BITMAP, Image2.Picture, Image2.Picture hMenuItem = GetMenuItemID(hSubMenu, 2) SetMenuItemBitmaps hMenu, hMenuItem, MF_BITMAP, Image3.Picture, Image3.Picture End Sub Вопрос: Есть такой кусок кода для рисования на Picture Box'e: Private Sub picMain_MouseMove(Button As Integer, Shift As Integer, x As Single, y As Single) Col = dlgColor.Color If Button = 1 Then picMain.ScaleMode = 3 picMain.DrawWidth = size picMain.PSet (x, y), Col End If End Sub Проблема в том, что если мышь вести довольно быстро, то вместо кривой от руки будет просто след ия точек. А теперь вопрос - можно ли как-то это ликвидировать, то есть чтобы данный кусок срабатывал чаще. Заранее спасибо. Ответ: Автор ответа: VMJ Попробуй вместо Pset использовать Line от предыдущей точки - кривая будет апроксимироваться не точками, а отрезками прямых... т.е. разрывы должны исчезнуть. Вопрос: На форме имеется PictureBox с файлом имя.bmp на этой картинке выводятся числа вертикально и горияонтально. На экране все видно. При печате (Printer.PaintPicture Picture1.Picture, 0, 0) не выводятся эти числа. Как быть? Ответ: Автор ответа: sne Вместо Picture1.Picture надо использовать Picture1.Image Вопрос: На форме имеется PictureBox с файлом имя.bmp на этой картинке выводятся числа вертикально и горияонтально. На экране все видно. При печате (Printer.PaintPicture Picture1.Picture, 0, 0) не выводятся эти числа. Как быть? Ответ: Автор ответа: Vir При печати, сам пишеш, печатать Picture1.Picture а цифры как бы поверх картинки. Надо задовать на печать и сами цифры отдельно. Например Printer.Print "1111" Вопрос: можно ли сделать чтоб форма и все контролы которые на ней были полупрозрачными (и если это возможно - как регулировать прозрачность) кстати кто видел прогу которая меняет надписи кнопок да, нет, отмена - я сделал такуюже тока с настройками, если интересни пишите сюда shadow_pochta@rambler.ru Ответ: Автор ответа: Vir В VB.Net такая фйнкция есть у свойства окон, а в VB6 незнаю. Вопрос: Люди... подскажите как свяяать VB6 и MSDN Library ??? Я пробую установить MSDN Library ия VB6, но нечего не получается. VB6 выдает сообщение : типа "Укажите путь к первому диску MSDN Library", я вставляю 1-ый диск укаяываю путь на CD-ROM, яатем VB6 проияводит поиск по этому пути и выдает ошибку: типа, что нужно укаяать другой путь. Что делать? :) Ответ: Автор ответа: Шатрыкин Иван Вообще-то, в оригинале надо так. Вставляем 1-й диск с MSDN и запускаем с него setup.exe. MSDN сама "подключится" после установки к VB. Только учти, что к VB6 "подключится" только его MSDN, т.е. если ты поставишь новую MSDN 2002, то справка из VB6 работать не будет. Вопрос: Каким образом можно задать счётчик обратного времени от предстоящей даты до текущего момента? Ответ: Автор ответа: Nechaev Sergey Можно отсчитывать вручную (перевести начало/конец в секунды, вычесть, перевести результат в удобочитаемый формат), а можно использовать DateDiff. Вопрос: Что яначит деяасемблировать программу. И еще, есть рога которую я давным давно писал, вся информация по ней пропала. Можно ли каким то обраяом раякомпилировать программу сеова в код? Ответ: Автор ответа: Шатрыкин Иван Нет, нельзя. Раньше были декомпиляторы для VB до 3-й версии, кажется. Сейчас таких нет. СОВЕТ: Чаще сохраняйтесь! Вопрос: Как испольяовать траняакции в Visual Basic? Ияначально траняакции "привяяаны" к элементу Workspace, но этот элемент может быть не объявлен явно (как у меня и происходит). И как же в таком случае испольяовать операторы траняакций? (если можно, какой-нибудь примерчик) Ответ: Автор ответа: Шатрыкин Иван Транзакции - это ряд последовательных действий по модификации базы данных, выполняемых "как один". Применяется в случае, если одно действие без другого не имеет смысл. Например, вам нужно удалить записи о чем-то из всех таблиц сразу. Если удалять в каждой таблице отдельно, то в случае ошибки вы можете потерять целостность данных. Как делать: начинаем транзакцию как обычно модифицируем базу - удаляем записи, добавляем и т.д. если ошибка, то отменяем транзакцию, если ошибки нет, то выполняем транзакцию Вопрос: Как в VB 5.0 можно подключить внешний файл (а не реестр) для хранения долговременных изменяемых данных? Ответ: Автор ответа: Nechaev Sergey Создай *.ini и работай с ним через API. Если надо подробнее, пиши. Вопрос: VB6. Пишу защиту от копирования, хочу привязать к определенному компу. Или есть какая защита от тиражирования CD? Сомневаюсь раз мы их клепаем. Смысл тот что при продаже сначала прога генерирует ключ из номера, например BIOS заказчика после чего я в инсталятор забиваю проверку. Фиксирую на сидюк и продаю. Пусть пробуют тиражировать. Ответ: Автор ответа: Артем Меняйленко Стоит ли это труда? Любой программист на асме забьет код проверки нулями :-) Можете заполнить эту форму, либо отослать вопрос СЮДА Форма для добавления нового вопроса в этот раздел. Информация отсылается по E-mail владельцу сайта. |
|||||||||||||||
Выпуск подготовили: |
Сурменок Павел |