¿Cómo pasar valor a exe en vb?
1. Escriba un "programa de configuración"
Cree un nuevo proyecto, agregue un Texto1 al formulario Form1, luego agregue un Comando1 y escriba el siguiente código en el formulario:
p>
Opción explícita
Const privada szName = "Global\MyFileMappingObject"
Const privada WM_USER = &H400
Const privada INVALID_HANDLE_VALUE = -1
Const privada PAGE_READWRITE = 4
Const privada STANDARD_RIGHTS_REQUIRED = &HF0000
Const privada SECTION_QUERY = &H1
Const privada SECTION_MAP_WRITE = &H2
Const privada SECTION_MAP_READ = &H4
Const privada SECTION_MAP_EXECUTE = &H8
Const privada SECTION_EXTEND_SIZE = &H10
Const privada SECTION_ALL_ACCESS = STANDARD_RIGHTS_REQUIRED o SECTION_QUERY o SECTION_MAP_WRITE o SECTION_MAP_READ o SECTION_ MAP_EXECUTE o SECTION_EXTEND_SIZE
PrivateConst FILE_MAP_ALL_ACCESS = SECTION_ALL_ ACCESS
Función de declaración privada CreateFileMapping Lib "kernel32" alias "CreateFileMappingA" (ByVal hFile As Long, ByVal byVal hFile As Long, ByVal lpFileMappigAttributes mientras, ByVal flProtect mientras, ByVal dwMaximumSizeHigh mientras, ByVal dwMaximumSizeLow mientras, ByVal lpName como cadena) mientras
Función de declaración privada MapViewOfFile Lib "kernel32" (ByVal hFileMappingObject mientras, ByVal dwDesiredAccess Mientras, ByVal dwFileOffsetHigh Mientras, ByVal dwFileOffsetLow Mientras, ByVal dwNumberOfBytesToMap Mientras) Mientras
Función de declaración privada UnmapViewOfFile Lib "kernel32" (lpBaseAddress como cualquiera) Mientras
Privado Declarar función CloseHandle Lib "kernel32" (ByVa
l hObject) Siempre y cuando
Declaración privada Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destino como cualquiera、
Declaración privada Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destino como cualquiera, Fuente como cualquiera, Longitud ByVal tan larga)
Función de declaración privada SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Función de declaración privada FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String、ByVal lpWindowName As String) As Long
Subcomando privado1_Click()
Atenuar hMapFile mientras
Atenuar pBuf mientras
Atenuar szMsg() como byte
Atenuar Buff_Size As Long
Atenuar hwnd1 As Long
Si Text1.Text = "" Entonces salga de Sub
szMsg = StrConv(Text1.Text, vbFromUnicode)
Buff_Size = UBound (szMsg) + 1
hMapFile = CreateFileMapping(INVALID_HANDLE_VALUE, 0, PAGE_READWRITE, 0, Buff_Size, szName)
Si hMapFile <0 entonces
pBuf = MapViewOfFile(hMapFile, FILE_MAP_ALL_ACCESS, 0, 0, Buff_Size)
Si pBuf <> 0 entonces
Llamar a CopyMemory(ByVal pBuf, szMsg(0 ), Buff_Size)
hwnd1 = FindWindow(vbNullString, "Generar programa")
Si hwnd1 <> 0 entonces
Llame a SendMessage(hwnd1, WM_USER, Buff_Size, ByVal 0)
Finalizar si
Llamar a UnmapViewOfFile(pBuf)
Finalizar si
Llamar a CloseHandle(hMapFile)
Finalizar si
End Sub
Sub privado Form_Load()
Me.Caption = "Programa de configuración"
Fin Sub
Guardar en disco, compilar el programa y salir.
El segundo paso es escribir el "generador"
Crea un nuevo proyecto, agrega Texto1 al formulario Form1 y escribe el siguiente código en el formulario:
Opción explícita
Función de declaración privada SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Sub Form_Load()
Me.hwnd, GWL_WNDPROC, PrevHwnd)
End Sub
Agrega otro módulo Module1 y escribe el siguiente código en el módulo:
Opción explícita
Const privada szName = "Global\MyFileMappingObject"
Const pública GWL_WNDPROC = (-4)
Const privada WM_USER = &H400
Const privada STANDARD_RIGHTS_REQUIRED = & HF0000
Const privada SECTION_QUERY = &H1
Const privada SECTION_MAP_WRITE = &H2
Const privada SECTION_MAP_READ = &H4
Const privada SECTION_MAP_EXECUTE = &H8
Const privada SECTION_EXTEND_SIZE = &H10
Const privada SECTION_ALL_ACCESS = STANDARD_RIGHTS_REQUIRED o SECTION_QUERY o SECTION_MAP_WRITE o SECTION_MAP_READ o SECTION_MAP_EXECUTE o _TAMAÑO
Const privada FILE_MAP_ALL_ACCESS = SECTION_ALL_ACCESS