السلام عليكــم ورحمـة الله وبركاتــه
وجدت موضوع أعجني فأحببت أن أطرحه عليكم
إستعمال أوامر الدوس في دالفي بدون أي مشاكل بستعمال ShellExecut و مترجم CMD
المفاتيح : /c و /k
عند إستعمال /c ينفذ سطر التعليمة ثم يغلق نافذة الدوس
عند إستعمال /k ينفض سطر التعليمة و ينتضر من المستخدم أن يغلق نافذة الدوس
المفتاح CMD :
مثال : Dir c:\*.*
مثال فتح ملف نصي بواسطة برنامج الوندوز : Notepad.exe Teste.txt
- لإستعمال عدة إجرائات يشترط وضع كل الإجرائات بين '' '' وبين كل إجراء و آخر &&
مثال :
"Copy c:\monfichier.txt E:\Monfichier&&del c:\Monfichier.txt"
حذاري :
عند أستعمال المتاح /k و بالخاصية SH_HIDE,
فيجب إضافة &&Exit و وضعها كما يلي "Dir c:\*.*&&Exit"
المضوع كامل بالفرنسية :
Utiliser les commandes Dos sans problèmes avec ShellExecute de l'unité ShellApi
et l'interpreteur de commande CMD.exe
Petites explications:
Les Switches /c : Exécute la ligne de commande et referme l'interpréteur de Commande
/k : Exécute la ligne de commande et attend que l'utilisateur referme
la fenêtre dos
Il y d'autres switchs pour cela allez dans l'aide de Windows et tapez CMD
Dans le TEdit vous pouvez lancer:
Une commande dos simple Ex: Dir c:\*.*
Une application avec paramètres Ex: Notepad.exe Teste.txt
Plusieurs commandes mais il faut les mettre entre guillemets "" et
Séparer les commandes avec && Ex:
"Copy c:\monfichier.txt E:\Monfichier&&del c:\Monfichier.txt"
Démarrer une application attendre qu'elle soit finie et en exécuter
une deuxième Ex:
"Start /wait %systemroot%\System32\calc.exe&&Dir c:\*.*"
La même ligne de commande sous Dos donnerait ceci :
cmd.exe /k "start /wait %systemroot%\System32\calc.exe&&Dir c:\*.*"
Et dans Delphi :
ShellExecute(Handle, Nil, 'CMD' ,
'/k "start /wait %systemroot%\System32\calc.exe&&Dir c:\*.*"', Nil ,
SW_HIDE);
ATTENTION si vous Exécutez une ligne de commande avec comme switch /k et
avec l'option SW_HIDE dans ce cas la fenêtre est certes invisible mais elle
n'en est pas pour autant fermer et après une série de commande de ce type
vous aurez autant de Processus CMD Actif (ce qui à terme va saturer la mémoire).
C'est pour cette raison que j'ai mis dans la Procédure RadioButton1Click une boucle
qui vous évitera ce désagrément en forcent (si /k est sélectionner)
le mode SW_SHOWNORMAL
Dans vos applications si vous devez utiliser /k avec SW_HIDE,
je vous conseil donc d'ajouter '&&Exit' à votre ligne de commande
et de la mettre entre guillemets "" comme ceci :
"Dir c:\*.*&&Exit"
