ورود

View Full Version : اجرای اپلت کنترل پنل در Delphi XE2 , ویندوز 7



hadisalahi2
پنج شنبه 04 اردیبهشت 1393, 12:31 عصر
سلام به همگی دوستان
من از کد زیر در دلفی 2007 و ویندوز XP برای اجرای اپلت های کنترل پنل استفاده میکردم و جواب هم میداد.




function RunControlPanelApplet(const sAppletFileName : string) : integer;
begin
Result :=
WinExec(
PChar('rundll32.exe shell32.dll,'+
'Control_RunDLL '+(sAppletFileName)),
SW_SHOWNORMAL) ;
end;



اما در دلفی XE2 پیام خطای زیر رو میده :



[DCC Error] SmsSettingUnit.pas(102): E2010 Incompatible types: 'PAnsiChar' and 'PWideChar'



چه تغییر در کد بدم که در این دلفی اجرا بشه و اینکه،
آیا این کد برای window 7 ,8 هم جواب میده؟

یا حق

hp1361
پنج شنبه 04 اردیبهشت 1393, 13:29 عصر
سلام

بجای pchar از pwidechar استفاده کن

موفق باشی

joker
پنج شنبه 04 اردیبهشت 1393, 13:32 عصر
ببین این بهت جواب میده :


Winexec (PAnsiChar (AnsiString (

hadisalahi2
پنج شنبه 04 اردیبهشت 1393, 17:57 عصر
سلام

بجای pchar از pwidechar استفاده کن

موفق باشی

منظورت به جاس pchar اگه هستش گذاشتم ولی پیام خطا میده بازم

hadisalahi2
پنج شنبه 04 اردیبهشت 1393, 18:05 عصر
ببین این بهت جواب میده :


Winexec (PAnsiChar (AnsiString (

این کار رو انجام دادم
پیام خطا نمیده
اما اصلا اجرا نمیکنه اپلت کنترل پنل رو :ناراحت:

Mask
جمعه 05 اردیبهشت 1393, 22:00 عصر
به جای Winexec :
از ShellExecute استفاده کنید :

uses ShellAPI;

ShellExecute(Handle, 'open', 'rundll32.exe','shell32.dll Control_RunDLL main.cpl', '', SW_SHOWNORMAL);

hadisalahi2
شنبه 06 اردیبهشت 1393, 10:52 صبح
زبونمون مو در آورد از بس گفتیم این Winexec رو بزارید کنار ، منسوخ شد رفت.
به جاش از ShellExecute استفاده کنید :

uses ShellAPI;

ShellExecute(Handle, 'open', 'rundll32.exe','shell32.dll Control_RunDLL main.cpl', '', SW_SHOWNORMAL);

داداش گل مشکل سر تبدیل نوع هستش نه دستور
حالا winexec نشد ShellExecute


function TSMSSettingForm.RunControlPanelApplet(const sAppletFileName : string) : integer;begin
Result :=
ShellExecute(Handle, 'open', 'rundll32.exe','shell32.dll Control_RunDLL '+
sAppletFileName, '', SW_SHOWNORMAL);
end;




بازم خطای تبدیل نوع رو میده :ناراحت:

Felony
یک شنبه 07 اردیبهشت 1393, 07:45 صبح
سلام

بجای pchar از pwidechar استفاده کن

موفق باشی
دقیقا چه فرقی میکنه ؟! PChar در نسخه های یونیکد دلفی معادل PWideChar هست .


کدتون باید به این صورت نوشته بشه :

Result := ShellExecute(0, 'open', 'rundll32.exe',
PChar('shell32.dll Control_RunDLL ' + sAppletFileName), '', SW_SHOWNORMAL);

Mask
یک شنبه 07 اردیبهشت 1393, 10:13 صبح
مکمل صحبت آقا مجتبی :
در کدی که من نوشتم، به خاطر اینکه یک مقدار استرینگ ثابت اولیه بود، نیاز به استفاده از Pchar نبود(اشاره گر مقدارش رو از استرینگ ثابت میگیره) ، اما اگر بخواهید این مقدار متغیری رو با علامت + به مسیر، مورد نظر اضافه کنید ، حتما باید با Pchar به پوینتر استرینگ مورد نظر اشاره بشه.