Автор вопроса: Dark Engine | Web-сайт:www.wentas.2bb.ru | ICQ: 343191665
Все, что мне стало известно об ограничениях системы Windows напрочь мешает мне. Этот вопрос уже задавался, однако ответ был отрицательным. А вопрос таков: как программно переслать большую строку в параметр вызываемой программе. Мне необходимо знать, есть ли в АПИ функция, позволяющая это, и как она выглядит (библиотека,объявление и, если можно, комментарии)
Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
Sub Form_Load()
ShellExecute 0,"open","c:\windows\notepad.exe c:\winzip.log",vbNullString,vbNullString,1
End Sub
Держи.
Для тебя написал.
Пиво я не пью, поэтому с тебя бутылка лимонада
Это отправитель.
Private Declare Function GetWindowThreadProcessId Lib "user32.dll" ( _
ByVal hwnd As Long, _
ByRef lpdwProcessId As Long) As Long
Private Sub Form_Load()
 im SrcStr As String
SrcStr = "Hello World!"
 im PiD As Long
GetWindowThreadProcessId Me.hwnd, PiD
Shell "Project1.exe " & PiD & "," & StrPtr(SrcStr) & "," & Len(SrcStr)
End Sub
===
А это получатель.
Private Declare Sub CopyMemory Lib "kernel32.dll" Alias "RtlMoveMemory" ( _
ByRef Destination As Any, _
ByRef Source As Any, _
ByVal Length As Long)
Private Declare Function ReadProcessMemory Lib "kernel32.dll" ( _
ByVal hProcess As Long, _
ByRef lpBaseAddress As Any, _
ByRef lpBuffer As Any, _
ByVal nSize As Long, _
ByRef lpNumberOfBytesWritten As Long) As Long
Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Private Const PROCESS_ALL_ACCESS As Long = &H1F0FFF
Dim Buff() As Byte
Private Sub Form_Load()
 im BigDest As String, BigSrcAddr As Long, BigSrcAddr_Len As Long
 im SrcPiD As Long
 im pHandle As Long
pHandle = OpenProcess(PROCESS_ALL_ACCESS, False, SrcPiD)
If (pHandle = 0) Then
MsgBox "Unable to open process!"
Exit Sub
End If
 im strBuff As String
ReDim Buff(BigSrcAddr_Len * 2)
ReadProcessMemory pHandle, ByVal BigSrcAddr - 0, Buff(0), BigSrcAddr_Len * 2, 0&
strBuff = Space$(UBound(Buff))
CopyMemory ByVal StrPtr(strBuff), ByVal VarPtr(Buff(0)), UBound(Buff)
MsgBox strBuff
End Sub
 im pHandle As Long
pHandle = OpenProcess(PROCESS_ALL_ACCESS, False, SrcPiD)
If (pHandle = 0) Then
MsgBox "Unable to open process!"
Exit Sub
End If
 im strBuff As String
ReDim Buff(BigSrcAddr_Len * 2)
ReadProcessMemory pHandle, ByVal BigSrcAddr - 0, Buff(0), BigSrcAddr_Len * 2, 0&
strBuff = Space$(UBound(Buff))
CopyMemory ByVal StrPtr(strBuff), ByVal VarPtr(Buff(0)), UBound(Buff)
Erase Buff
CloseHandle pHandle
MsgBox strBuff
End Sub
А почему моя система его игнорирует, просто пропускает как комментарий и все! Никакого действия. Может есть другой вариант объявления или лругой способ реализации?