Au sujet des API supportés par PureBasic

Vous avez une idée pour améliorer ou modifier PureBasic ? N'hésitez pas à la proposer.
pat
Messages : 411
Inscription : mar. 24/nov./2009 15:13

Au sujet des API supportés par PureBasic

Message par pat »

Bonjour à tous,
J'ai constaté, après avoir réussi laborieusement à trouver de la doc sur ces fameux API, que certains d'entre eux ne fonctionnaient pas même si les mots-clé étaient bien supportés par PureBasic.
En fait, PureBasic les ignorent purement et simplement (cela ne fonctionne pas).
Etant donné que les API sont quand même plus qu'important j'aurais souhaité que PureBasic puissent rendre compatibles un maximum d'entre eux même si je sais qu'étant de bas niveau (les API), PureBasic ne peut pas tout faire.
Merci à la Direction de PureBasic pour améliorer les choses.
:wink:
gnozal
Messages : 832
Inscription : mar. 07/déc./2004 17:35
Localisation : France
Contact :

Re: Au sujet des API supportés par PureBasic

Message par gnozal »

pat a écrit :Bonjour à tous,
J'ai constaté, après avoir réussi laborieusement à trouver de la doc sur ces fameux API, que certains d'entre eux ne fonctionnaient pas même si les mots-clé étaient bien supportés par PureBasic.
En fait, PureBasic les ignorent purement et simplement (cela ne fonctionne pas).
??? Exemple ???

D'une manière générale, une fonction API 'MaFonction()' est utilisable directement dans Purebasic sous la forme 'MaFonction_()' (avec un caractère souligné '_').
Exemple (appel direct sans déclaration) :

Code : Tout sélectionner

    GetWindowRect_(hWnd, @MyRect.RECT)
On peut aussi accéder aux fonctions API en faisant appel aux fonctions de la DLL concernée.
Exemple (fonction ZwUnmapViewOfSection() dans NTDLL.DLL) :

Code : Tout sélectionner

    Prototype.l ZwUnmapViewOfSection(Processhandle.l,BaseAdress.l) 
    Global ZwUnmapViewOfSection.ZwUnmapViewOfSection
    ntDLL = OpenLibrary(#PB_Any, "ntdll.dll")
    If ntDLL
      ZwUnmapViewOfSection = GetFunction(ntDLL, "ZwUnmapViewOfSection")
    EndIf
Fred
Site Admin
Messages : 2808
Inscription : mer. 21/janv./2004 11:03

Re: Au sujet des API supportés par PureBasic

Message par Fred »

Ca m'etonnerait que ca ne fonctionne pas, si la fonction est supportée: NomFonctionAPI_()
pat
Messages : 411
Inscription : mar. 24/nov./2009 15:13

Re: Au sujet des API supportés par PureBasic

Message par pat »

Bonjour à tous,
J'ai constaté que la fonction Initsystemshutdown_(...) supporté par PureBasic (le nom de la fonction à vérifier quand même mais vous la trouverez sans problème dans PureBasic) qui a pour mission d'éteindre l'ordinateur ne fonctionnait pas.
Merci de vérifier si j'ai raison ou non et cela permettrait de savoir si les API fonctionnent bien dans PureBasic.
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Re: Au sujet des API supportés par PureBasic

Message par djes »

Merci de toujours nous mettre de petits morceaux de code, prêts à fonctionner, pour nous éviter d'avoir à les refaire pour te répondre. En plus ça permet de mieux cibler le problème. La doc située là http://msdn.microsoft.com/en-us/library ... 85%29.aspx conseille de faire

Code : Tout sélectionner

InitiateSystemShutdown_("\\127.0.01", #NULL, 0, #true, #true);
Malheureusement je suis pour l'instant sur une machine sans PB, je ne peux donc pas essayer.
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Au sujet des API supportés par PureBasic

Message par Backup »

djes a écrit :Merci de toujours nous mettre de petits morceaux de code, prêts à fonctionner, pour nous éviter d'avoir à les refaire pour te répondre.
c'est aussi une technique qui permet d'avoir du code , lorsqu'on a rien a donner ... ;)
gnozal
Messages : 832
Inscription : mar. 07/déc./2004 17:35
Localisation : France
Contact :

Re: Au sujet des API supportés par PureBasic

Message par gnozal »

Bonjour à toi (et aux autres),
çà me parait plus être un problème de programmation qu'un problème Purebasic.
pat a écrit :... la fonction Initsystemshutdown_(...) ... ne fonctionnait pas.
Précisions ?
1. GetLastError_() : erreur rapportée par Windows
2. Droits utilisateur : cette fonction est soumise à des privilèges
...
pat a écrit :Merci de vérifier si j'ai raison ou non
Sans code et sans la configuration de la machine ni l'OS utilisé ?!
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Re: Au sujet des API supportés par PureBasic

Message par djes »

Dobro a écrit :
djes a écrit :Merci de toujours nous mettre de petits morceaux de code, prêts à fonctionner, pour nous éviter d'avoir à les refaire pour te répondre.
c'est aussi une technique qui permet d'avoir du code , lorsqu'on a rien a donner ... ;)
Accessoirement :mrgreen:
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Re: Au sujet des API supportés par PureBasic

Message par Le Soldat Inconnu »

pour arrêter le PC

Code : Tout sélectionner

Procedure ComputerShutDown(Param.l)
  ; Param = paramètre d'instinction de l'ordinateur
  ; 1 : quitter session
  ; 2 : arrêter
  ; 3 : redémarrer
 
  #TOKEN_ADJUST_PRIVILEGES = 32
  #TOKEN_QUERY = 8
  #SE_PRIVILEGE_ENABLED = 2
  #EWX_LOGOFF = 0
  #EWX_SHUTDOWN = 1
  #EWX_REBOOT = 2
  #EWX_FORCE = 4
  #EWX_POWEROFF = 8
  
  Structure MyLUID
    lowpart.l
    highpart.l
    Attributes.l
  EndStructure
  
  Structure MyTOKEN
    PrivilegeCount.l
    lowpart.l
    highpart.l
    Attributes.l
  EndStructure
  
  Protected hdlTokenHandle.l, tmpLuid.MyLUID, tkp.MyTOKEN, tkpNewButIgnored.MyTOKEN, lBufferNeeded.l

  OpenProcessToken_(GetCurrentProcess_(), #TOKEN_ADJUST_PRIVILEGES | #TOKEN_QUERY, @hdlTokenHandle)
  SysName.s = "" + Chr(0)
  Name.s = "SeShutdownPrivilege" + Chr(0)
  LookupPrivilegeValue_(SysName, Name, @tmpLuid)
  tmpLuid\Attributes = #SE_PRIVILEGE_ENABLED
  tkp\PrivilegeCount = 1
  tkp\lowpart = tmpLuid\lowpart
  tkp\highpart = tmpLuid\highpart
  tkp\Attributes = tmpLuid\Attributes
  AdjustTokenPrivileges_(hdlTokenHandle, 0, @tkp, SizeOf(MyTOKEN), @tkpNewButIgnored, @lBufferNeeded)
  
  Select Param
    Case 1 : ExitWindowsEx_(#EWX_LOGOFF | #EWX_FORCE, 0)
    Case 2 : ExitWindowsEx_(#EWX_SHUTDOWN | #EWX_FORCE, 0)
    Case 3 : ExitWindowsEx_(#EWX_REBOOT | #EWX_FORCE, 0)
  EndSelect
  
EndProcedure

ComputerShutDown(2)
Comme tu le vois, c'est pas simple, car Windows demande les privilèges avant d'autoriser à un programme d'arrêter Windows.

Si ta fonction ne marche pas, c'est les paramètres sont mauvais ou que les droits ne sont pas bon pour arrêter le PC. mais ce n'est pas un soucis de PB.
La seule chose qui peut empêcher une API de fonctionner, c'est une erreur de description des paramètres de la fonction (comme mettre un string à la place d'un pointer dans les paramètres de la fonction, mais c'est très très rare)
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
pat
Messages : 411
Inscription : mar. 24/nov./2009 15:13

Re: Au sujet des API supportés par PureBasic

Message par pat »

Merci à tous pour vos interventions.
Et plus particulièrement à Le Soldat Inconnu qui a fourni du code qui semble bien intéressant.
Il est clair que je suis un parfait débutant au sujet des API et vous avez raison tous contre moi. J'apprend doucement. En fait les API sur PB fonctionnent mais c'est moi qui suit insuffisant.
Je vais essayer de mettre en application ce que vous m'avez donné.
Et c'est effectivement bien compliqué que d'éteindre l'ordinateur par programme.
:oops:
Patrick88
Messages : 1564
Inscription : mer. 21/janv./2004 18:24

Re: Au sujet des API supportés par PureBasic

Message par Patrick88 »

[troll]
y'a une autre solution

acheter un boitier usb 1 ou 2 entrées sortie sur le net

commander via ce relais un treuil qui va tirer la prise secteur...

inconvénient : il faut mettre des sous dans le boitier, mais on peut le remplacer par une vieille imprimante bidouillée

avantage : pas de problème de priviléges...
[\troll]

:mrgreen:

pat
Avatar de l’utilisateur
cederavic
Messages : 1338
Inscription : lun. 09/févr./2004 23:38
Localisation : Bordeaux

Re: Au sujet des API supportés par PureBasic

Message par cederavic »

Patrick88 a écrit :[troll]
y'a une autre solution

acheter un boitier usb 1 ou 2 entrées sortie sur le net

commander via ce relais un treuil qui va tirer la prise secteur...

inconvénient : il faut mettre des sous dans le boitier, mais on peut le remplacer par une vieille imprimante bidouillée

avantage : pas de problème de priviléges...
[\troll]

:mrgreen:

pat
Le plus dur sera pour debugger :lol:
Répondre