Новый 63-ий выпуск.
Читайте!
Книги
|
|
Переход на VB .NET. Стратегии, концепции, код (цена ~ 158 руб.)
Эта книга была задумана как одна из первых книг о.NET, которая ознакомит читателя с основными идеями новой архитектуры и подготовит его к знакомству с более детальной литературой, например документацией Microsoft и ее толкованиями, которая неизбежно появится на рынке. Она поможет вам взглянуть на эту технологию с позиций ваших собственных рабочих планов и быстро освоить те концепции, которые покажутся необычными для большинства прогр...
|
Автор(ы): Дан Эпплман, Издательство: Питер, 2002 г.
|
|
|
Программирование на VB.NET. Учебный курс (цена ~ 119 руб.)
Эта книга является вводным курсом по
изучению языка программирования Visual Basic .NET.
Даны основные принципы объектно-ориентированного
программирования в контексте языка VB .NET,
поскольку без хорошей подготовки в этой
области невозможно в полной мере
пользоваться всеми преимуществами VB .NET.
Изложены азы всех аспектов языка, которыми
должен владеть любой профессиональный
разработчик VB .NET
|
Автор(ы): Г. Корнелл, Дж. Моррисон, Издательство: Питер, 2002 г.
|
|
|
VB.NET для разработчиков (цена ~ 125 руб.)
Основная задача книги - быстро ознакомить
разработчиков Visual Basic с изменениями в .NET
Framework. Программисты, использующие Java, C++, Delphi
или другие инструменты разработки
приложений и интересующиеся Visual Basic или
технологией .NET Framework, также найдут эту книгу
полезной. Хотя книга посвящена Visual Basic.NET, ее
основная цель - продемонстрировать
взаимодействие Visual Basic и ...
|
Автор(ы): Кит Франклин, Издательство: Вильямс, 2002 г.
|
Остальные книги о VB можно найти
здесь.
наверх
Получение информации о Windows, используя GetSystemInfo.
Расположите на форме элемент CommandButton.
Private Type SYSTEM_INFO
dwOemID As Long
dwPageSize As Long
lpMinimumApplicationAddress As Long
lpMaximumApplicationAddress As Long
dwActiveProcessorMask As Long
dwNumberOrfProcessors As Long
dwProcessorType As Long
dwAllocationGranularity As Long
dwReserved As Long
End Type
Private Type OSVERSIONINFO
dwOSVersionInfoSize As Long
dwMajorVersion As Long
dwMinorVersion As Long
dwBuildNumber As Long
dwPlatformId As Long
szCSDVersion As String * 128
End Type
Private Type MEMORYSTATUS
dwLength As Long
dwMemoryLoad As Long
dwTotalPhys As Long
dwAvailPhys As Long
dwTotalPageFile As Long
dwAvailPageFile As Long
dwTotalVirtual As Long
dwAvailVirtual As Long
End Type
Private Declare Function GetVersionEx Lib "kernel32" Alias
"GetVersionExA" (LpVersionInformation As OSVERSIONINFO) As Long
Private Declare Sub GlobalMemoryStatus Lib "kernel32" (lpBuffer As MEMORYSTATUS)
Private Declare Sub GetSystemInfo Lib "kernel32" (lpSystemInfo As SYSTEM_INFO)
Const PROCESSOR_INTEL_386 = 386
Const PROCESSOR_INTEL_486 = 486
Const PROCESSOR_INTEL_PENTIUM = 586
Const PROCESSOR_MIPS_R4000 = 4000
Const PROCESSOR_ALPHA_21064 = 21064
Sub SystemInformation()
Dim msg As String ' Status information.
Dim NewLine As String ' New-line.
Dim ret As Integer ' OS Information
Dim ver_major As Integer ' OS Version
Dim ver_minor As Integer ' Minor Os Version
Dim Build As Long ' OS Build
NewLine = Chr(13) + Chr(10) ' New-line.
' Get operating system and version.
Dim verinfo As OSVERSIONINFO
verinfo.dwOSVersionInfoSize = Len(verinfo)
ret = GetVersionEx(verinfo)
If ret = 0 Then
MsgBox "Error Getting Version Information"
End
End If
'MsgBox verinfo.dwPlatformId
Select Case verinfo.dwPlatformId
Case 0
msg = msg + "Windows 32s "
Case 1
msg = msg + "Windows 95 "
Case 2
msg = msg + "Windows NT "
End Select
ver_major = verinfo.dwMajorVersion
ver_minor = verinfo.dwMinorVersion
Build = verinfo.dwBuildNumber
msg = msg & ver_major & "." & ver_minor
msg = msg & " (Build " & Build & ")" & NewLine &
NewLine
' Get CPU type and operating mode.
Dim sysinfo As SYSTEM_INFO
GetSystemInfo sysinfo
msg = msg + "CPU: "
'MsgBox sysinfo.dwProcessorType
Select Case sysinfo.dwProcessorType
Case PROCESSOR_INTEL_386
msg = msg + "Intel 386" + NewLine
Case PROCESSOR_INTEL_486
msg = msg + "Intel 486" + NewLine
Case PROCESSOR_INTEL_PENTIUM
msg = msg + "Intel Pentium" + NewLine
Case PROCESSOR_MIPS_R4000
msg = msg + "MIPS R4000" + NewLine
Case PROCESSOR_ALPHA_21064
msg = msg + "DEC Alpha 21064" + NewLine
Case Else
msg = msg + "(unknown)" + NewLine
End Select
msg = msg + NewLine
' Get free memory.
Dim memsts As MEMORYSTATUS
Dim memory As Long
GlobalMemoryStatus memsts
memory = memsts.dwTotalPhys
msg = msg + "Total Physical Memory: "
msg = msg + Format(memory \ 1024, "###,###,###") + "K" + NewLine
memory = memsts.dwAvailPhys
msg = msg + "Available Physical Memory: "
msg = msg + Format(memory \ 1024, "###,###,###") + "K" + NewLine
memory = memsts.dwTotalVirtual
msg = msg + "Total Virtual Memory: "
msg = msg + Format(memory \ 1024, "###,###,###") + "K" + NewLine
memory = memsts.dwAvailVirtual
msg = msg + "Available Virtual Memory: "
msg = msg + Format(memory \ 1024, "###,###,###") + "K" + NewLine
MsgBox msg, vbOKOnly, "System Info"
End Sub
Private Sub Command1_Click()
Call SystemInformation
End Sub
наверх
Как узнать, какая операционная система установлена: Win98 или NT
Private Declare Function GetVersionEx Lib "kernel32"
Alias "GetVersionExA" (lpVersionInformation As OSVERSIONINFO) As Long
Private Type OSVERSIONINFO
dwOSVersionInfoSize As Long
dwMajorVersion As Long
dwMinorVersion As Long
dwBuildNumber As Long
dwPlatformId As Long
szCSDVersion As String * 128
End Type
Const VER_PLATFORM_WIN32s = 0
Const VER_PLATFORM_WIN32_WINDOWS = 1
Const VER_PLATFORM_WIN32_NT = 2
Public Function WinNT() As Boolean
Dim info As OSVERSIONINFO
info.dwOSVersionInfoSize = Len(info)
GetVersionEx info
WinNT = (info.dwPlatformId = VER_PLATFORM_WIN32_NT)
End Function
Public Function Win98() As Boolean
Dim info As OSVERSIONINFO
info.dwOSVersionInfoSize = Len(info)
GetVersionEx info
Win98 = (info.dwPlatformId = VER_PLATFORM_WIN32_WINDOWS And info.dwMinorVersion >= 10
And info.dwMajorVersion = 4)
End Function
Private Sub Form_Resize()
bWindowsNT = WinNT()
Print bWindowsNT
bWindows98 = Win98()
Print bWindows98
End Sub
наверх
Определить, как долго запущена Windows
'Этот пример покажет время в милисекундах (1000
миллисекунд = 1 секунда). Если хотите получить
секунды - разделите на 1000.
Private Declare Function GetTickCount Lib "kernel32" () As Long
Private Sub Form_Load()
MsgBox GetTickCount()
End Sub
'Более подробнее расписанная статистика.
Private Declare Function GetTickCount Lib "kernel32" () As Long
Private Sub Command1_Click()
Dim a_hour, a_minute, a_second
a = Format(GetTickCount() / 1000, "0") 'всего секунд
a_hour = Int(a / 3600)
a = a - a_hour * 3600
a_minute = Int(a / 60)
a_second = a - a_minute * 60
MsgBox "Ваш компьютер работает в эту загрузку "
& Str(a_hour) & " часов " & Str(a_minute) & "
минут" & Str(a_second) & " секунд"
End Sub
'ИЛИ ТАКОЙ ПРИМЕР
'Расположите на форме элемент ListBox и элемент Timer
Private Declare Function GetTickCount& Lib "Kernel32" ()
Private Sub Form_Load()
Timer1.Interval = 1000
End Sub
Private Sub Timer1_Timer()
MS = GetTickCount()
SekGesamt = MS \ 1000
Std = (SekGesamt \ 3600)
Min = (SekGesamt - (Std * 3600)) \ 60
Sek = (SekGesamt - (Std * 3600) - (Min * 60))
t = Format(Std, "00") & ":" & Format(Min, "00")
& ":" & Format(Sek, "00")
Label1.Caption = t
End Sub
наверх
Определить способ запуска Windows
Данный пример покажет, в каком режиме запуска работает операционная система Windows
Private Declare Function GetSystemMetrics Lib "user32" (ByVal nIndex As Long)
As Long
Private Const SM_CLEANBOOT = 67
Private Sub Form_Load()
Select Case GetSystemMetrics(SM_CLEANBOOT)
Case 1: MsgBox "Safe Mode"
Case 2: MsgBox "Safe Mode with Network support."
Case Else: MsgBox "Windows is running normally."
End Select
End Sub
наверх
Определение рабочей области Windows
то есть часть экрана, не затененного панелью задач или другими прикладными областями
Расположите на форме элемент CommandButton.
Const SPI_GETWORKAREA = 48
Private Declare Function SystemParametersInfo Lib "user32" Alias "SystemParametersInfoA" (ByVal uAction As Long, ByVal uParam As Long, lpvParam As Any, ByVal fuWinIni As Long) As Long
Private Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type
Private Sub Command1_Click()
Dim lngTop, lngLeft, lngRight, lngBottom As Long
Dim typRect As RECT
Call SystemParametersInfo(SPI_GETWORKAREA, vbNull, typRect, 0)
With typRect
lngTop = .Top
lngLeft = .Left
lngRight = .Right
lngBottom = .Bottom
End With
Print lngTop
Print lngLeft
Print lngRight
Print lngBottom
End Sub
наверх
Выключение/перезагрузка Windows
Как показывает практика, вопрос выключения и
перезагрузки Windows программно интересует очень
многих. Я бы тоже хотел внести свою лепту в ответ
на этот вопрос. Уже долгое время я пользуюсь этим
примером. Что примечательно: при использовании
данного примера, система поочередно опрашивает
все процессы в системе, и если требуется в
какой-либо программе сохранения каких-либо
данных, то вы всегда можете сделать отмену
процесса выключения компьютера. При
использовании данного примера вы можете
использовать одну из EWX_-констант.
EWX_LOGOFF - вход в систему под новым именем
EWX_SHUTDOWN - выключение компьютера
EWX_REBOOT -перезагрузка компьютера
EWX_FORCE - принудительный вход под новым именем
'КОД ФОРМЫ
Private Sub mnuCompOff_Click()
Call ShutDown(EWX_SHUTDOWN)
End Sub
Private Sub mnuCompReboot_Click()
Call ShutDown(EWX_REBOOT)
End Sub
'КОД МОДУЛЯ
Private Const STANDARD_RIGHTS_REQUIRED = &HF0000
Private Const READ_CONTROL = &H20000
Private Const STANDARD_RIGHTS_READ = (READ_CONTROL)
Private Const STANDARD_RIGHTS_WRITE = (READ_CONTROL)
Private Const STANDARD_RIGHTS_EXECUTE = (READ_CONTROL)
Public Enum TokenRights
TOKEN_ASSIGN_PRIMARY = &H1
TOKEN_DUPLICATE = &H2
TOKEN_IMPERSONATE = &H4
TOKEN_QUERY = &H8
TOKEN_QUERY_SOURCE = &H10
TOKEN_ADJUST_PRIVILEGES = &H20
TOKEN_ADJUST_GROUPS = &H40
TOKEN_ADJUST_DEFAULT = &H80
TOKEN_ALL_ACCESS = (STANDARD_RIGHTS_REQUIRED Or TOKEN_ASSIGN_PRIMARY Or TOKEN_DUPLICATE Or
TOKEN_IMPERSONATE Or TOKEN_QUERY Or TOKEN_QUERY_SOURCE Or TOKEN_ADJUST_PRIVILEGES Or
TOKEN_ADJUST_GROUPS Or TOKEN_ADJUST_DEFAULT)
TOKEN_READ = (STANDARD_RIGHTS_READ Or TOKEN_QUERY)
TOKEN_WRITE = (STANDARD_RIGHTS_WRITE Or TOKEN_ADJUST_PRIVILEGES Or TOKEN_ADJUST_GROUPS Or
TOKEN_ADJUST_DEFAULT)
TOKEN_EXECUTE = (STANDARD_RIGHTS_EXECUTE)
End Enum
Public Enum PrivilegeAttributes
SE_PRIVILEGE_ENABLED_BY_DEFAULT = &H1
SE_PRIVILEGE_ENABLED = &H2
SE_PRIVILEGE_USED_FOR_ACCESS = &H80000000
End Enum
Public Enum ExitOptions
EWX_LOGOFF = 0
EWX_SHUTDOWN = 1
EWX_REBOOT = 2
EWX_FORCE = 4
End Enum
Public Enum TokenAccess
TokenUser = 1
TokenGroups = 2
TokenPrivileges = 3
TokenOwner = 4
TokenPrimaryGroup = 5
TokenDefaultDacl = 6
TokenType = 8
TokenImpersonationLevel = 9
TokenStatistics = 10
End Enum
Type LUID
lowPart As Long
HighPart As Long
End Type
Type LUID_AND_ATTRIBUTES
pLuid As LUID
Attributes As PrivilegeAttributes
End Type
Type PTOKEN_PRIVILEGES
PrivilegeCount As Long
Privileges(0) As LUID_AND_ATTRIBUTES
End Type
Private Declare Function GetCurrentProcess Lib "kernel32" () As Long
Private Declare Function OpenProcessToken Lib "advapi32" (ByVal ProcessHandle As
Long, ByVal DesiredAccess As TokenRights, ByRef TokenHandle As Long) As Long
Private Declare Function LookupPrivilegeValueA Lib "advapi32" (ByVal
lpSystemName As String, ByVal lpName As String, ByRef lpLuid As LUID) As Long
Private Declare Function AdjustTokenPrivileges Lib "advapi32" (ByVal TokenHandle
As Long, ByVal DisableAllPrivileges As Long, ByRef NewState As PTOKEN_PRIVILEGES, ByVal
BufferLength As Long, ByRef PreviousState As Long, ByRef ReturnLenght As Long) As Long
Private Declare Function AdjustTokenPrivilegesOld Lib "advapi32" Alias
"AdjustTokenPrivileges" (ByVal TokenHandle As Long, ByVal DisableAllPrivileges
As Long, ByRef NewState As PTOKEN_PRIVILEGES, ByVal BufferLength As Long, ByRef
PreviousState As PTOKEN_PRIVILEGES, ByRef ReturnLenght As Long) As Long
Private Declare Function ExitWindowsEx Lib "user32" (ByVal uFlags As
ExitOptions, ByVal dwReserved As Long) As Long
Public Function ShutDown(Operation As ExitOptions) As Long
Dim lngProcess As Long
Dim lngReturn As Long
Dim lngToken As Long
Dim udtLUID As LUID
Dim lngTokenPrivileges As TokenRights
Dim udtTokenPrivNew As PTOKEN_PRIVILEGES
lngProcess = GetCurrentProcess()
lngTokenPrivileges = TOKEN_ADJUST_PRIVILEGES
lngReturn = OpenProcessToken(lngProcess, lngTokenPrivileges, lngToken)
lngReturn = LookupPrivilegeValueA(vbNullString, "SE_SHUTDOWN_NAME", udtLUID)
udtTokenPrivNew.PrivilegeCount = 1
udtTokenPrivNew.Privileges(0).Attributes = SE_PRIVILEGE_ENABLED
udtTokenPrivNew.Privileges(0).pLuid = udtLUID
lngReturn = AdjustTokenPrivileges(lngToken, 0, udtTokenPrivNew, 0&, 0, 0&)
ShutDown = ExitWindowsEx(Operation, 0)
End Function
наверх
Мои программы
BalloonMessage for MS Agent
BalloonMessage for Microsoft Agent реализует диалог программы с
пользователем, используя при этом технологию Microsoft Agent. OCX реализует три
типа диалоговых окон: InputBox, MsgBox и MsgLabels.
Автор: Шатрыкин Иван. Соавтор: Павел Сурменок.
наверх
Вопрос/Ответ
Здесь Вы можете задать вопрос, или ответить на уже имеющиеся вопросы.
Вопросы:
Автор вопроса: Меркуль Евгений Юрьевич
Ответ ожидается по этому
адресу
У меня несколько вопросов (пишу на VBasice 3.0 и Visual Basic 6.0) :
1)Где можно найти программу для перевода из VB любой версии в DELPHI (желательно 6-версии)?
2)Как сделать , чтобы программа автоматически запускалась после загрузки КОМПа?
3) Как работать с реестром?
4) Допустим я нашел нужную мне функцию winAPI, как определить, какие к ней нужны константы и тд?
6)Можно ли сделать так, чтобы тому, кому я даю проги не надо было устанавливать VBasic 3.0 или 6.0 ?
Автор вопроса:
Sergey
Ответ ожидается по этому
адресу
Как считать данные ия файлов dbf с помощью ADO?
Автор вопроса:
OLEG
Ответ ожидается по этому
адресу
Никто не янает как проверить яапущенность какой-либо программы.
Автор вопроса:
Анатолий
Ответ ожидается по этому
адресу
Можно ли с помощью VB распаковать или упаковать файл, неприменяя программы-архиваторы и оператор Shell.В частности интересует возможность распаковывать файлы, упакованые HA и ZIP архиваторами.
Автор вопроса:
sv
Ответ ожидается по этому
адресу
Как поместить свою программу в SysTray, где отображаются часы и раскладка клавиатуры.
Автор вопроса:
DIM
Ответ ожидается по этому
адресу
Подскажите как можно отследить обь?м информации прошедшей чере инетсоединение
Автор вопроса:
Real
Ответ ожидается по этому
адресу
Подскажите пожалуйста, как через VB получить данные о том кто в текущий момент подключен к компьютеру (к расшареным папкам) и кто что скачивает, и как разорвать нежелательное соединение?
Автор вопроса:
Сергей
Ответ ожидается по этому
адресу
1.Подскажите, как в VB динамически соядавать массивы: в ходе программы яаполняется список.Каждому элементу списка должен соответствовать массив.Сколько будет элементов-неиявестно.Так как давать имена этим динамически соядаваемым массивам.
2.Как соядавать таблицы Word ия VB.
Автор вопроса:
Николай
Ответ ожидается по этому
адресу
Поскажите пожалуйсто какой должен быть код для того чтобы провести диагностику "железа" компьютера,вернее узнать чипсет,видеокарту и другие установленные комплектующие ?
Автор вопроса:
GEKA
Ответ ожидается по этому
адресу
Подскажите плиzzzzz где можно найти инфо:
1)Как при помощи VB работать с Active Directory
2)Как при помощи VB работать с BROADCAST
Автор вопроса:
sv
Ответ ожидается по этому
адресу
Как использовать параметры в командной строке при загрузке программы, откомпилированной в EXE файл?
Автор вопроса:
Сергей
Ответ ожидается по этому
адресу
Пишу программу, где по ходу яаполнения списка сояда?тся динамический массив. На каждый элемент списка-один массив.Элементов может быть сколько угодно.Как давать имена таким массивам? По идее List1.List(i)в цикле, но на такие имена VB ругается.
Автор вопроса:
alek
Ответ ожидается по этому
адресу
Можно ли программно записывать в файл ресурсов? И если можно,как его оттуда вынемать.
Автор вопроса:
exhumator
Ответ ожидается по этому
адресу
Люди, подскажите, плз, как можно сделать так, чтобы моя прога при свертывании окна кидалась не на панель задач, а в трей.
Автор вопроса:
sv
Ответ ожидается по этому
адресу
Программа должна открыть файл A.TXT в своем каталоге. Как это осуществить, если путь к программе меняется?
Автор вопроса:
Shark
Ответ ожидается по этому
адресу
1.Как проследить яапуск конкретной программы?
2.Как получить список открытых программ?
Автор вопроса:
darknez@mail.kz
Ответ ожидается по этому
адресу
как можно назначить hotkey, для вызова проги, т.е. я свернул её в трэй и мне надо её вызвать.
Автор вопроса:
sv
Ответ ожидается по этому
адресу
1) Есть прога убирающая с экрана значки, а как убрать значки из Панели Задач.
2) Как програмно изменить разрешение экрана.
Автор вопроса:
White_Max
Ответ ожидается по этому
адресу
Как отключить клавиатуру?
Автор вопроса:
Alexey
Ответ ожидается по этому
адресу
Подскажите как объявлять перечисления на VB_6.0.
Ответы:
Вопрос:
Вопрос по Ехелю ...
Мне нужно выбрать значения ячеек из одного листа книги и сравнить их со значениями ячеек в другом листе той же книги. Вот, что у меня есть:
Private Sub CommandButton1_Click()
Dim cell As Range
Dim ans(200) As Integer
Dim err
err = 0
i = 0
'--------Перебор ячеек с вводимыми значениями-------
For Each cell In Range("B3:F42").Cells
ans(i) = cell
i = i + 1
Next cell
'--------Переход на лист с эталонными значениями----
Sheets("Лист2").Select
'--------Перебор ячеек с правильными значениями и сравнение-------
i = 0
For Each cell In Range("G1:K40").Cells
If cell <> ans(i) Then
err = err + 1
End If
i = i + 1
Next cell
'--------Возврат на лист с вводимыми значениями-----
Sheets("Лист1").Select
End Sub
Происходит же следующее:
- Он выбирает введенные значения с Листа1
- Переходит на Лист2 (по крайней мере, на экране это видно)
А вот диапазон G1:K40 он все равно берет с Листа1 (как бы насквозь Листа2). И, следовательно, сравнивает с пустыми ячейками.
Так вот, собственно, сам вопрос: как сделать так, чтобы диапазон G1:K40 выбирался именно с Листа2, а не с Листа1?
Ответ:
Автор ответа:
Яблоновский Я.А.
Попробуй присвоить диапазону префикс - имя нужного листа:
Range("Лист2!G1:K40")
У меня такое обращение работало (Excel 2000 под Win98SE).
Вопрос:
Можно ли в VB узнать о том, что работает винт(дублировать лампочку работы винта)...
Если да...
То как привязать к TextBoxs`у...
Например:
Когда заработал винт(начал чё нить читать)... то в TextBoxs`е высвечивается "ON", а когда винт находится в пассивном режиме-"OFF"
Ответ:
Автор ответа:
audit
' Вот что у меня получилось:
Sub test1()
Dim ans(200) As Integer
Dim Cell As Range
Dim err, I
err = 0
I = 0
' Переходить на другой лист не обязательно, можно брать значения из любого листа
'--------Перебор ячеек с вводимыми значениями-------
For Each Cell In Sheets("Лист1").Range("B3:F42").Cells
ans(I) = Cell
I = I + 1
Next Cell
'--------Перебор ячеек с правильными значениями и сравнение-------
I = 0
For Each Cell In Sheets("Лист2").Range("G1:K40").Cells
If Cell <> ans(I) Then err = err + 1
I = I + 1
Next Cell
End Sub
Еще желательно сравнивате не ячейки, а их значения (cells.value), т.к. возможны траблы с различными форматами данных (сравнение "1" и 1 !!!!).
Использовал VBA, Office XP,Win98SE
Если что не получилось, пиши:
pim76@mail.ru
Можете заполнить эту форму, либо отослать вопрос
СЮДА
Форма для добавления нового вопроса в этот раздел. Информация отсылается по E-mail владельцу сайта.
наверх