Upuszczenie pliku w aplikacji konsolowej

0

Mam pewną aplikację, która reaguje na naciśnięcia klawiszy w petli:

while (AppWorking)
{
    ConsoleKeyInfo CKI = Console.ReadKey(true);
    SomeFunc(CKI.Key, CKI.KeyChar);
}

W Windows i w Linux, jak się upuści na konsolę dowolny plik w momencie, gdy jest uruchomiony wiersz polecenia (cmd.exe lub bash), to wpisuje się nazwa pliku, nie wiem, jak jest w MacOS, bo nie mam możliwości sprawdzić.

W jaki sposób w aplikacji konsolowej można odróżnić upuszczenie pliku od ręcznie naciśniętych klawiszy tworzących ścieżkę i nazwę pliku?

Interesuje mnie sposób systemowy, który jednoznacznie wskazuje, czy użytkownik naciskał klawisze ze znakami tekstowymi, czy upuścił plik na konsoli.

Sposoby polegające na analizie, jakie klawisze naciskał użytkownik i w jakich odstępach czasowych mnie nie interesuje.

1

Możesz użyć coś takiego https://github.com/gmamaladze/globalmousekeyhook i sprawdzić czy ktoś przeciąga myszką coś. Tylko jeszcze trzeba dodać reference do winforms. Pewnie jakoś jeszcze można kombinować z eventami z winformsów typu dragdrop

0
jarzi napisał(a):

Możesz użyć coś takiego https://github.com/gmamaladze/globalmousekeyhook i sprawdzić czy ktoś przeciąga myszką coś. Tylko jeszcze trzeba dodać reference do winforms. Pewnie jakoś jeszcze można kombinować z eventami z winformsów typu dragdrop

Rozumiem, ze chodzi o to, że leci naciskanie klawiszy, ale jak przy tym jest również upuszczanie myszki, to wnioskujemy, że to jest upuszczanie pliku. Sprawdzę ten projekt, jest gotowa biblioteka na NuGet. Pobieżnie przejrzałem kod, ten plik sugeruje, że wywołuje funkcje WinAPI, więc na Linux może nie zadziałać.

Czyli konsola systemu operacyjnego nie daje możliwości odróżnienia upuszczenia myszki od naciśnięcia klawiszy i z tego powodu w żadnym języku programowania nie da się tego zaimplementować wprost?

1

Wydaję mi się, że cross-platformowo w ten sposób się tego nie da zrobić. Ja bym szukał jakiegoś innego pomysłu, ew. sprawdził czy na pewno taka funkcjonalność jest potrzebna, czy nie da się inaczej do tego podejść.

Chyba, że w javie, ale na tym nie znam się za bardzo np. https://github.com/kwhat/jnativehook

1

Ogólnie to chcesz zrobić coś dziwnego co nie jest przez Windows przewidziane. Może się uda jakimś hakiem, może nie.

Pytanie po co właściwie chcesz to zrobić? Nie da się przeprojektować programu tak by wystarczył ci ten symulowany input z klawiatury?

A może wystarczyłoby ci pokazanie osobnego standardowego okienka z napisem dropuj pliki tutaj :) które będzie łapało te pliki?

1
jarzi napisał(a):

Wydaję mi się, że cross-platformowo w ten sposób się tego nie da zrobić. Ja bym szukał jakiegoś innego pomysłu, ew. sprawdził czy na pewno taka funkcjonalność jest potrzebna, czy nie da się inaczej do tego podejść.

Chyba, że w javie, ale na tym nie znam się za bardzo np. https://github.com/kwhat/jnativehook

W przypadku, który mam na tapecie, taka funkcjonalność nie jest konieczna, ale byłaby przydatna. Mam przewidziany sposób, gdyby okazało się, że to nie jest możliwe.

Azarien napisał(a):

Ogólnie to chcesz zrobić coś dziwnego co nie jest przez Windows przewidziane. Może się uda jakimś hakiem, może nie.

Pytanie po co właściwie chcesz to zrobić? Nie da się przeprojektować programu tak by wystarczył ci ten symulowany input z klawiatury?

A może wystarczyłoby ci pokazanie osobnego standardowego okienka z napisem dropuj pliki tutaj :) które będzie łapało te pliki?

Wystarczy symulowany input i takie działanie mnie satysfakcjonuje. Chciałem się tylko dowiedzieć, czy da się odróżnić plik od wpisywania tekstu lub upewnić się, że nie ma takiej możliwości w standardowy sposób. Wywołania niskopoziomowe, P/Invoke i inne takie nie dość, że działają w konkretnym systemie, to jeszcze może się zdarzyć, że w nie każdej wersji, bo to są szczegóły nieistotne w typowym tworzeniu oprogramowania.

W związku z powyższym, jeżeli realizacja takiej funkcjonalności w czystym .NET lub .NET Core nie jest możliwa, to ja odstępuję od tego pomysłu i zastosuję inne rozwiązanie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1