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

Codes specifiques à Windows
Avatar de l’utilisateur
GallyHC
Messages : 1703
Inscription : lun. 17/déc./2007 12:44

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

Message 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
Dernière modification par GallyHC le dim. 18/oct./2009 15:39, modifié 3 fois.
Avatar de l’utilisateur
GallyHC
Messages : 1703
Inscription : lun. 17/déc./2007 12:44

Re: Gestion des Pocket-PC avec Rapi.dll

Message 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
Configuration : Tower: Windows 10 (Processeur: i7 "x64") (Mémoire: 16Go) (GeForce GTX 760 - 2Go) - PureBasic 5.72 (x86 et x64)
Avatar de l’utilisateur
GallyHC
Messages : 1703
Inscription : lun. 17/déc./2007 12:44

Re: Gestion des Pocket-PC avec Rapi.dll

Message 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
Configuration : Tower: Windows 10 (Processeur: i7 "x64") (Mémoire: 16Go) (GeForce GTX 760 - 2Go) - PureBasic 5.72 (x86 et x64)
Fred
Site Admin
Messages : 2648
Inscription : mer. 21/janv./2004 11:03

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

Message par Fred »

C'est interessant, merci pour ta contribution !
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Gestion des Pocket-PC avec Rapi.dll

Message 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:
beauregard
Messages : 1307
Inscription : dim. 08/juil./2007 18:32
Localisation : Toulouse

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

Message 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.
Répondre