Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
64 / 20 / 1
Регистрация: 29.07.2012
Сообщений: 151

Присвоить переменной значение своей прогой

28.05.2013, 19:58. Показов 1273. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, есть у меня 2 проги написанные на vb, в одной к примеру, переменная a=0. Кто знает можно ли другой прогой присвоить ей другое значение? Спасибо.

Добавлено через 2 минуты
При этом думаю понадобятся api
Visual Basic
1
2
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
28.05.2013, 19:58
Ответы с готовыми решениями:

Как переменной описанной в программе присвоить значение переменной в Conditional Compilation Arguments?
Kak mozhno peremennij opisanoj v programme prisvoit` znachenie peremennoj v Conditional Compilation Arguments??? Eto nado chtoto tipa...

Присвоить переменной значение TextBox
Как можно присвоить значение элемента TextBox строковой переменной?

Присвоить переменной значение из базы данных и сравнить с другим
Доброе время суток, не давно начал изучать VB. В общем задача такая, у меня есть база данных в access, из одной таблице мне нужно взять...

7
 Аватар для Pro_grammer
6807 / 2839 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
28.05.2013, 20:47
Цитата Сообщение от brifing Посмотреть сообщение
При этом думаю понадобятся api
Нет, не понадобятся. Понадобится найти PID, хэндл процесса, Открыть процесс для доступа OpenProcess узнать, по какому адресу в памяти процесса записано значение этой перемененной и изменить его при помощи WriteProcessMemory
Нечто подобное проделывает проги, подобные АртМани.
1
64 / 20 / 1
Регистрация: 29.07.2012
Сообщений: 151
28.05.2013, 23:01  [ТС]
Цитата Сообщение от Pro_grammer Посмотреть сообщение
Понадобится найти PID
PID так находим
Visual Basic
1
Private Declare Function GetCurrentProcessId Lib "kernel32" () As Long
Но мне нужен PID определённого процесса, что посоветуете?
0
 Аватар для Pro_grammer
6807 / 2839 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
29.05.2013, 06:22
Лучший ответ Сообщение было отмечено The trick как решение

Решение

Цитата Сообщение от brifing Посмотреть сообщение
нужен PID определённого процесса
На примере калькулятора ( запущен заранее)
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hWnd As Long, lpdwProcessId As Long) As Long
 
Private Sub Command1_Click()
Dim pId As Long
Dim hWnd As Long
hWnd = FindWindow("SciCalc", vbNullString)
GetWindowThreadProcessId hWnd, pId
MsgBox pId
 
End Sub
1
64 / 20 / 1
Регистрация: 29.07.2012
Сообщений: 151
29.05.2013, 19:46  [ТС]
А зная PID можем хендл процесса найти?
0
 Аватар для Pro_grammer
6807 / 2839 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
29.05.2013, 21:43
Лучший ответ Сообщение было отмечено The trick как решение

Решение

Цитата Сообщение от brifing Посмотреть сообщение
А зная PID можем хендл процесса найти?
А как же!
Visual Basic
1
2
3
4
5
Public Declare Function OpenProcess Lib "Kernel32.dll" (ByVal dwDesiredAccessas As Long, ByVal bInheritHandle As Long, ByVal dwProcId As Long) As Long
Const PROCESS_QUERY_INFORMATION = 1024
Const PROCESS_VM_READ = 16
 
HwndProcess = OpenProcess(PROCESS_QUERY_INFORMATION Or PROCESS_VM_READ, 0, PID)
1
64 / 20 / 1
Регистрация: 29.07.2012
Сообщений: 151
29.05.2013, 22:41  [ТС]
Большое спасибо, Pro_grammer.
Цитата Сообщение от Pro_grammer Посмотреть сообщение
узнать, по какому адресу в памяти процесса записано значение этой перемененной
А с этим как быть? Просто скажите какая api, сам разберусь.

Добавлено через 4 минуты
хотя там вряд ли api
0
Модератор
10048 / 3894 / 883
Регистрация: 22.02.2013
Сообщений: 5,847
Записей в блоге: 79
30.05.2013, 00:08
Лучший ответ Сообщение было отмечено Dragokas как решение

Решение

Можно через WM_COPYDATA устанавливать значения, но только если есть хендл окна. Как в приложенном проекте, если запустить две копии приложения, можно устанавливать переменную mRadius в другом приложении.
Модуль:
Кликните здесь для просмотра всего текста
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
Option Explicit
Private Type COPYDATASTRUCT
    dwData As Long
    cbData As Long
    lpData As Long
End Type
Private Const WM_COPYDATA = &H4A
Private Const GWL_WNDPROC& = (-4&)
 
Private Const SET_RADIUS = 1
 
Private Declare Function CallWindowProcA Lib "user32" (ByVal lpPrevWndFunc As Long, ByVal hwnd As Long, ByVal MSG As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Declare Function SendMessageA Lib "user32" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
Private Declare Function GetMem4 Lib "msvbvm60" (ByVal pSrc As Long, ByVal pDst As Long) As Long
Private Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long
Private Declare Function GetWindowTextLength Lib "user32" Alias "GetWindowTextLengthA" (ByVal hwnd As Long) As Long
Private Declare Function EnumWindows Lib "user32" (ByVal lpEnumFunc As Long, ByVal lParam As Long) As Long
 
Dim pPrevWndProc As Long, fndHwnd As Long, Disable As Boolean
 
Public Sub Hook(hwnd As Long)
    pPrevWndProc = SetWindowLong(hwnd, GWL_WNDPROC, AddressOf WindowProc)
End Sub
Public Sub UnHook(hwnd As Long)
    Call SetWindowLong(hwnd, GWL_WNDPROC, pPrevWndProc)
End Sub
Public Function SendRadius() As Boolean
    Dim CDRec As COPYDATASTRUCT, Value As Long
    If fndHwnd = 0 Then EnumWindows AddressOf EnumWnd, 0
    If fndHwnd Then
        Value = frmMain.Radius
        CDRec.dwData = SET_RADIUS
        CDRec.cbData = 4
        CDRec.lpData = VarPtr(Value)
        Disable = True
        SendMessageA fndHwnd, WM_COPYDATA, frmMain.hwnd, CDRec
        Disable = False
    End If
End Function
Private Function EnumWnd(ByVal hwnd As Long, ByVal lParam As Long) As Boolean
    Dim Cap As String, L As Long
    L = GetWindowTextLength(hwnd)
    Cap = Space$(L)
    GetWindowText hwnd, Cap, L + 1
    If Cap = "Circle" And hwnd <> frmMain.hwnd Then fndHwnd = hwnd: Exit Function
    If hwnd = 0 Then Stop
    EnumWnd = True
End Function
Private Function WindowProc(ByVal hwnd As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
    Select Case uMsg
    Case WM_COPYDATA
        Dim CDRec As COPYDATASTRUCT, Value As Long
        CopyMemory CDRec, ByVal lParam, LenB(CDRec)
        Select Case CDRec.dwData
        Case SET_RADIUS
            If CDRec.cbData <> 4 Or Disable Then Exit Function
            GetMem4 CDRec.lpData, VarPtr(Value)
            frmMain.Radius = Value
            frmMain.hsbRadius.Value = frmMain.Radius
            WindowProc = True
        End Select
    Case Else
        WindowProc = CallWindowProcA(pPrevWndProc, hwnd, uMsg, wParam, lParam)
    End Select
End Function

Форма:
Кликните здесь для просмотра всего текста
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
Option Explicit
Dim mRadius As Long, fndHwnd As Long, Tmp As Boolean
 
Public Property Get Radius() As Long
    Radius = mRadius
End Property
Public Property Let Radius(ByVal Value As Long)
    If Value > 100 Then Value = 100
    If Value < 1 Then Value = 1
    Tmp = True
    mRadius = Value
    hsbRadius.Value = mRadius
    Me.Cls
    Me.Circle (Me.ScaleWidth / 2, Me.ScaleHeight / 2), mRadius
    Me.Refresh
    SendRadius
End Property
 
Private Sub Form_Load()
    Hook Me.hwnd
End Sub
 
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
    UnHook Me.hwnd
End Sub
 
Private Sub hsbRadius_Change()
    If Not Tmp Then Me.Radius = hsbRadius.Value Else Tmp = False
End Sub
Private Sub hsbRadius_Scroll()
    Call hsbRadius_Change
End Sub
Вложения
Тип файла: rar Обмен данными.rar (6.4 Кб, 13 просмотров)
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
30.05.2013, 00:08
Помогаю со студенческими работами здесь

как присвоить значение строчного масива - строчной переменной?
обьявляю Private Sub Form_Load() Dim a, b, c, d As String Dim e, f, g, h As Double Dim i, j, k, l As Integer Dim m(0 To 3)...

как присвоить значение строчного масива - строчной переменной?
обьявляю Private Sub Form_Load() Dim a, b, c, d As String Dim e, f, g, h As Double Dim i, j, k, l As Integer Dim m(0...

Как присвоить значение переменной, имя которой записано в массиве?
Доброго всем времени суток! Имеется несколько переменных и массив, в котором хранятся имена всех переменных. Как можно организовать...

Переменной S присвоить значение -1, если максимальный элемент массива А больше максимального элемента В
Ребята помогите решить задачу. нужно решение. Остался час на сдачу зачёта. Буду благодарна Вам за помощь. Заданы два массива А, B....

Переменной t присвоить значение 1 или 0 в зависимости от того, является ли натуральное число k степенью 3
Ребята, помогите написать программу на Visual Basic Переменной t присвоить значение 1 или 0 в зависимости от того, является ли...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru