PDA

View Full Version : آموزش: ساخت یک کلید میانبر اجرای اپلیکیشن حتی وقتی که کاملاً بسته است.



fmehrvarzi
پنج شنبه 03 بهمن 1392, 21:52 عصر
1- ایجاد سطح دسترسی Administrator:(برای ذخیره شورتکات در دسکتاپ نیاز است)
اگر پروژه شما دارای فایلی به نام app.manifest نباشد از طریق راست کلیک روی پروژه تان از سولوشن مسیر زیر را دنبال کنید و آن فایل را ایجاد کنید:

Add> New Item ... >Application Manifest File

سپس دنبال خطی به صورت

<requestedExecutionLevel level="asInvoker" uiAccess="false" />
را به صورت

<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
تبدیل کنید. در این صورت برای اجرای پروژه تان به سطح درسترسی ادمین نیاز دارید.

2- لایبراری Windows Script Host Object Model را از طریق منوی راست کلیک References از سولوشن (مسیر زیر را دنبال کنید ) اضافه کنید

Add References...> COM >Windows Script Host Object Model

3- این فضای نام را به پروژه تان اضافه کنید:

using IWshRuntimeLibrary;

4- بعدش کدهای زیر را اضافه کنید:

WshShell = new WshShellClass();

// ساخت شورت کات
IWshRuntimeLibrary.IWshShortcut MyShortcut;
// به تمامی خصوصیات شورت کات از طریق MyShortcut دسترسی پیدا خواهید کرد
// انتخاب مسیر دسکتاپ برای شورت کات
MyShortcut = (IWshRuntimeLibrary.IWshShortcut)WshShell.CreateSh ortcut(Environment.GetFolderPath(Environment.Speci alFolder.Desktop)+@"\MyShortcut.lnk");

// مسیری که شورت کات باید اشاره کند
MyShortcut.TargetPath = Application.ExecutablePath;

// توضیحی برای شورت کات
MyShortcut.Description = "اجرای نرم افزارم";

// انتخاب آیکونی برای شورت کات
MyShortcut.IconLocation = Application.StartupPath + @"\App.ico";
//انتخاب یک کلید میانبر
MyShortcut.Hotkey = "Ctrl+Alt+U";

// ذخیره پراپرتی های شورت کات
MyShortcut.Save();


دوستانی که ویژوال استودیو 2010 دارند برای اجرای پروژه ضمیمه فایل .sln سولوشن را با نوت پد باز کنند و خط

Microsoft Visual Studio Solution File, Format Version 12.00
به صورت زیر تغییر دهند

Microsoft Visual Studio Solution File, Format Version 11.00

forodo
یک شنبه 06 بهمن 1392, 14:35 عصر
سلام
روی این خط ارور می گیره:

private WshShellClass WshShell;

رو ارورش اینه:

Interop type 'IWshRuntimeLibrary.WshShellClass' cannot be embedded. Use the applicable interface instead.

و من اینجوری نوشتم:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Runtime.InteropServices;
using System.Drawing.Text;
using IWshRuntimeLibrary;

namespace TestCopy
{
public partial class Form2 : Form
{
private System.Windows.Forms.Button btnShortcut;
private WshShellClass WshShell;


public Form2()
{
InitializeComponent();
}

private void button2_Click(object sender, EventArgs e)
{
WshShell = new WshShellClass();

// ساخت شورت کات
IWshRuntimeLibrary.IWshShortcut MyShortcut;

// انتخاب مسیر دسکتاپ برای شورت کات
MyShortcut = (IWshRuntimeLibrary.IWshShortcut)WshShell.CreateSh ortcut(Environment.GetFolderPath(Environment.Speci alFolder.Desktop) + @"\MyShortcut.lnk");

// مسیری که شورت کات باید اشاره کند
MyShortcut.TargetPath = Application.ExecutablePath;

// توضیحی برای شورت کات
MyShortcut.Description = "اجرای نرم افزارم";

// انتخاب آیکونی برای شورت کات
MyShortcut.IconLocation = Application.StartupPath + @"\App.ico";
//انتخاب یک کلید میانبر
MyShortcut.Hotkey = "Ctrl+Alt+U";

// ذخیره پراپرتی های شورت کات
MyShortcut.Save();
}
}
}

fmehrvarzi
یک شنبه 06 بهمن 1392, 15:38 عصر
روی لایبراری مربوطه کلیک کنید
http://www.codeproject.com/KB/shell/StartupFolderShortcut/References.png
و در پنجره پراپرتیز این کار را انجام بدهید
http://www.codeproject.com/KB/shell/StartupFolderShortcut/Properties.png

منبع:
ضمناً یک پروژه تو کدپراجکت پیدا کردم که مثل همینه اینم لینکش:
http://www.codeproject.com/Articles/146757/Add-Remove-Startup-Folder-Shortcut-to-Your-App

forodo
یک شنبه 06 بهمن 1392, 15:47 عصر
خیلی آقایی.
درست شد.
فقط اگر شورتکات توی دسکتاپ باشه کار میکنه و حتی توی تسک منیجر هم که انداختم و شورتکات رو از دستکتاپ برداشتم باز کار نکرد.
می شه کاری کرد که هر جا بود با اون میانبرها برنامه اجرا بشه؟
اگه این بشه که خیلی عالیه و اگر هم نشه قبلی هم خوبه.
بازم ممنون

fmehrvarzi
یک شنبه 06 بهمن 1392, 17:13 عصر
خیلی آقایی.
درست شد.
فقط اگر شورتکات توی دسکتاپ باشه کار میکنه و حتی توی تسک منیجر هم که انداختم و شورتکات رو از دستکتاپ برداشتم باز کار نکرد.
می شه کاری کرد که هر جا بود با اون میانبرها برنامه اجرا بشه؟
اگه این بشه که خیلی عالیه و اگر هم نشه قبلی هم خوبه.
بازم ممنون

مثل اینکه مایکروسافت فقط برا دسکتاپ این قابلیت را گذاشته است.

forodo
یک شنبه 06 بهمن 1392, 17:23 عصر
مثل اینکه مایکروسافت فقط برا دسکتاپ این قابلیت را گذاشته است.
من این قطعه کد رو:

MyShortcut = (IWshRuntimeLibrary.IWshShortcut)WshShell.CreateSh ortcut(Environment.GetFolderPath(Environment.Speci alFolder.Desktop) + @"\MyShortcut.lnk");

به این تغییر دادم:

MyShortcut = (IWshRuntimeLibrary.IWshShortcut)WshShell.CreateSh ortcut(AppDomain.CurrentDomain.BaseDirectory + @"\MyShortcut.lnk");

که کنار exe برنامه باشه تا با زدن میانبرها که اینجا ctrl+alt+u هستش برنامه اجرا بشه ولی شورتکات رو ساخت ولی میانبرها کار نمی کرد.
یعنی در اصل می خواستم یک شورتکات در دستکتاپ باشه و یک شورتکات در کنار exe تا اگر دستکتاپیه پاک شد باز میانبرها کار کنه که نشد.
دیگه نظری نداری شما که این درست بشه؟ :لبخندساده:

forodo
یک شنبه 06 بهمن 1392, 17:37 عصر
یه سوال؟
این شورتکات با اون شورتکاتی که موقع ساخت setup تعریف می کنیم چه فرقی داره؟

fmehrvarzi
یک شنبه 06 بهمن 1392, 18:48 عصر
شورت کات شورت کاته!
فرقی نمیکنه که چطوری ساخته میشود.
اونجا هم میتونید توسط نرم افزار Advanced Installer یا نرم افزار های مشابه، شورت کات در دسکتاپ ایجاد کنید و تو قسمت Properties اون شورتکات ، بیاید خاصیت Hotkey را تنظیم کنید، و یعنی اصلاً هیچ کد نویسی بالا را لازم ندارید.

forodo
یک شنبه 06 بهمن 1392, 18:57 عصر
فهمیدم!
با استفاده از این دو خط فایل رو هم hidden می کنیم که دیده نشه و هم سیستمی می کنیم که حتی show hidden هم زده می شه دیده نشه:

System.IO.File.SetAttributes(Environment.GetFolder Path(Environment.SpecialFolder.Desktop) + "\\" + Application.ProductName + ".lnk", System.IO.File.GetAttributes(Environment.GetFolder Path(Environment.SpecialFolder.Desktop) + "\\" + Application.ProductName + ".lnk") | FileAttributes.Hidden);
System.IO.File.SetAttributes(Environment.GetFolder Path(Environment.SpecialFolder.Desktop) + "\\" + Application.ProductName + ".lnk", System.IO.File.GetAttributes(Environment.GetFolder Path(Environment.SpecialFolder.Desktop) + "\\" + Application.ProductName + ".lnk") | FileAttributes.System);

بعد اگه بخوایم یه شورتکات که اسمش باید فرق کنه ایجاد می کنیم که طرف ببینتش. باید اسمش فرق کنه چون من تست کردم وقتی یکیش رو می سازه 10 بارم که روی ساخت شورتکات کلیک کردم دیگه نساخت.
یعنی ما 2تا شورتکات داریم که یکیش برای کارکردن با میانبره و دیگری برای دوبارکلیک کردن.
حتی کد هم پیدا کردم که یک شورتکات هم توی تسکبار بندازیم.
عجب شورتکات تو شورتکاتی شد. :قهقهه: :قهقهه:
اینم کد Pin To Taskbar:

private static void PinUnpinTaskBar(string filePath, bool pin)
{
if (!System.IO.File.Exists(filePath)) throw new FileNotFoundException(filePath);

// create the shell application object
Shell shellApplication = new ShellClass();

string path = Path.GetDirectoryName(filePath);
string fileName = Path.GetFileName(filePath);

Shell32.Folder directory = shellApplication.NameSpace(path);
FolderItem link = directory.ParseName(fileName);

FolderItemVerbs verbs = link.Verbs();
for (int i = 0; i < verbs.Count; i++)
{
FolderItemVerb verb = verbs.Item(i);
string verbName = verb.Name.Replace(@"&", string.Empty).ToLower();

if ((pin && verbName.Equals("pin to taskbar")) || (!pin && verbName.Equals("unpin from taskbar")))
{

verb.DoIt();
}
}

shellApplication = null;
}


دمت گرم که راهنمایی کردی و تشکر