PDA

Просмотр полной версии : [Статья] Консоль и принимаемые аргументы


megweg
04.01.2012, 10:58
Всем привет... Думаю многие начинали писать с консольных приложений
С начала код выглядит вот так (подключение директив я опущу)
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{

}
}
}
Так вот, сейчас я вам расскажу что это за массив
string[] args
Для того чтобы объяснить напишем немного кода
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Console.Write("Количество аргументов: "+ args.Length);
foreach (var s in args)
{
Console.Write("\n"+s);
}
Console.ReadKey();
}
}
}
И нажимаем F5, и видим

[Ссылки могут видеть только зарегистрированные и активированные пользователи]

Сейчас - аргументов нет, но мы это исправим.
Ищем папку с проектом, и находим папку с ехе - шником, и в ней создаём bat файл следующего содержания
т.к. у bat - ов проблемы с юникодом все аргументы на английском

[Ссылки могут видеть только зарегистрированные и активированные пользователи]

и запустим его, в результате получим

[Ссылки могут видеть только зарегистрированные и активированные пользователи]

Так мы можем скидывать любую информацию в exe, допустим проассоциировать с типом файлом
Конечно можно писать и без '-', но дело в том что если в слове присутствует пробел, то это два разных аргумента

Это возможно и в форме, вот только нужно немного изменить код. Но это уже другая история...

Hermein(3)
04.01.2012, 19:07
То есть вот каким способом запускать программы с параметрами?

типо в программе пропишем действия на конкретный аргумент:
foreach (var s in args)
{
switch(s)
{
case "":
break;
case "":
break;
}
}

А как сделать с WinForms-ами???

•theSaboteur•
04.01.2012, 19:36
Hermein(3), Environment.GetCommandLineArgs

megweg
04.01.2012, 21:44
Hermein(3), Environment.GetCommandLineArgs

ну не знаю, я делал немного по другому

•theSaboteur•
04.01.2012, 22:35
ну не знаю, я делал немного по другому

..Да мало-ли как их получать. Класс Environment в данном случае полностью удовлетворяет потребности, можно конечно заниматься извращениями и получать их скажем посредством класса Process.StartInfo.Arguments (как говорит мсдн - работает только при условии, что процесс был запущен .нэт методом Process.Start) или сделать wmi запрос:
Environment.CommandLine
Environment.GetCommandLineArgs
Process.StartInfo.Arguments

ManagementObjectSearcher moS = new ManagementObjectSearcher("select CommandLine from win32_process where name='" + Process.GetCurrentProcess().ProcessName + "'");
ManagementObjectCollection collection = moS.Get()
ManagementObject[] objs = new ManagementObject[collection.Count];
collection.CopyTo(objs,0);
string[] args = objs[0]["CommandLine"] as string[];
//.....
. Только зачем?

megweg
04.01.2012, 22:42
[/code]. Только зачем?[/QUOTE]

Ну кому как, я в прошлом году писал курсовой, програмка сбоку расписание показывает... естественно расписание храница в файлах.
В итоге, если программу просто запускать, оно показывает расписание указанное в настройках.
Но ещё моя программа лезла в реестр и ассоциировала себя с моим типом файлов. Если Открыть файл расписания двойным щелчком, то откроется редактор его.

В итоге программа одна, а функций две.

а как делал я описал ТУТ ([Ссылки могут видеть только зарегистрированные и активированные пользователи])

•theSaboteur•
04.01.2012, 22:53
Ну кому как, я в прошлом году писал курсовой, програмка сбоку расписание показывает... естественно расписание храница в файлах.
В итоге, если программу просто запускать, оно показывает расписание указанное в настройках.
Но ещё моя программа лезла в реестр и ассоциировала себя с моим типом файлов. Если Открыть файл расписания двойным щелчком, то откроется редактор его.

В итоге программа одна, а функций две.

а как делал я описал ТУТ ([Ссылки могут видеть только зарегистрированные и активированные пользователи])
Вы сейчас это к чему?
Возможно вы меня не совсем поняли - я вовсе не говорил что аргументы не нужны - абсурд, я лишь сказал что нет смысла извращаться, когда разработчики платформы уже предоставили нужные возможности в удобнейшем виде.
Что касаемо ссылки, думаю многие форумчане будут вам благодарны за предоставленные сведения...

megweg
04.01.2012, 23:06
Ну заодно привел пример как эту функцию можно юзать...