Gestion des Pocket-PC avec Rapi.dll (Version Final)
Publié : lun. 08/juin/2009 19:44
Bonjour tout le monde,
Apres pas mal de recherche et pas mal d’aide des membres, j’ai pas mal avance sur mon code de gestion des Pocket-PC, mais ce n'est pas encore fini.
Je vous mets mes avancements, je pense que ca peu servir ?
Attention, il faut active la gestion Unicode dans le compilateur.
Cordialement,
GallyHC
PS: Encore merci à tout ce qui m'on aide a déjà faire cela et dans l'esprits du purebaic je donnerais le code complet pour que ce qui auront besoin de faire la même chose ne cherche pas trop
Apres pas mal de recherche et pas mal d’aide des membres, j’ai pas mal avance sur mon code de gestion des Pocket-PC, mais ce n'est pas encore fini.
Je vous mets mes avancements, je pense que ca peu servir ?
Attention, il faut active la gestion Unicode dans le compilateur.
Code : Tout sélectionner
; +======================================================+
; | GESTION DE RAPI.DLL EN PUREBAIC. |
; +------------------------------------------------------+
; | |
; +--------------+---------------------------------------+
; | VER & REV | 0.0.1 RC0 |
; +--------------+---------------------------------------+
; | Program type | PUREBASIC 4.30 (MODULE) |
; +======================================================+
; +======================================================+
; | Original Version: 0.0.1 RC0 | |
; +--------------+-----------------+---------------------+
; | Created by | GallyHomeCorp |
; | Graphix by | |
; +======================================================+
; +======================================================+
; | Original Version: | |
; +--------------+-----------------+---------------------+
; | Created by | |
; | Graphix by | |
; +--------------+---------------------------------------+
; | Comments: | |
; +--------------+ |
; | |
; | |
; | |
; +======================================================+
; ****************************************************************************
; ****************************************************************************
; ****************************************************************************
; ****************************************************************************
; +--------------------------------------------------------------------------+
; | |
; +--------------------------------------------------------------------------+
;- DECLARATION DES VARIABLES.
EnableExplicit
#OPENLIB_0 = 1
#ONE_SECOND = 1000
#TIME_WAIT_READ = 5
#INVALID_HANDLE_VALUE = -1
#GENERIC_READ = $80000000
#GENERIC_WRITE = $40000000
#CREATE_NEW = 1
#OPEN_EXISTING = 3
#FILE_ATTRIBUTE_READONLY = $1
#FILE_ATTRIBUTE_HIDDEN = $2
#FILE_ATTRIBUTE_SYSTEM = $4
#FILE_ATTRIBUTE_DIRECTORY = $10
#FILE_ATTRIBUTE_SPECIAL = $14
#FILE_ATTRIBUTE_ARCHIVE = $20
#FILE_ATTRIBUTE_NORMAL = $80
#FILE_ATTRIBUTE_TEMPORARY = $100
#FILE_ATTRIBUTE_STORAGE = $110
#FILE_ATTRIBUTE_COMPRESSED = $800
Structure RAPIINIT
cbSize.l
heRapiInit.l
hrRapiInit.l
EndStructure
Structure CEOSVERSIONINFO
dwOSVersionInfoSize.l
dwMajorVersion.l
dwMinorVersion.l
dwBuildNumber.l
dwPlatformId.l
szCSDVersion.s{128}
EndStructure
Structure CE_FIND_DATA
dwFileAttributes.l
ftCreationTime.FILETIME
ftLastAccessTime.FILETIME
ftLastWriteTime.FILETIME
nFileSizeHigh.l
nFileSizeLow.l
dwOID.l
cFileName.s{256}
EndStructure
; ****************************************************************************
; ****************************************************************************
; ****************************************************************************
; ****************************************************************************
; +--------------------------------------------------------------------------+
; | |
; +--------------------------------------------------------------------------+
Procedure.b RAPIConnect()
; INITIALISATION DE LA CONNEXION (RAPI.DLL).
If OpenLibrary(#OPENLIB_0, "rapi.dll")
Define Hr.l
Define dwTimeout.l
Define dwWaitRet.l
Protected pRapiInit.RAPIINIT
dwTimeout = #TIME_WAIT_READ * #ONE_SECOND
pRapiInit\cbSize = SizeOf(pRapiInit)
pRapiInit\heRapiInit = 0
pRapiInit\hrRapiInit = 0
Hr = CallFunction(#OPENLIB_0, "CeRapiInitEx", @pRapiInit)
If Hr>-1
dwWaitRet = WaitForSingleObject_(pRapiInit\heRapiInit, dwTimeout)
If dwWaitRet = 0
If pRapiInit\hrRapiInit >= 0
ProcedureReturn #True
Else
Goto RAPIClose
EndIf
Else
Goto RAPIClose
EndIf
Else
Goto RAPIClose
EndIf
Else
ProcedureReturn #False
EndIf
RAPIClose:
If Hr >= 0
CallFunction(#OPENLIB_0, "CeRapiUninit")
EndIf
ProcedureReturn #False
EndProcedure
Procedure.b RAPIClose()
; FERMETURE DE LA CONNEXION (RAPI.DLL).
CallFunction(#OPENLIB_0, "CeRapiUninit")
CloseLibrary(#OPENLIB_0)
EndProcedure
Procedure.s RAPIGetCEOSVersionString()
; DONNE LA VERSION DU POCKET-PC.
Protected ceosver.CEOSVERSIONINFO
ceosver\dwOSVersionInfoSize = SizeOf(ceosver)
CallFunction(#OPENLIB_0, "CeGetVersionEx", @ceosver)
ProcedureReturn Str(ceosver\dwMajorVersion) + "." + Str(ceosver\dwMinorVersion) + "." + Str(ceosver\dwBuildNumber) + " " + ceosver\szCSDVersion
EndProcedure
Procedure.b RAPIIsConnect()
; VERIFICATION DE LA CONNEXION.
If RapiGetCEOSVersionString()<>""
ProcedureReturn #True
Else
ProcedureReturn #False
EndIf
EndProcedure
; ****************************************************************************
; ****************************************************************************
; ****************************************************************************
; ****************************************************************************
; +--------------------------------------------------------------------------+
; | |
; +--------------------------------------------------------------------------+
Procedure.s RAPIFindStorage()
;
Define searchhandle.l
Define findreturn.l
Define result.s
Define storage.s
Define filereps.s
Protected finddata.CE_FIND_DATA
filereps = "\*"
searchhandle = CallFunction(#OPENLIB_0, "CeFindFirstFile", @filereps, finddata)
If searchhandle <> #INVALID_HANDLE_VALUE
Repeat
result = finddata\cFileName
If finddata\dwFileAttributes = #FILE_ATTRIBUTE_STORAGE And LCase(result) <> "storage" And LCase(result) <> "bluetooth"
storage = "\" + result + "\"
Goto RAPIEnd
EndIf
findreturn = CallFunction(#OPENLIB_0, "CeFindNextFile", searchhandle, finddata)
Until findreturn = 0
EndIf
RAPIEnd:
ProcedureReturn storage
EndProcedure
; ****************************************************************************
; ****************************************************************************
; ****************************************************************************
; ****************************************************************************
; +--------------------------------------------------------------------------+
; | |
; +--------------------------------------------------------------------------+
Procedure.b RAPIListFiles(filereps.s)
;
Define searchhandle.l
Define findreturn.l
Define result.s
Protected finddata.CE_FIND_DATA
If Right(filereps,1) <> "*"
filereps = filereps + "*"
EndIf
searchhandle = CallFunction(#OPENLIB_0, "CeFindFirstFile", @filereps, finddata)
If searchhandle <> #INVALID_HANDLE_VALUE
Repeat
result = finddata\cFileName
Debug result
findreturn = CallFunction(#OPENLIB_0, "CeFindNextFile", searchhandle, finddata)
Until findreturn = 0
EndIf
EndProcedure
; ****************************************************************************
; ****************************************************************************
; ****************************************************************************
; ****************************************************************************
; +--------------------------------------------------------------------------+
; | |
; +--------------------------------------------------------------------------+
Procedure.l RAPIOpenFile(filename.s, mode.i, createnew.b, flags.l)
;
Define lfilemode.l
Define createdist.l
Protected security.SECURITY_ATTRIBUTES
Select mode
Case 1: lfilemode = #GENERIC_READ
Case 2: lfilemode = #GENERIC_WRITE
Case 3: lfilemode = #GENERIC_READ Or #GENERIC_WRITE
EndSelect
If createnew = #True
createdist = #CREATE_NEW
Else
createdist = #OPEN_EXISTING
EndIf
ProcedureReturn CallFunction(#OPENLIB_0, "CeCreateFile", filename, lfilemode, 0, security, createdist, flags, 0)
EndProcedure
; ****************************************************************************
; ****************************************************************************
; ****************************************************************************
; ****************************************************************************
; +--------------------------------------------------------------------------+
; | |
; +--------------------------------------------------------------------------+
Procedure.b RAPICopyCEFileToPC(CESourceFile.s,PCDestFile.s)
;
Define lresult.l
Define lcefilehandle.l
lcefilehandle = RAPIOpenFile(CESourceFile, 1, #False, #FILE_ATTRIBUTE_NORMAL)
If lcefilehandle <> #INVALID_HANDLE_VALUE
MessageRequester("Connexion au Pocket-PC", "PASSE", #PB_MessageRequester_Ok)
Else
MessageRequester("Connexion au Pocket-PC", "ERREUR", #PB_MessageRequester_Ok)
EndIf
lresult = CallFunction(#OPENLIB_0, "CeCloseHandle", lcefilehandle)
EndProcedure
Procedure.b RAPICopyPCFileToCE(PCSourceFile.s, CEDestFile.s)
;
EndProcedure
; ****************************************************************************
; ****************************************************************************
; ****************************************************************************
; ****************************************************************************
; +--------------------------------------------------------------------------+
; | |
; +--------------------------------------------------------------------------+
Procedure.b RAPIFileExists(filename.s)
;
Define lresult.l
Define lCeFileHandle.l
lcefilehandle = RAPIOpenFile(filename, 1, #False, #FILE_ATTRIBUTE_NORMAL)
If lcefilehandle <> #INVALID_HANDLE_VALUE
lresult = CallFunction(#OPENLIB_0, "CeCloseHandle", lcefilehandle)
ProcedureReturn #True
Else
ProcedureReturn #False
EndIf
EndProcedure
Procedure.b RAPIDeleteFile(filename.s)
;
ProcedureReturn CallFunction(#OPENLIB_0, "CeDeleteFile", filename)
EndProcedure
; ****************************************************************************
; ****************************************************************************
; ****************************************************************************
; ****************************************************************************
; +--------------------------------------------------------------------------+
; | |
; +--------------------------------------------------------------------------+
Procedure.b RAPIExecOnDevice(fileexec.s,command.s)
;
Protected newprocinfo.PROCESS_INFORMATION
If CallFunction(#OPENLIB_0, "CeCreateProcess", @fileexec, @command, 0, 0, 0, 0, 0, 0, 0, newProcInfo) = 0
ProcedureReturn #False
Else
ProcedureReturn #True
EndIf
EndProcedure
; ****************************************************************************
; ****************************************************************************
; ****************************************************************************
; ****************************************************************************
; +--------------------------------------------------------------------------+
; | |
; +--------------------------------------------------------------------------+
If RapiConnect() = #True
If RapiIsConnect() = #True
MessageRequester("Connexion au Pocket-PC", "VERSION: " + RapiGetCEOSVersionString(), #PB_MessageRequester_Ok)
RapiListFiles("\")
MessageRequester("Connexion au Pocket-PC", "Carte de Stockage : " + RapiFindStorage(), #PB_MessageRequester_Ok)
RAPIExecOnDevice("peghelp.exe","")
RAPICopyCEFileToPC("\ogre.txt","c:\test.txt")
If RAPIFileExists("\ogre.txt")
MessageRequester("Connexion au Pocket-PC", "File ogre.txt : Exist", #PB_MessageRequester_Ok)
Else
MessageRequester("Connexion au Pocket-PC", "File ogre.txt : NotExist", #PB_MessageRequester_Ok)
EndIf
RapiClose()
EndIf
EndIf
GallyHC
PS: Encore merci à tout ce qui m'on aide a déjà faire cela et dans l'esprits du purebaic je donnerais le code complet pour que ce qui auront besoin de faire la même chose ne cherche pas trop
