Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
Tadeáš Burda
Brigádník
Avatar
Tadeáš Burda :25.7.2018 22:34

Vytvoril som si jednoduchý prehliadač fotografií, ktorý funguje, ale iba pri prehliadaní jednej fotografie. Ak označím viac fotografií, tak Windows mi proste otvorí môj program n krát. Program sa spúšťa po kliknutí na fotografiu a jeho adresa sa predáva programu cez string[] args. Program je WPF a neobsahuje Main(string[] args) ako ConsoleApp, tak som na nete našiel návod ako upraviť App.xalm a App.Xalm.cs a tak mi to funguje. Do App.xalm sa pridá iba Startup="AppStar­tup" a do App.xalm.cs:

public partial class App : Application
{
    public static string[] Args;

    public void AppStartup(object sender, StartupEventArgs e)
    {
        if (e.Args.Length > 0)
            Args = e.Args;
    }

Adresa súboru je potom vo vlastnosti Args a odtiaľ si ju ťahá MainWindow pre ďalšie spracovanie.

Zkusil jsem: Viac menej nič som neskúšal, lebo Bingu nedokážem položiť správnu otázku. Stále mňa to odkazuje OpenFileDialog(), ale to nenič to čo chcem, pretože program sa má spúšťať napr. ako Skicár po kliknutí na súbor a nebude v ňom možnosť pre užívateľa otvárať iné súbory.

Chci docílit: Chcel by som, aby napr. po označený viacej fotografií a otvorení ich v mojom programe, boli v string[] args všetky adresy označených fotografii. Alebo aspoň teda zistiť či to vôbec ide :D

 
Odpovědět
25.7.2018 22:34
Avatar
Jakub Augusta:26.7.2018 8:13
OpenFileDialog _FileDialog = new OpenFileDialog();
_FileDialog.Multiselect = true;
_FileDialog.ShowDialog();
var Result = _FileDialog.FileNames;

Zkus toto.
Ve výsledku Result je pole obsahující přímou cestu k souboru.

Editováno 26.7.2018 8:14
Nahoru Odpovědět
26.7.2018 8:13
if(true == false) { Tu: DoDis() } else goto Tu;
Avatar
Tadeáš Burda
Brigádník
Avatar
Odpovídá na Jakub Augusta
Tadeáš Burda :26.7.2018 11:17

Áno, to viem... Ale to nie je to čo chcem. Nechcem aby užívateľ musel otvoriť program a tam napr. v menu otvoril dialóg a vyberal súbory(to viem spraviť). Chcem aby si užívateľ napr. na ploche označil myšou viac fotografií a po kliknutí v ContextMenu na Otvoriť sa mi do programu dostali adresy tých označených súborov. Z jedným to dokážem urobiť, ale kde ich označím viacej tak mi proste Windows otvorí môj program n krát, kde n je počet označených súborov. PS: Nechcem to nijako obísť. Je to pre študijne účely a viem že to ide.

 
Nahoru Odpovědět
26.7.2018 11:17
Avatar
Odpovídá na Tadeáš Burda
Patrik Valkovič:26.7.2018 12:43

Out of the box to myslím nejde. Musíš použít mezi procesorovou komunikaci a poslat již spuštěnému procesu zprávu, že má otevřít další soubor.
https://stackoverflow.com/…-application

Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
Nahoru Odpovědět
26.7.2018 12:43
Nikdy neumíme dost na to, abychom se nemohli něco nového naučit.
Avatar
Tadeáš Burda
Brigádník
Avatar
Tadeáš Burda :26.7.2018 13:20

Napr. WindowsMediaPlayer to dokáže. Keď si označíš mp3, tak ti prehrá len tie označené, preto viem že to ide. Pozeral som tu na ten Mutex článok včera a napadlo mňa, že by sa to dalo spraviť tak, že by som zablokoval otvorenie programu viac krát a len sa pozrel do danej zložky, že ktoré ďalšie súbory sú označené, alebo že by mi tie druhé procesy poslali len cesty. Ja som až včera zistil, že sa dá programu predať adresa súboru cez string[] args tak som myslel, že sa tak predajú všetky označené. Bolo by to elegantnejšie :D Pozriem sa na ten Mutex

 
Nahoru Odpovědět
26.7.2018 13:20
Avatar
Odpovídá na Tadeáš Burda
Patrik Valkovič:26.7.2018 19:08

Ale to řešení přesně toto dělá. Spustí další aplikaci, ta zjistí že je již jednou spuštěna a tak pomocí meziprocesové komunikace pošle zprávu, ať ta aplikace otevře i ten druhý soubor.

Nahoru Odpovědět
26.7.2018 19:08
Nikdy neumíme dost na to, abychom se nemohli něco nového naučit.
Avatar
Tadeáš Burda
Brigádník
Avatar
Odpovídá na Patrik Valkovič
Tadeáš Burda :27.7.2018 12:55

Už sem sa nato pozeral a spravil sem to tak, až nato, že sem si ešte nevybral spôsob tej komunikácie, lebo ich je viac. Mne len došlo divne, že sa to musí robiť takto zložito, keď string[] args je pole, tak som čakal že tam budú všetky adresy. Cez ten Mutex som sa dostal na iné fóra a vyzerá to, že naozaj sa to da len takto :/ Takže som ta označil. Mohel by tu niekto nato spraviť návod, lebo moc info sem tu nato nenašiel (hľadal sem len C#). Každopádne díky moc...

 
Nahoru Odpovědět
27.7.2018 12:55
Avatar
Odpovídá na Tadeáš Burda
Neaktivní uživatel:27.7.2018 16:34

Zrovna C# těch návodů potřebuje víc… :-D

Nahoru Odpovědět
27.7.2018 16:34
Neaktivní uživatelský účet
Avatar
Odpovídá na Neaktivní uživatel
Patrik Valkovič:27.7.2018 19:02

Jaké konkrétně?

Nahoru Odpovědět
27.7.2018 19:02
Nikdy neumíme dost na to, abychom se nemohli něco nového naučit.
Avatar
Odpovídá na Patrik Valkovič
Neaktivní uživatel:27.7.2018 19:47

To by byl delší seznam, a navíc si nikdy nevzpomenu na víc najednou… Např. v práci se soubory jsem nikde neviděl JSON… ;-(

Nahoru Odpovědět
27.7.2018 19:47
Neaktivní uživatelský účet
Avatar
Martin Petrovaj
Tvůrce
Avatar
Odpovídá na Neaktivní uživatel
Martin Petrovaj:27.7.2018 21:10

Súhlasím, že pár nových článkov navyše by možno nezaškodilo, ale človek musí byť asi politik z povolania, aby dokázal o volaniach 2 metód (JsonConvert.Se­rializeObject a JsonConvert.De­serializeObjec­t<T>) napísať článok na viac ako 5 riadkov :-) A v najhoršom prípade každý, kto ovláda aspoň základnú angličtinu je schopný vytvoriť správny search phrase pre Google a kliknúť na prvý SO odkaz.

Mimochodom, prepáč, že som sa chytil len jedného príkladu, ktorý si dal, len si si náhodou vybral práve takú vec, ktorá väčšine ľudí za článok ani veľmi nestojí :-) A aby som dodal aj niečo k téme, Mutex a / alebo iná komunikácia medzi procesmi vyzerá ako najlogickejšie riešenie pre tu rozoberaný problém.

Editováno 27.7.2018 21:12
Nahoru Odpovědět
27.7.2018 21:10
if (this.motto == "") { throw new NotImplementedException(); }
Avatar
Odpovídá na Martin Petrovaj
Neaktivní uživatel:28.7.2018 9:12

Tobě stačí znát názvy dvou metod? A navíc jsem myslel, že by tady měly články pokrýt trošku víc než pokrývají. No to je jedno, částečně tě chápu, tak radši téma JSON ve vláknu Mutex uzavírám :-D.

Nahoru Odpovědět
28.7.2018 9:12
Neaktivní uživatelský účet
Avatar
Tadeáš Burda
Brigádník
Avatar
Odpovídá na Martin Petrovaj
Tadeáš Burda :28.7.2018 12:01

No ja by sem ocenil, keby tu bolo viac článku o "technikách" ktoré sa v praxi používajú. Sú tu programátori z praxe a keď prejdem všetky články v daném jazyku, tak už mňa zajíma zrovna toto. Ale ja články nepíšem, len sem to hodil do placu, že bych zato byl ochotný zaplatiť. Asi bych to už uzavrel...

 
Nahoru Odpovědět
28.7.2018 12:01
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 13 zpráv z 13.