Laden...

Eigene Anwendung (im Hintergrund) soll erkennen, wenn eine Datei auf dem Desktop verschoben wurde

Erstellt von Hans232323 vor 12 Jahren Letzter Beitrag vor 12 Jahren 2.938 Views
Thema geschlossen
H
Hans232323 Themenstarter:in
14 Beiträge seit 2011
vor 12 Jahren
Eigene Anwendung (im Hintergrund) soll erkennen, wenn eine Datei auf dem Desktop verschoben wurde

Huhu Bräuchte hilfe bei nem kleinem C# stückchen 😉

Ich möchte gern, dass das c# Programm im Hintergrund läuft (Das bekomm ich hin)
und dann das ich wenn ich eine Datei auf dem Desktop oder in irgend einem Fenster
anklicke der ihr Pfad bekomme wo sie auf dem Rechner gespeichert ist und dies dann z.B.
per MessageBox ausgegeben wird. (Wenn ich das Ganze auf eine Form ziehe bekomm
ich es hin, aber nicht wenn ich nur die Datei anklicke).

Ich bekomm bei der ganzen Geschichte nicht raus, welchen user32.dll(oder shell32.dll)
Zugriff ich da benötige.

Würde mich freuen, wenn wer Qualifiziertes mir helfen kann.

Mfg

C
1.214 Beiträge seit 2006
vor 12 Jahren

Ja, es scheitert schon an den Begriffs- und Anforderungsdefinitionen. Du beschreibst sehr schwammig, was du machen willst. Außerdem beschreibst du überhaupt nicht, was du damit erreichen willst. Ich vermute nämlich, dass es dafür bessere Lösungsansätze gibt.
Was heißt anklicken? Und was für Fenster und was ist für dich eine "Datei"? Was willst du denn machen? Willst du darauf reagieren, dass jemand ein Icon auf dem Desktop markiert hat, oder darauf, dass jemand eine Datei ausgeführt hat? Das ist auf jeden Fall alles nicht trivial und nicht zuverlässig. Beschreib doch mal genauer, was du erreichen willst.

H
Hans232323 Themenstarter:in
14 Beiträge seit 2011
vor 12 Jahren

Was ist da Schwammig dran??

Das Programm läuft im Hintergrund die ganze Zeit und wenn ich eine Datei z.B. auf de Desktop anklicke brauch ich den Link wo sie genau gespeichert ist um den LINK dann weiter zur Verarbeitung nutzen kann.
Was der sin hinter dem ganzen ist darf ich nicht weiter erläutern Betriebsgeheimnis.

Und ich bekomm ja hin aus der User32.dll aus zu lesen wie der Name eines offenen Fensteres ist und den sein Handel aber ich bekomm nicht raus was der Zurgriff auf den Dateinamen ist wenn ich eine Datei ankicke der soll ja angeblich in der Shell32.dll dann stehen.

C
252 Beiträge seit 2007
vor 12 Jahren

Also du schreibst hier von 2 verschiedenen Dingen.
1.) Du wilst wissen wenn du ne Datei am Desktop anklickst wo dann der Pfad zur dieser ist.
2.) Dann schreibst du aber was mit offenen Fesnter und Handles

Wie kommst du von Schritt 1 auf Schritt 2. Und wenn du bei Schritt 2 bist woher willst du wissen dass das Programm via Desktop gestartet wurde?

Was mir aber jetzt einfallen würde. Du könntest alle laufenden Processe prüfen und wenn ein neuer hinzu kommt dann kannst du dir mittels ProcessModule.Filename den Pfad holen.
Aber wie gesagt auch hier weißt du nicht ob das Prog vom Desktop gestartet wurde.

1.820 Beiträge seit 2005
vor 12 Jahren

Hallo Hans232323,

das anklicken auf dem Desktop kann man bestimmt über die WindowMessages mithören.
Dazu müsstest du dir allerdings einen GlobalHook schreiben.
Oder einen MouseHook (die sind einfacher) und dann prüfen, welches Fenster an dieser Stelle geklickt wurde (der Desktop ist ja auch ein Fenster). Dann müsstest du "NUR" noch für diese Position die Verknüpfung abfragen, geht vermutlich per Iteration über alle Icons auf dem Desktop.

Nobody is perfect. I'm sad, i'm not nobody 🙁

49.485 Beiträge seit 2005
vor 12 Jahren

Hallo Hans232323,

für mich klingt das eher nach einem Fall für Shell-Extensions. Es geht ja wohl darum zu erkennen, dass im Windows-Explorer (der Desktop ist ja auch nur ein spezielles Fenster des Windows-Explorers) ein Eintrag (einfach)angeklickt/markiert wurde. Ich schließe mich aber der Meinung an, dass das aus der Beschreibung nur vage und indirekt herauskommt.

Das Thema wurde m.E. schon einige Male besprochen. Bitte benutze die Forumssuche und poste die besten Treffer hier. Vielen Dank!

herbivore

U
1.688 Beiträge seit 2007
vor 12 Jahren

Was ist da Schwammig dran??

Es gibt tatsächlich viele "Wenn und Aber". Allein "eine Datei auf dem Desktop oder in irgend einem Fenster anklicke der ihr Pfad bekomme wo sie auf dem Rechner gespeichert ist" - wenn Du etwas auf dem Desktop anklickst, ist es auf dem Desktop gespeichert (wo sonst?). Wenn Du etwas "in irgendeinem Fenster" anklickst, hängt es von diesem Fenster ab, was es überhaupt ist und wo es ggf. gespeichert ist.

Was der sin hinter dem ganzen ist darf ich nicht weiter erläutern Betriebsgeheimnis.

Ja, das ist jetzt schade. Wär schon interessant, wofür man so etwas braucht. Vielleicht zur Benutzerüberwachung? Oder gar für einen Trojaner?

wenn ich eine Datei ankicke der soll ja angeblich in der Shell32.dll dann stehen.

Woher hast Du denn diese Information?

T
3 Beiträge seit 2011
vor 12 Jahren

Mal ein Hallo in die Runde,

ich klinke mich mal hier dreister Weise mit in die Diskussion ein, weil ich ebenfalls in dieses Projekt involviert bin. Das die Erklärungen hier für einige etwas schwammig mögen wirken, hat schon seinen Grund. Es handelt sich hierbei nun mal um ein privates Projekt, was nicht näher erläutert werden darf. Trotzdem bin ich der Meinung, dass sich der Sinn und Zweck hier durchaus auch so herauslesen lässt.

Auch will ich hier ausdrücklich betonen, dass es sich hierbei nicht um einen Trojaner handelt und das Ganze nicht dazu dient, jemanden auszuspionieren.

Was wir erreichen wollen ist einfach nur das:

Sagen wir mal ein User X schiebt eine Datei Y, die er auf dem Desktop abgelegt hat, mittels vorgegebener Tastenkombination an den Rand des Desktops. Das Programm (in c#) soll nun erkennen, dass der Benutzer

  1. eine Datei per Drag/Drop geschoben hat,
  2. der Cursor sich an der Koordinate XY befindet

und soll daraufhin im C# Programm, das im Hintergrund läuft, eine entsprechende Aktion ausführen, nämlich lokalisieren, welche Datei (und ob überhaupt) der Benutzer verschoben hat. Besagte Datei soll dann weiter verarbeitet werden. Daher, wir benötigen nur den Pfad der "verschobenen" Datei, z.B. C:\hallo \xxxcfff.txt. Das ist alles, was wir erreichen wollen. Zweiteres kriegen wir hin, Ersteres nicht.

Problem hierbei ist halt, dass wir da nicht mehr nur auf c#-Ebene arbeiten können, da die Datei ja nicht auf das Form gezogen wird. Daher wären wir für Code-Hilfestellungen und Tipps dankbar.

C
1.214 Beiträge seit 2006
vor 12 Jahren

Das die Erklärungen hier für einige etwas schwammig mögen wirken, hat schon seinen Grund.

In der Tat. Das liegt nämlich daran, dass sie schwammig sind ^^

Was du jetzt beschreibst, ist schon mal deutlich präziser und etwas anders, als die Ausgangsfrage. Ich habe gleich gefragt, was "anklicken" bedeutet. Und hier haben auch andere darüber gemutmaßt, ob es um das Markieren der Datei, oder ausführen handelt. Jetzt schreibst du von Drag&Drop, also weder noch.
Was du beschreibst, wäre deutlich einfacher und zuverlässiger zu implementieren, wenn du tatsächlich ein Drop Target hättest. z.B. der Benutzer zieht etwas an einen Desktoprand, eine kleine Leiste erscheint (das wäre nicht schwer zu implementieren), man lässt die Datei darauf fallen und dann wird die Aktion ausgeführt. Wäre das drin? Das ist nämlich standardisiert. Sonst wird es schwierig...

T
3 Beiträge seit 2011
vor 12 Jahren

Danke. Selbstverständlich wäre das natürlich auch möglich. Wir standen bisher halt vor dem Problem, dass wir nicht so recht wussten, wie wir es realisieren sollten, dass wir das Ganze direkt in c# verarbeiten können. Offenbar gibt es doch eine einfachere Alternative, das wäre natürlich ideal, wenn wir direkt damit arbeiten können. Das mit der Leiste wäre gar nicht so schlecht, so erhält der Benutzer auch eine visuelle Rückmeldung.

Die Idee kam uns noch gar nicht, dabei liegt es ja auf der Hand, denn die Cursorposition kriegen wir ja bereits mit GetCursorPos(). Wie würdest du das dann lösen? Man könnte, wenn der Cursor im definierten Bereich ist, einfach ein Form einblenden mit einem Drop target und einer definierten Höhe/Breite.

Das wäre vermutlich auch erheblich einfacher als das, was wir bisher vor hatten. Oder gäbe es da noch einen anderen Weg?

C
1.214 Beiträge seit 2006
vor 12 Jahren

Mit mehreren Bildschirmen kenne ich mich zwar nicht direkt aus, wüsste aber auch nicht, warum das ein Problem sein sollte. Notfalls kommt so eine Leiste, man lässt die Datei aber nicht darauf fallen, sondern zieht sie auf den nächsten Bildschirm weiter.
Ich glaube fast, die einfachste Möglichkeit, sowas zu realisieren, wären Mouse Hooks. Such mal auf codeproject oder hier im Forum, es gab schon einige Threads zu dem Thema. Und das Drag&Drop sollte sowieso kein Problem sein, dazu gibt es unzählige Infos.

T
3 Beiträge seit 2011
vor 12 Jahren

Danke, du hast uns sehr weiter geholfen. Habe mir hier aus dem Forum eine MouseHook Klasse besorgt und werde mir das Ganze später mal ansehen. Scheint mir eine brauchbare Alternative zu unserem verwendeten GetCursorPos() zu sein, da wir hierfür ja einen Timer benötigen. Nochmals vielen Dank!

Hinweis von winSharp93 vor 12 Jahren

Geschlossen wegen Crosspost: http://www.c-sharp-forum.de/viewtopic.php?t=107044

Thema geschlossen