المشاركات : 842
المواضيع 49
:
: 65
الإنتساب : Jun 2010
السلام عليكم
للدالة إستعمالات كثيرة نذكر منها :
( المسار يكتب إذا كان البرنامج المراد تفيده ليس في ملفات النظام أو نفس مجلد تطبيقنا )
لا تنسى إضافة : uses shellapi
* تشغيل برنامج :
كود : ShellExecute(Handle, 'open', 'notepad.exe', nil, nil, SW_SHOWNORMAL) ;
أو
كود : ShellExecute(Handle, 'open', 'c:\Windows\notepad.exe', nil, nil, SW_SHOWNORMAL) ;
* فتح الملفات :
كود : ShellExecute(Handle,'open', 'Textfile.txt',nil, nil, SW_SHOWNORMAL) ;
أو
كود : ShellExecute(Handle,'open', 'c:\windows\notepad.exe','Textfile.txt', nil, SW_SHOWNORMAL) ;
*فتح المشتكف على مسار محدد :
كود : ShellExecute(Handle,'open', 'c:\', nil, nil, SW_SHOWNORMAL) ;
أو
كود : ShellExecute(Handle,'open', 'explorer.exe', 'c:\', nil, SW_SHOWNORMAL) ;
أو
كود : ShellExecute(handle, 'explore', 'c:\', nil, nil, SW_SHOWNORMAL);
* للطباعة ( طباعة ملف مباشرة دون فتحه ) ' الطباعة تكون على الطابعة الإفتراضية '
كود : ShellExecute(Handle, 'print', PChar('textfile.txt'), nil, nil, SW_SHOW);
* فتح متصفح الويب الإفتراضي على الموقع المعطى
كود : ShellExecute(Handle, 'open', 'http://www.delphi4arab.net/forum/',nil,nil, SW_SHOWNORMAL) ;
* لبعث إيميل ( فتح برنامج الإيميلات الإفتراضي مع ملئه بالقيم المعطاة )
كود : var mailsubject, mailtext, mail : string;
begin
mailsubject := 'هذا هو موضوع الإيميل Subject ';
mailtext := 'هذا هو نص الإيميل';
mail := 'mailto:Contact@delphi4arab.net?subject=' +
mailsubject + '&body=' + mailtext ;
ShellExecute(Handle,'open',
PChar(mail), nil, nil, SW_SHOWNORMAL) ;
* تشغيل برنامج والإنتظار حتى إغلاقه ( مثال عند إغلاقه يظهر لنا مساج )
مثال عن الآلة الحسبة
كود : unit Unit1;
interface
uses
Windows, Messages, Variants, Classes, Graphics, Controls, Forms,
Dialogs,shellapi, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure RunAndWaitShell(Executable, Parameter: STRING; ShowParameter: INTEGER);
var
Info: TShellExecuteInfo;
pInfo: PShellExecuteInfo;
exitCode: DWord;
begin
{Pointer to Info}
pInfo := @Info;
{Fill info}
with Info do
begin
cbSize := SizeOf(Info);
fMask := SEE_MASK_NOCLOSEPROCESS;
wnd := application.Handle;
lpVerb := NIL;
lpFile := PChar(Executable);
{Parametros al ejecutable}
{Executable parameters}
lpParameters := PChar(Parameter + #0);
lpDirectory := NIL;
nShow := ShowParameter;
hInstApp := 0;
end;
{Execute}
ShellExecuteEx(pInfo);
{Wait to finish}
repeat
exitCode := WaitForSingleObject(Info.hProcess, 500);
Application.ProcessMessages;
until (exitCode <> WAIT_TIMEOUT);
showmessage('تم إغلاق البرنامج');
form1.Enabled :=true;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
form1.Enabled :=false;
RunAndWaitShell('calc','',1);
end;
end.
المشاركات : 842
المواضيع 49
:
: 65
الإنتساب : Jun 2010
السلام عليكم
*تنفيذ أوامر الدوس
أمثلة
كود : ShellExecute(Handle, 'open', PChar('command.com'), PChar('/c copy file1.txt file2.txt'), nil, SW_SHOW);
كود : * ShellExecute(Handle, 'open', PChar('command.com'), PChar('/k dir'), nil, SW_SHOW);
* *فتح المشتكف على مسار مع إختيار الملف المحدد ( خاصية الإختيار لا تعمل إذا كان المسار مفتوحا ) :
كود : ShellExecute(Handle,'OPEN',PChar('explorer.exe'),PChar('/select, "' + selectedFileName + '"'),nil,SW_NORMAL)
المشاركات : 563
المواضيع 28
:
: 0
الإنتساب : Dec 2008
Lam.Abdeldjalil كتب :السلام عليكم
*تنفيذ أوامر الدوس
أمثلة
و عليكم السلام و رحمة الله و بركاته
1- يمكن إختصار الأمر في :
PHP كود : Uses ShellApi; procedure TForm1.Button1Click(Sender: TObject); begin ShellExecute(0,Nil{Open},'CMD',Pchar('/k "C:\1.exe&&Exit"'),Nil,0{SW_HIDE}); end;
2- نقوم بتنفيذ أمر تحميل البرنامج 1.exe , بخاصية عرض SW_HIDE , لهذا توجب علينا
إنهاء Process الـ CMD بالأمر Exit .
3- للفصل بين أوامر الـ cmd , يكفي وضع && بين كل أمر و آخر .
بالتوفيق ,,
المشاركات : 2,293
المواضيع 157
:
: 81
الإنتساب : Dec 2008
[COLOR="black"]وعليكم السلام ورحمة الله
موضوع ثري وشامل 
يمكن استخدام WinExec المعرفة في Windows.pas حالة التعامل مع الملفات التنفيذية، ينظر أيضا:
http://www.delphi4arab.net/forum/showthr...p?tid=2657
http://www.delphi4arab.net/forum/showthread.php?tid=600
إذا كان البرنامج لا يستخدم من ShellAPI إلا ShellExecute أفضل استيراد تعريفها بمثل هذا:
PHP كود : function ShellExecute(hWnd: HWND; Operation, FileName, Parameters, Directory: PChar; ShowCmd: Integer): HINST; stdcall; external 'shell32.dll' name 'ShellExecuteA'
وبذلك تتخلص من ShellAPI وتقلص حجم برنامجك
استدعي ShellExecuteW إذا وجدت حروف اللغة العربية (و Unicode عموما).[/COLOR]
المشاركات : 842
المواضيع 49
:
: 65
الإنتساب : Jun 2010
السلام عليكم
بارك الله فيكم على إثراء الموضوع
وهذا مثال عن إستخدامات الدالة :
http://www.delphi4arab.net/forum/showthr...#post18842
و السلام عليكم
المشاركات : 842
المواضيع 49
:
: 65
الإنتساب : Jun 2010
السلام عليكم
لإيقاف تشغيل الجهاز ( مع الإجبار لا مجال للتراجع ) ' 30 ثانية لإيقاف التشغيل'
كود : ShellExecute(Handle, 'open', PChar('shutdown.exe'), PChar('-s'), nil, sw_show);
لإعادة تشغيل الجهاز ( مع الإجبار لا مجال للتراجع ) ' 30 ثانية لإعادة التشغيل'
كود : ShellExecute(Handle, 'open', PChar('shutdown.exe'), PChar('-r'), nil, sw_show);
لتسجيل الخروج
كود : ShellExecute(Handle, 'open', PChar('shutdown.exe'), PChar('-l'), nil, sw_show);
و السلام عليكم
المشاركات : 2,293
المواضيع 157
:
: 81
الإنتساب : Dec 2008
تعيد الدالة قيمة أكبر من 32 إذا نجحت في تشغيل الملف
وتعيد قيمة خطأ يمكن فحصها لتحديد الخلل بأكثر دقة، مثال:
PHP كود : procedure ExploreTo(handle:HWND ; page:PChar); var Returnvalue : integer; begin ReturnValue := ShellExecute(handle, 'open', page, nil, nil, SW_SHOWNORMAL); if ReturnValue <= 32 then case Returnvalue of 0 : MessageBox(handle,'Error: Out of Memory','Error ExploreTo',0); ERROR_FILE_NOT_FOUND: MessageBox(handle,'Error: File not found','Error ExploreTo',0); ERROR_PATH_NOT_FOUND: MessageBox(handle,'Error: Directory not','Error ExploreTo',0); ERROR_BAD_FORMAT : MessageBox(handle,'Fehler: Wrong format in EXE','Error ExploreTo',0); // All other errors . See help for more ReturnValues of ShellExecute else MessageBox(handle,PChar('Error Nr: '+IntToStr(Returnvalue)+' in ShellExecute'), 'Error ExploreTo',0) end //case end;
المزيد حول الدالة وأنواع الأخطاء من MSDN
WinExec تعيد قيمة أكبر من 31 عند النجاح، مثال:
PHP كود : function Exec(Cmd: string; ShowConsole: Boolean): Boolean; begin Result := WinExec(PChar(Cmd), Ord(ShowConsole)) > 31; end;
المزيد من MSDN
|