Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: String Stream Добавлено: 30.08.04 11:39  

Автор вопроса:  Dark Engine | Web-сайт: www.wentas.2bb.ru | ICQ: 343191665 
Все, что мне стало известно об ограничениях системы Windows напрочь мешает мне. Этот вопрос уже задавался, однако ответ был отрицательным. А вопрос таков: как программно переслать большую строку в параметр вызываемой программе. Мне необходимо знать, есть ли в АПИ функция, позволяющая это, и как она выглядит (библиотека,объявление и, если можно, комментарии)

Ответить

  Ответы Всего ответов: 6  

Номер ответа: 1
Автор ответа:
 dNW



Вопросов: 30
Ответов: 683
 Профиль | | #1 Добавлено: 30.08.04 12:08
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

Попробуй так...

Ответить

Номер ответа: 2
Автор ответа:
 CyRax



Разработчик Offline Client

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #2
Добавлено: 30.08.04 12:48
 Держи.
 Для тебя написал.
 Пиво я не пью, поэтому с тебя бутылка лимонада ;)

 Это отправитель.
Private Declare Function GetWindowThreadProcessId Lib "user32.dll" ( _
     ByVal hwnd As Long, _
     ByRef lpdwProcessId As Long) As Long

Private Sub Form_Load()
 ;Dim SrcStr As String
 SrcStr = "Hello World!"
 ;Dim 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()
 ;Dim BigDest As String, BigSrcAddr As Long, BigSrcAddr_Len As Long
 ;Dim SrcPiD As Long
 
 AddrAndLen = Split(Command$, ",";)
 SrcPiD = Val(AddrAndLen(0))
 BigSrcAddr = Val(AddrAndLen(1))
 BigSrcAddr_Len = Val(AddrAndLen(2))
 
 ;Dim pHandle As Long
 pHandle = OpenProcess(PROCESS_ALL_ACCESS, False, SrcPiD)
    If (pHandle = 0) Then
         MsgBox "Unable to open process!"
         Exit Sub
    End If
 ;Dim 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

Ответить

Номер ответа: 3
Автор ответа:
 CyRax



Разработчик Offline Client

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #3
Добавлено: 30.08.04 12:58
Забыл. В конце получателя добавь CloseHandle pHandle

Ответить

Номер ответа: 4
Автор ответа:
 CyRax



Разработчик Offline Client

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #4
Добавлено: 30.08.04 13:05
Так спешил обрадовать, что забыл написать код очистки байтового буфера.
 Короче, вот окончательный вариант получателя(без объявлений):

Private Sub Form_Load()
 ;Dim BigSrcAddr As Long, BigSrcAddr_Len As Long
 ;Dim SrcPiD As Long
 
 AddrAndLen = Split(Command$, ",";)
 SrcPiD = Val(AddrAndLen(0))
 BigSrcAddr = Val(AddrAndLen(1))
 BigSrcAddr_Len = Val(AddrAndLen(2))
 
 ;Dim pHandle As Long
 pHandle = OpenProcess(PROCESS_ALL_ACCESS, False, SrcPiD)
    If (pHandle = 0) Then
         MsgBox "Unable to open process!"
         Exit Sub
    End If
 ;Dim 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

Ответить

Номер ответа: 5
Автор ответа:
 Dark Engine



ICQ: 343191665 

Вопросов: 51
Ответов: 98
 Web-сайт: www.wentas.2bb.ru
 Профиль | | #5
Добавлено: 01.09.04 14:58
Эй! Вот вариант с ShellExecute должен бы подойти, но мой интерпретатор его просто игнорирует! Не покажете абсолютно рабочий вариант?

Ответить

Номер ответа: 6
Автор ответа:
 Dark Engine



ICQ: 343191665 

Вопросов: 51
Ответов: 98
 Web-сайт: www.wentas.2bb.ru
 Профиль | | #6
Добавлено: 01.09.04 15:02
А почему моя система его игнорирует, просто пропускает как комментарий и все! Никакого действия. Может есть другой вариант объявления или лругой способ реализации?

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам