Page 1 sur 1

Gestion des Pocket-PC avec Rapi.dll (Version Final)

Publié : lun. 08/juin/2009 19:44
par GallyHC
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.

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
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 :D

Re: Gestion des Pocket-PC avec Rapi.dll

Publié : ven. 16/oct./2009 18:11
par GallyHC
Bonjour tous,

J'ai fini la gestion des pocket-pc et tout fonctionne maintenant. Sa ma pris pas mal de temps mais j'y suis arrive.

Cordialement,
GallyHC

Re: Gestion des Pocket-PC avec Rapi.dll

Publié : dim. 18/oct./2009 15:18
par GallyHC
Bonjour tout le monde,

Après des heures de travail sur la « RAPI.DLL », tout fonctionne à 100% et voici la liste des fonctions qui sont actuellement fonctionnelles.

Code : Tout sélectionner

RAPIConnect
RAPIClose
RAPIGetCEOSVersionString
RAPIIsConnected
RAPIGDesktopDeviceCaps
RAPIErrorInformation
RAPIFindStorage
RAPIListFiles
RAPIOpenFile
RAPICopyCEFileToPC
RAPICopyPCFileToCE
RAPIFileExists
RAPICreateDirectory
RAPIDeleteFile
RAPIRenameFile
RAPIExecOnDevice
RAPIMemorySpace
RAPIStorageSpace
RAPIPowerStatus
Voici l'url ou ce trouve le code-source : http://www.koakdesign.info/?url=04&num=9&val=1.

J’espère ne pas avoir fait trop de faute d’orthographe dans mon texte d’explication. A plusieurs reprise on ma fait des remarques sur mon manque de sérieux sur mon orthographe, ce qui est vrai, mais cela n’empêche la qualité que je fais preuve sur mes codes-sources.

Cordialement,
GallyHC

Re: Gestion des Pocket-PC avec Rapi.dll (Version Final)

Publié : lun. 19/oct./2009 8:28
par Fred
C'est interessant, merci pour ta contribution !

Re: Gestion des Pocket-PC avec Rapi.dll

Publié : lun. 19/oct./2009 13:26
par Backup
GallyHC a écrit :mais cela n’empêche la qualité que je fais preuve sur mes codes-sources.
et personne n'a sous entendu le contraire :roll:

Re: Gestion des Pocket-PC avec Rapi.dll (Version Final)

Publié : ven. 23/oct./2009 16:27
par beauregard
Fred a écrit :C'est interessant, merci pour ta contribution !
je me joint joyeusement, merci GallyHC :)
pb sur ces petites machines à tout faire, tel est l'avenir que j'espère proche.