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

Узнай цену своей работы

Формулировка задачи:

Здравствуйте, есть у меня 2 проги написанные на vb, в одной к примеру, переменная a=0. Кто знает можно ли другой прогой присвоить ей другое значение? Спасибо.
При этом думаю понадобятся api
Листинг программы
  1. Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
  2. 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

Решение задачи: «Присвоить переменной значение своей прогой»

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

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 4.267 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы