PDA

View Full Version : مقاله: نحوه ایجاد CustomUrl و اجرای برنامه های Win App توسط آن



mostafa_sgh
دوشنبه 13 آبان 1387, 05:47 صبح
سر آغاز همه کارها با نام اوست ...

با سلام خدمت سروران گرامی

انشاالله که در سلامتی کامل بسر ببرید و با آموختن دانش خود به دیگران در تکمیل روند و رشد دانش فنی جامعه برنامه نویسان موثر واقع بشوید . :چشمک:

و اما ......

* هدف از ایجاد چنین کاری ( به نظر بنده ) : ایجاد رابطه بین Win Application و Web Application می باشد . و علت استفاده از آن هم به این خاطر میباشد که هر کدام از موارد فوق کارائی خاص خود را دارند و در مواردی به تنهائی قادر به برطرف کردن نیاز ما نیستند.

در اینجا می خواهیم در باره مطلبی یحث کنیم و آن هم با یک سوال شروع می کنیم :
( اگر این مطلب دارای بار فنی نمی باشد، بنده را حلال بفرمائید :لبخندساده: )

* چطور می توانیم توسط یک Url یا یک لینک ، برنامه خود را ( مهم نیست توسط چه زبانی - در اینجا C# ) اجرا کرده و پارامترهای مورد نیاز را به آن ارسال کنیم ؟

به عنوان مثال : ما می خواهیم توسط این لینک به برنامه خود پارامتر ارسال کرده وآن را اجرا کنیم .

Protocol://Parametrs
sghr://params

و جواب این مساله رو با یک مثال بیان میکنیم و با همکاری و نظرات شما دوستان گرامی آن را کامل میکنیم .

برای این کار ابتدا لازم است کلیدهائی در رجیستری برای شناسائی Protocol مربوطه تعریف شود . این کلید ها در شاخه های زیر ثبت میشود :

1 - HKEY_LOCAL_MACHINE\SOFTWARE\Classes
2 - HKEY_Classes_Root

و این کلیدها چه هستند ؟ - اینها اطلاعاتی شامل نام پروتکل و آدرس برنامه که به هنگام صدا زدن این پروتکل باید اجرا شود می با شند.

*** برای استفاده از این کلیدها ، پس از تغییرات شخصی ، آنها را در دو فایل مجزا با پسوند .Reg ذخیره و اجرا نمائید .

و اما سوالی که در اینجا مطرح می باشد این است : - چه نامی برای پروتکل خود انتخاب نمائیم ؟
- نام پروتکا باید ساده و قابل شناسائی ( مخفف نام برنامه ای که ساخته اید ) باشد و همچنین تکراری نباشد ( چون ویندوز و بعضی از برنامه هائی که ما از آن استفاده میکنیم ، چند تا از این پروتکل ها را به خود اختصاص داده اند و در صورت تکراری بودن نام، روند کار سایر برنامه ها با شکست مواجه می شود )

کلید های لازم برای ثبت در رجیستری :

شماره 1 :



Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\sghr]
@="URL: sghr Protocol"
"URL Protocol"=""
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\sghr\DefaultIc on]
@="E:\\SGH\\sghr.exe,0"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\sghr\shell]
@="open"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\sghr\shell\ope n]
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\sghr\shell\ope n\command]
@="\"E:\\SGH\\sghr.exe\" \"%1\""


شماره 2 :



Windows Registry Editor Version 5.00
[HKEY_Classes_Root\sghr]
@="URL: sghr Protocol"
"URL Protocol"=""
[HKEY_Classes_Root\sghr\DefaultIcon]
@="E:\\SGH\sghr.exe,0"
[HKEY_Classes_Root\sghr\shell]
@="open"
[HKEY_Classes_Root\sghr\shell\open]
[HKEY_Classes_Root\sghr\shell\open\command]
@="\"E:\\SGH\sghr.exe\" \"%1\""


*** اطلاعات این کلیدها ، همانطور که در بالا مشخص شده ، شامل نام پروتکل و آدرس فایل اجرائی میباشد .

تا اینجا مرحله اصلی کار به اتمام رسید .

و حالا باید به سراغ برنامه خودمان برویم و این پارامترهای دریافتی را تجزیه و تحلیل کرده و عمل مناسب با آن را انجام دهیم .

مطلبی هم در باره پارامترها :

* پارامترها می توانند ساده (Normal String ) و یاکد شده ( Encrypted String ) باشند ، که آن هم توسط خود شما به هنگام ساخت
Url در برنامه Web App تولید میشود.

این کار را با یک برنامه ساده شروع میکنیم .
کار این برنامه این است که در حالت عادی عملکرد خاصی نداشته و در صورت اجرای برنامه توسط لینک مربوطه ، متن پارامتر را نمایش میدهد.

*** هدف اصلی همان است که در بالا ذکر شد و این فقط یک مثال است :لبخندساده:.

برای ادامه کار :

1 - یک پروژه Windows Application با زبان دلخواهتان ایجاد کنید .
2 - در رویداد Load فرم اصلی خود کد زیر را وارد کنید :



private void Form1_Load(object sender, EventArgs e)
{
string[] args = Environment.GetCommandLineArgs();
if (args.Length > 1)
{
string parameters = args[1].ToLower();
string protocolStr = "sghr://";
if (parameters.Contains(protocolStr))
{
MessageBox.Show("You run this app from Custom Url !");
if (parameters.Length > protocolStr.Length)
{
string rParam = parameters.Substring(protocolStr.Length);
MessageBox.Show(string.Format("You run this app from Custom Url with parameters :\n"+
"Protocol Name : {0}\nParameters : {1}",
protocolStr,rParam));
// Then some function for this way
}
}
}
else
{
// Continue the app in Normal mode ...
}
}


3 - پروژه خود را کامپایل کنید .
4 - فایل های مورد نیاز پروژه خود را در مسیری که در فایل رجیستری تعیین کرده اید ، قرار دهید .

حال این مرحله هم به پایان رسید.

*** و اما چطور باید این Url را فراخوانی کنیم ؟

در ظاهر به ؟ طریق :

1 - توسط Explorer ها ( برای Internet Explorer نیاز به تنظیم خاصی نیست ولی سایر مرورگرها برای شناسائی آن نیاز به تنظیمات دارند )
برای این کار کافیست نام پروتکل را به همراه پارامتری که میخواهید برای آن ارسال کنید ، در Address Bar نوشته و اجرا نمائید.
به عنوان مثال : sghr://barnamenevis

.
.
.

امیدوارم از این مطالب حداکثر استفاده را برده باشید و توانسته باشیم حق مطلب را ادا کنیم.

*** واما مهم تر از این مطالب ، نظرات شما دوستان برای رسیدن به یک جمع بندی مطلوب می باشد.

در پناه حق

مهران رسا
پنج شنبه 28 بهمن 1389, 16:05 عصر
سلام . تمامی موارد ذکر شده رو انجام دادم اما وقتی خواستم ازش استفاده کنم با خطای زیر مواجه شدم :

"Firefox doesn't know how to open this address , because the protocol (myapp) isn't associated with any ptogram"

mostafa_sgh
دوشنبه 23 اسفند 1389, 08:37 صبح
همانطور که در پست قبلی گفته شد ، در مرورگر های مختلف باید جداگانه تنظیمات آن انجام شود
که در اینجا :::


You need AptURL protocol support registered in your web browser to be able to use allmyapps.

== Procedure for Firefox ==

Type in “about:config” in the location bar.

Right click, select New –> String
Type in “network.protocol-handler.app.apt” in the name of string,
and type in “/usr/bin/apturl” in the value.

One more right click, select New –> String
Type in “network.protocol-handler.app.apt+http” in the name of string,
and type in “/usr/bin/apturl” in the value.

== Procedure for Opera ==

Open Preferences.
Tools -> Preferences -> Advanced -> Programs

Click “Add” button.
Type in “apt” in the “Protocol” field,
and type in “apturl” in the “Open with other application” field.
Click “OK” button.

One more click “Add” button.
Type in “apt+http” in the “Protocol” field,
and type in “apturl” in the “Open with other application” field.
Click “OK” button.

== Procedure for Konqueror ==

Create “apt.protocol” and “apt+http.protocol” files into “/usr/share/services” directory.

Filename: apt.protocol
[Protocol]
exec=apturl “%u”
protocol=apt
input=none
output=none
helper=true
reading=true
writing=true

Filename: apt+http.protocol
[Protocol]
exec=apturl “%u”
protocol=apt+http
input=none
output=none
helper=true
reading=true
writing=true


منبع : http://getsatisfaction.com

مهران رسا
یک شنبه 28 فروردین 1390, 10:28 صبح
باورت میشه ؟ یک اشتباه تایپی کوچیک تو این مورد کلی وقتمو گرفت . در کل نیازی به ثبت تنظیمات در مرورگر های مختلف نیست . همینکه تغییرات ذکر شده رو توی رجیستری اعمال کنید همه چیز درست میشه .

کدش در دلفی :
procedure TFrmMain.CreateProtocol(ProtocolName: string; Path: string);
var
REG: TRegistry;
begin
REG := TRegistry.Create;
try
REG.RootKey := HKEY_CLASSES_ROOT;
REG.OpenKey(ProtocolName, true);
REG.WriteString('', 'URL: ' + ProtocolName + ' Protocol');
REG.WriteString('URL Protocol', '');
REG.OpenKey('shell\open\command', true);
REG.WriteString('', '"' + Path + '"' + ' %1');
finally
REG.Free;
end;
end;