Page 1 sur 3

Commande DOS

Publié : sam. 09/avr./2022 8:38
par brossden
Bonjour à tous
Il y a longtemps que je ne suis plus passer sur ce forum !
J'ai une question :
Comment exécuter une commande DOS avec PureBasic ?
Par exemple ce voudrais lancer "powercfg /batteryreport" pour connaitre l'état de santé de ma batterie.
J'espère de vous aurez la réponse comme à votre habitude.

En vous souhaitant une bon Week End
Denis

Re: Commande DOS

Publié : sam. 09/avr./2022 10:19
par falsam
Bonjour Denis.

RunProgram était pour moi la solution. Mais je n'arrive pas à obtenir le résultat de powercfg /batteryreport.

Avec le paramétre /list par contre ça fonctionne !!

Code : Tout sélectionner

EnableExplicit

Define Run = RunProgram("PowerCfg.exe", " /list", "", #PB_Program_Open|#PB_Program_Read|#PB_Program_Ascii)
Define Output.s

If Run
  While ProgramRunning(Run)
    If AvailableProgramOutput(Run)
      Output + ReadProgramString(Run) + Chr(13)
    EndIf
  Wend
  CloseProgram(Run) ; Close the connection to the program
EndIf

Debug Output

Re: Commande DOS

Publié : sam. 09/avr./2022 10:20
par Marc56
Bonjour brossden,

Le code le plus court: (sachant que la sortie de cette commande se fait sous forme d'une page HTML)

Code : Tout sélectionner

RunProgram("powercfg", "/batteryreport", GetTemporaryDirectory(), #PB_Program_Hide | #PB_Program_Wait)
RunProgram(GetTemporaryDirectory() + "battery-report.html")
Ne pas oublier #PB_Program_Wait avant d'ouvrir le rapport car il est lent à générer.
Après, si tu tapes powercfg /batteryreport /? tu as d'autres possibilités de sorties, dont le format XML si tu veux extraire des valeurs sans avoir à filtrer le HTML.

:wink:

Re: Commande DOS

Publié : sam. 09/avr./2022 10:40
par Mesa

Code : Tout sélectionner

prog$ = "cmd.exe" 
dosbox = RunProgram(prog$, "", "", #PB_Program_Open|#PB_Program_Read|#PB_Program_Write|#PB_Program_Hide|#PB_Program_Ascii) 

If dosbox  
	OpenWindow(0,0,0,400,500,"Results from DosBox",#PB_Window_ScreenCentered|#PB_Window_SystemMenu) 
	StartDrawing(WindowOutput(0)) 
	DrawText(65,200, "En cours...", #Black, GetSysColor_(#COLOR_BTNFACE)) 
	StopDrawing() 
	NewList results.s() 
	; 	WriteProgramStringN(dosbox, "ping google.com", #PB_Ascii) 
	WriteProgramStringN(dosbox, "powercfg /?", #PB_Ascii) 
	; 	WriteProgramStringN(dosbox, "powercfg /batteryreport", #PB_Ascii) 
	WriteProgramData(dosbox, #PB_Program_Eof, 0) 
	While ProgramRunning(dosbox) 
		If AvailableProgramOutput(dosbox) 
			AddElement(results()) 
			
			sOEM_in_unicode.s = ReadProgramString(dosbox, #PB_Ascii) 
			iByteLength = Len(sOEM_in_unicode) + 2      
			sOem_in_Ascii.s = Space(iByteLength)
			PokeS(@sOem_in_Ascii, sOEM_in_unicode, -1, #PB_Ascii)
			sunicode.s = Space(iByteLength)
			OemToChar_(@sOem_in_Ascii, @sunicode)
			results() = sunicode
			
		Else 
			Delay(1) 
		EndIf 
	Wend 
	AddElement(results()) 
	AddElement(results()) 
	results() = "Program finished with exit code = " + Str(ProgramExitCode(dosbox)) 
	CloseProgram(dosbox) 
	
	ListViewGadget(0,0,0,400,500) 
	ForEach results() 
		AddGadgetItem(0, -1, results()) 
	Next 
	Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
	
Else 
	MessageRequester("OOPS!", "Can't find " + prog$ ) 
EndIf 

Re: Commande DOS

Publié : sam. 09/avr./2022 11:34
par brossden
WOW ! Toujours aussi rapides

Un grand Merci à vous tous c'est super sympa comme dans mon souvenir !

Re: Commande DOS

Publié : lun. 11/avr./2022 17:32
par Kwai chang caine
Brooooosssdeeeennn !!!!
Je te croyais mort !!! :cry:
Rien que revoir ton pseudo, j'en croyais pas mes "zieux" 8O
Je suis replongé direct ...dans ma vie périnatale PB :mrgreen:

Image

En tout cas...ça fait toujours plaisir de lire les mots d'une vieille branche :wink:

PB un jour...PB toujours 8)

Re: Commande DOS

Publié : lun. 11/avr./2022 20:59
par Ar-S
brossden a écrit : Un grand Merci à vous tous c'est super sympa comme dans mon souvenir !
Très heureux de te relire !.

Re: Commande DOS

Publié : mar. 12/avr./2022 14:34
par Ollivier
Coucou Brossden, cool le signe de vie.
Bon ben voilà, tout a été dit :
- une commande PB : RunProgram()
- un pipe-line entre le programme exécuté, et PB
- une légère traduction des données échangées car les codes caractère ne représentent pas toujours la même chose.

Re: Commande DOS

Publié : jeu. 26/mai/2022 16:40
par brossden
Salut à tous.

Vous n'allez pas me croire mais depuis que je suis à la retraite je n'ai le temps de rien faire. Entre les dessins 3D pour créer des pièces, la découpe Laser l'utilisation de CNC (fraiseuses à commande numérique) tondre la pelouse... Dur dur la vie de retraité !
Je suis heureux de tous vous voir ici fidèles au poste Kwai chang caine, falsam, Ars, Ollivier ... !!!
Que devenez vous tous ? Retraités, bientôt retraités ou payez-vous encore la mienne pour quelques années !
J'essaierai de passer plus souvent ici promis.

Re: Commande DOS

Publié : jeu. 26/mai/2022 18:11
par Ar-S
héhé parti pour payer la tienne encore un bon moment en espérant en toucher une un jour :twisted:

Re: Commande DOS

Publié : jeu. 26/mai/2022 19:19
par Kwai chang caine
brossden a écrit : jeu. 26/mai/2022 16:40 Vous n'allez pas me croire (mais depuis que je suis à la retraite je n'ai le temps de rien faire.)
Oh que si !!!! :mrgreen:
Tout pareil, on se demande comment on arrivait à avoir une journée de boulot + un autre travail la semaine et encore un autre pour se "reposer" le week end.
Et encore on trouvait du temps pour faire d'autres activités 8O
Maintenant je me demande tous les matins si ça vaut le coup de se lever, car j'ai l'impression de me coucher quelques minutes après :roll:

Ce doit être un genre de "Syndrome du retraité".. mon frère qui était d'astreinte dans une grosse boite sur tout LYON et son agglomération, appelé souvent en urgence par les pompiers, travaillait parfois jour et nuit pour éviter des grandes catastrophes, avec la sirène et le bleu (Putain c'est pas à moi qu'ils auraient confié ça, c'est un rêve de gosse :lol: ) , il avait aussi le temps de faire des activités en plus.
Depuis qu'il est à la retraite, il me dit : "Putain mais où on trouvait le temps d'aller 8h (et le pouce) au boulot !!! " 8O
brossden a écrit : jeu. 26/mai/2022 16:40 Entre les dessins 3D pour créer des pièces, la découpe Laser l'utilisation de CNC (fraiseuses à commande numérique) tondre la pelouse... Dur dur la vie de retraité !
Ce doit être "passionnant comme passion", j'aimerais trop voir ça 8)
Moi qui suit déjà émerveillé par le plasma que je me suis acheté, à force d'en avoir marre de faire des aller retour à l'hosto toute la nuit pour me faire retirer les poutres dans l’œil que ma chère meuleuse avait la délicate habitude de m'envoyer :?
Moi en métallurgie, je suis un peu comme en informatique.... :oops:

J'ai toujours admiré les pros de la mécanique générale 8O
Gamin, quand je faisais mes études à la XRousse je les croisais dans la cour de l'école, mais on se parlait jamais :|
En fait, les électriciens snobaient les mécanos, car ils disaient que si il faisaient ce métier, c'était parce qu"ils en avaient pas assez derrière la calandre pour pouvoir faire un métier de réflexion !!! qu'est ce qu'on est con quand on est jeune :lol:
Maintenant quand j'en croise un avec tout ce qu'il sait pour pouvoir tailler un bout de métal, je regrette d'avoir écouté mes copains :oops:
Pour en avoir le coeur net...Je me suis acheté un petit tour qui était dans une usine de Citroen, j'ai cru que de l'acheter me suffirait...il orne mon atelier depuis des années, c'est cool comme déco :mrgreen:
J'ai peur de l’allumer et de me prendre un mord dans ce qui me sert de tronche, tient.... si je recroisait mes anciens électriciens de copains d'école, je les mettrais bien devant pour qu'ils m'expliquent comment ils feraient pour remplacer ne serait-ce qu'un instant, un seul des "handicapés du bulbe" que l'on snobait dans la cour de l'école. :roll:
brossden a écrit : jeu. 26/mai/2022 16:40Je suis heureux de tous vous voir ici fidèles au poste Kwai chang caine, falsam, Ars, Ollivier ... !!!
Surement pas autant que moi !!!! :wink:
Tu as été un des premiers à m’accueillir avec Dobro,

Image

Et ça....les copains de tranchée....ça s'oublie pas !!! 8)
PB un jour, PB toujours, je n'ai de cesse de le répeter :wink:

Re: Commande DOS

Publié : ven. 27/mai/2022 16:27
par brossden
Salut Kwai chang caine
toujours aussi porté sur le longs discours humoristique à ce que je vois !

Salut Ar-s
ne t'inquiète pas tu y arriveras bien un jour !

Salut à tous ceux qui ont tenter de m'aider mais je me suis mal exprimé et je ne sais pas trop comment vous expliquer la chose.

je sais qu'il est possible d'utiliser un "artifice" pour écrire dans un répertoire système d'un pc distant dont on ne connais le nom du destinataire de ce fichier.
exemple pour écrire dans mon répertoire document il faudrait savoir quel est le nom de l'utilisateur windows
J'ai déjà vu un truc dans le genre : cd c:\%documents% ....

Re: Commande DOS

Publié : ven. 27/mai/2022 16:58
par Marc56
brossden a écrit : ven. 27/mai/2022 16:27 je sais qu'il est possible d'utiliser un "artifice" pour écrire dans un répertoire système d'un pc distant dont on ne connais le nom du destinataire de ce fichier.
exemple pour écrire dans mon répertoire document il faudrait savoir quel est le nom de l'utilisateur windows
J'ai déjà vu un truc dans le genre : cd c:\%documents% ....
Sur un PC distant, sans connaitre le nom d'utilisateur, difficile.
Sur un PC local GetEnvironmentVariable() permet de récupérer tout ce qu'on a en tapant la commande dos SET
Voir aussi UserName(), GetUserDirectory() depuis PB 5.60
:wink:

Re: Commande DOS

Publié : ven. 27/mai/2022 17:47
par cage
Bonjour,
Pour avoir accès aux dossiers/fichiers d'un PC distant il faut au minimum être administrateur local dudit PC.
Si les PC font parti d'un domaine Active Directory, le compte utilisé pour avoir accès aux dossiers/fichiers doit être administrateur du domaine.

Pour accéder au PC distant, il faut utiliser les partages administratifs s'ils n'ont pas étés désactivés.
Pour afficher les partages administratifs sur son PC

Code : Tout sélectionner

C:\Users\admin>net share

Nom partage  Ressource                       Remarque

-------------------------------------------------------------------------------
ADMIN$       C:\Windows                      Administration à distance
C$           C:\                             Partage par défaut
D$           D:\                             Partage par défaut
IPC$                                         IPC distant
Y$           Y:\                             Partage par défaut
EBCAGE Disk C
             C:\
EBCAGE Disk D
             D:\
EBCAGE Disk Y
             Y:\
PUBLIC       Y:\PUBLIC
Users        C:\Users
La commande s’est terminée correctement.


C:\Users\admin>
Dans mon cas, les partages administratifs sont C$, D$, Y$ pour les disques (physiques ou virtuels) plus ADMIN$ et IPC$
Un nom de partage qui se termine par $ est un partage caché.

Pour connaitre les utilisateurs du PC distant, il suffit de regarder dans le partage Users
Pour s'y connecter depuis son PC si on a les bons droits, \\@IP_PC_Distant\Users
Pour se connecter au disque C: du PC distant et avoir accès a l'intégralité du disque, \\@IP_PC_Distant\C$

Accès rapide, WIN+R et \\@IP_PC_Distant\C$ dans Ouvrir :

cage

Re: Commande DOS

Publié : jeu. 16/juin/2022 14:36
par brossden
Kwai chang caine

Tu habites dans quelle région?
Moi je suis dans la proche banlieue de LYON à Irigny exactement