je souhaiterais lire les données d'un pipe (par exemple \\.\Pipe\lsarpc ) mais je ne sais pas du tout comment faire. J'ai éssayé de bidouillé avec la documentation de MSDN (http://msdn.microsoft.com/en-us/library ... S.85).aspx ) mais aucun resultat
Lire dans un pipe
-
lepiaf31
- Messages : 510
- Inscription : dim. 25/mars/2007 13:44
- Localisation : Toulouse, France
- Contact :
Lire dans un pipe
salut,
je souhaiterais lire les données d'un pipe (par exemple \\.\Pipe\lsarpc ) mais je ne sais pas du tout comment faire. J'ai éssayé de bidouillé avec la documentation de MSDN (http://msdn.microsoft.com/en-us/library ... S.85).aspx ) mais aucun resultat
.
je souhaiterais lire les données d'un pipe (par exemple \\.\Pipe\lsarpc ) mais je ne sais pas du tout comment faire. J'ai éssayé de bidouillé avec la documentation de MSDN (http://msdn.microsoft.com/en-us/library ... S.85).aspx ) mais aucun resultat
J'avais trouvé ce bout de code sur le forum anglais
Code : Tout sélectionner
Structure POINTAPI
x.l
Y.l
EndStructure
Global *Mem1.l
Global *Mem2.l
Global Img1.l
Global Img2.l
Global tWidth.l
Global tHeight.l
Global Width.f
Global Height.f
Declare SendImage(tImg)
Procedure Screenshot(srcDc,Width,Height,tWidth,tHeight)
hImage = CreateImage(#PB_Any,tWidth,tHeight)
If hImage
hdc = StartDrawing(ImageOutput(hImage))
p.POINTAPI
p\x = 0
p\y = 0
SetStretchBltMode_(hdc,#HALFTONE)
SetBrushOrgEx_(hdc, 0, 0, @p)
StretchBlt_(hdc, 0, 0, tWidth, tHeight, srcDc, 0, 0,Width,Height, #SRCCOPY)
StopDrawing()
ReleaseDC_(#Null,srchdc)
ReleaseDC_(#Null,hdc)
EndIf
ProcedureReturn hImage
EndProcedure
Procedure SendImage(tImg)
UsePNGImageEncoder()
UsePNGImageDecoder()
ImageSize = ImageWidth(tImg) * ImageHeight(tImg)
ImgDataPipe = CreateNamedPipe_("\\.\pipe\ImgDataPipe",#PIPE_ACCESS_INBOUND|#FILE_FLAG_OVERLAPPED,#PIPE_TYPE_BYTE|#PIPE_READMODE_BYTE|#PIPE_NOWAIT,1,ImageSize,ImageSize,#NMPWAIT_USE_DEFAULT_WAIT,#Null)
PNGImageData = AllocateMemory(ImageSize) ;The Size of the png is smaller, but we dont know yet how much exactly
SaveImage(tImg,"\\.\pipe\ImgDataPipe",#PB_ImagePlugin_PNG)
ReadFile_(ImgDataPipe,PNGImageData,ImageSize,@PNGImageSize,#Null)
CloseHandle_(ImgeDataPipe)
If CatchImage(1,PNGImageData,PNGImageSize)
SetGadgetState(0,ImageID(1))
EndIf
EndProcedure
ExamineDesktops()
Width =DesktopWidth(0)
Height = DesktopHeight(0)
tWidth = (Width / Height) * 600
tHeight = 600
MemorySize = (tWidth * tHeight << 2)
*Mem1 = AllocateMemory(MemorySize)
*Mem2 = AllocateMemory(MemorySize)
*Dest = AllocateMemory(MemorySize)
ldest = MemorySize
hdc = GetDC_(0)
Img2 = CreateImage(#PB_Any,tWidth,tHeight,24)
OpenWindow(0,0,0,800,600,"",$CF0001)
CreateGadgetList(WindowID(0))
ImageGadget(0,0,0,0,0,0)
ButtonGadget(1,10,10,40,20,"go")
Repeat
Event = WaitWindowEvent()
Select Event
Case #PB_Event_Gadget
Select EventGadget()
Case 1
Img1 = Screenshot(hdc,Width,Height,tWidth,tHeight)
sendImage(Img1)
;uncomment and it fails possibly due to a conflict in references to the lz libs in png and PureZip
;If PureZIP_PackMemory(*mem1, sz+16, *Dest, @ldest) = #Z_OK
; MessageRequester("","ziped")
;EndIf
EndSelect
Case #WM_CLOSE
quit =1
EndSelect
Until quit -
lepiaf31
- Messages : 510
- Inscription : dim. 25/mars/2007 13:44
- Localisation : Toulouse, France
- Contact :
Bon alors je suis bloqué avec un tout petit bout de code :
C'est la fonction ReadFile_() qui semble poser une problème: elle ne s'arrete jamais ! Si quelqu'un à une explication ?
Code : Tout sélectionner
If WaitNamedPipe_("\\.\pipe\lsass", #NMPWAIT_USE_DEFAULT_WAIT)
Debug "ok"
hPipe = CreateFile_("\\.\pipe\lsass", #GENERIC_READ, #FILE_SHARE_READ, 0, #OPEN_EXISTING, #FILE_ATTRIBUTE_NORMAL, 0)
If hPipe
Debug hPipe
Text.s = Space(1000)
Readed.l
ReadFile_(hPipe, @Text, 1000, @Readed, 0)
Debug Text
Else
Debug "0"
EndIf
EndIf
faut voir, mais si ton code est situé dans une boucle quelconque (repeat-until par exemple) c'est normal
parceque tel quel il va creer un fichier et chercher a le lire en permanance !
puisqu'il n'y a pas de condition de sortie
genre
qui permette au code de ne pas entrer systematiquement dans tes if !!
je pense meme qu'il faudrai faire avant ton
un if qui regarde si le fichier existe deja... 
mais je me trompe peut etre..
parceque tel quel il va creer un fichier et chercher a le lire en permanance !
puisqu'il n'y a pas de condition de sortie
genre
Code : Tout sélectionner
ReadFile_(hPipe, @Text, 1000, @Readed, 0)
hPipe=#false
je pense meme qu'il faudrai faire avant ton
Code : Tout sélectionner
hPipe = CreateFile_("\\.\pipe\lsass", #GENERIC_READ, #FILE_SHARE_READ, 0, #OPEN_EXISTING, #FILE_ATTRIBUTE_NORMAL, 0) mais je me trompe peut etre..