Pagina 1 van 1

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

Geplaatst: 26 jul 2007, 10:52
door meon
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 :()

Geplaatst: 26 jul 2007, 11:37
door khsw
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).

Geplaatst: 26 jul 2007, 12:06
door Astralon
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)

Geplaatst: 26 jul 2007, 22:08
door Sensei Zeon
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
:)

Geplaatst: 26 jul 2007, 22:13
door meon
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.

Geplaatst: 27 jul 2007, 01:06
door Astralon
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...

Geplaatst: 27 jul 2007, 10:09
door meon
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.

Geplaatst: 27 jul 2007, 10:39
door Astralon
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.

Geplaatst: 27 jul 2007, 10:47
door meon
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.