Hoe start Windows een programma als je er een file op sleept

Plaats reactie
Gebruikersavatar
meon
Administrator
Administrator
Berichten: 16609
Lid geworden op: 18 feb 2003, 22:02
Twitter: meon
Locatie: Bree
Uitgedeelde bedankjes: 564 keer
Bedankt: 759 keer
Contacteer:

Zoals het onderwerp zegt: hoe start windows een programma als je er een file op sleept?

Zoals ik in een ander topic zei heb ik eens een client-side programmatje proberen maken om een bepaald zelfgeschreven bestand te kunnen openen.

Commandline werkt het programma:
test.exe -> is prima
test.exe file.txt -> is prima

In een windows-omgeving:
text.exe dubbelklikken -> is prima
file.txt op test.exe slepen -> gebeurt niks. Even een dos-venster, maar voor de rest niks.

Wat is er zo anders in die laatste situatie? (want da's net wat ik moet hebben :()
khsw
Elite Poster
Elite Poster
Berichten: 1158
Lid geworden op: 03 maa 2004, 09:04
Uitgedeelde bedankjes: 18 keer
Bedankt: 16 keer

Meon, is dit in .NET?


Hier een voorbeeldje in C#...


Heel kort:
- Zet de AllowDrop property van je form op True
- In het DragEnter event check je via GetDataPresent of de data van het verwachte formaat is
- Indien ok, dan zet je e.Effect
- In het OnDragDrap event kan je via e.Data de effectieve data ophalen (in dit geval een path naar een file).
Astralon
Elite Poster
Elite Poster
Berichten: 3310
Lid geworden op: 26 jul 2005, 12:17
Locatie: Lochristi
Uitgedeelde bedankjes: 196 keer
Bedankt: 125 keer

Ik denk dat Meon automatisch test.exe wil starten als je er een file opsleept.

Als dit zo is dan doe je dat door file associatie (sorry voor de vertaling).

1) maak een bestand met een eigen extensie, bvb example.meon
2) in explorer open je het bestand met Open en selecteer je het programma waarmee je example.meon wil openen (bvb. test.exe)
3) vanaf nu is er een associatie (koppeling tussen de extensie .meon en test.exe)
Bijlagen
meon_filedrag.JPG
(39.18 KiB) 92 keer gedownload
Sensei Zeon
Administrator
Administrator
Berichten: 4143
Lid geworden op: 15 sep 2002, 09:08
Locatie: Belgium, Haacht
Contacteer:

Hij behandelt een opgesleept bestand gewoon als argument #1
sleep je dus c:\sleepfile.txt op c:\meon.exe, dan doe je eigenlijk:

c:\meon.exe c:\sleepfile.txt
:)
Your Sensei sends his greetz, SeNsEi Ze0n

Afbeelding
Gebruikersavatar
meon
Administrator
Administrator
Berichten: 16609
Lid geworden op: 18 feb 2003, 22:02
Twitter: meon
Locatie: Bree
Uitgedeelde bedankjes: 564 keer
Bedankt: 759 keer
Contacteer:

Mja, ik heb associaties en al geprobeerd ...
En nee, dat doet ie dus niet eh. Als ik een file er op sleep krijg ik géén file in m'n %temp%. Ik weet niet meer wat het kan zijn :(
't is geen .net maar PHP.
Astralon
Elite Poster
Elite Poster
Berichten: 3310
Lid geworden op: 26 jul 2005, 12:17
Locatie: Lochristi
Uitgedeelde bedankjes: 196 keer
Bedankt: 125 keer

Meon, voor alle duidelijkheid:
Als je het bestand sleept wordt dan het programma meon.exe automatisch gestart?

Ik heb zelf een voorbeeldje ingesloten dat volgens mij doet wat je verwacht. Laat maar weten...
Bijlagen
Meon.zip
(204 KiB) 105 keer gedownload
Gebruikersavatar
meon
Administrator
Administrator
Berichten: 16609
Lid geworden op: 18 feb 2003, 22:02
Twitter: meon
Locatie: Bree
Uitgedeelde bedankjes: 564 keer
Bedankt: 759 keer
Contacteer:

Ewel, in uw geval doet ie het.
Ik ben ondertussen weer klein beetje verder, heb een andere compiler gebruikt, maar 't gaat nog niet goed, vage error op scherm.
Dit is de bron:

Code: Selecteer alles

<?php
$filename = "\\test-".date("d-m-y-h-i-s").".txt";
$foutput = fopen($_ENV['TEMP'].$filename,"w");
         fwrite($foutput,print_r($argv,1));
         fclose($foutput);
echo "file created in your %TEMP%";
sleep(5);
exit(0);
?>
Eender wat ge er op sleept of achter typt zou ie in die txt in uw %TEMP% moeten zetten.
Dat ziet er dan bvb zo uit:

Code: Selecteer alles

Array
(
    [0] => test.exe
    [1] => C:\Program Files\Common Files\Microsoft Shared\Source Engine\OSE.EXE
)

Expres een pad met spaties genomen, maar dat gaat dus NIET fout als ge het tussen aanhalingstekens zet. Maar als ge er een file op sleept dus wél.
Bijlagen
test.zip
(605.55 KiB) 106 keer gedownload
Astralon
Elite Poster
Elite Poster
Berichten: 3310
Lid geworden op: 26 jul 2005, 12:17
Locatie: Lochristi
Uitgedeelde bedankjes: 196 keer
Bedankt: 125 keer

Mijn php kennis is zeer beperkt maar kan je dit niet oplossen door alle argumenten op de commandline aan elkaar te knopen (string1+string2+string3....).

Code: Selecteer alles

<?php 
$filename = "\\test-".date("d-m-y-h-i-s").".txt";
$foutput = fopen($_ENV['TEMP'].$filename,"w");
for ($counter="1"; $counter < $argc; $counter++)
{
    fwrite($foutput,print_r(each($argv)));
}
fclose($foutput);
echo "file created in your %TEMP%";
sleep(5);
exit(0);
?>


Als alles goed gaat (heb het zelf niet kunnen testen want ik ben op vakantie :-D ) dan zouden alle "delen" van de volledige filename/file path nu wel getoond moeten worden.
Gebruikersavatar
meon
Administrator
Administrator
Berichten: 16609
Lid geworden op: 18 feb 2003, 22:02
Twitter: meon
Locatie: Bree
Uitgedeelde bedankjes: 564 keer
Bedankt: 759 keer
Contacteer:

Euh :-)

Code: Selecteer alles

C:\Temp>php test.php blaat blaat blaat
Array
(
    [1] => test.php
    [value] => test.php
    [0] => 0
    [key] => 0
)
Array
(
    [1] => blaat
    [value] => blaat
    [0] => 1
    [key] => 1
)
Array
(
    [1] => blaat
    [value] => blaat
    [0] => 2
    [key] => 2
)
file created in your %TEMP%
En in de test-file in %TEMP% staat
Volgens mij ben ik nu nog verder van huis weg :-P
$argv is een array met alle parameters. print_r() dient om een array leesbaar te maken, dus die moet niet nog eens speciaal gelooped worden.
Ik doe $print_r($array,1) -> dan heeft ie een returnwaarde ipv rechtstreeks te outputten.
Plaats reactie

Terug naar “Development”