Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Shellextension - OnFileClick (https://www.delphipraxis.net/110611-shellextension-onfileclick.html)

Neutral General 20. Mär 2008 19:00


Shellextension - OnFileClick
 
Hi,

Mir ist kein besserer Name eingefallen. Aber gibt es eine Möglichkeit darauf zu reagieren das auf eine Datei im Explorer geklickt wurde?

Gruß
Neutral General

marabu 21. Mär 2008 12:25

Re: Shellextension - OnFileClick
 
Hallo Michael,

wäre das nichts für dich?

NM_CLICK Notification

Grüße vom marabu

Luckie 21. Mär 2008 14:01

Re: Shellextension - OnFileClick
 
Da wirst du um eine shellextension nicht drum rumkommen. Guck dir mal meinen ExifReader an, da ist eine Shellextention dabei http://www.michael-puff.de/Developer/Delphi/Programme/

Neutral General 21. Mär 2008 17:25

Re: Shellextension - OnFileClick
 
Hi,

Habe schon ne Shellextension geschrieben, aber ich weiß nicht welches Interface ich in diesem Fall benutzen muss. Weil ich ja kein Kontextmenu brauche.

Gruß
Neutral General

marabu 21. Mär 2008 18:02

Re: Shellextension - OnFileClick
 
Bist du ganz sicher, dass du weißt was eine Shell Extension ist?

Welchen Typ von Shell Extension hast du implementiert?

Keiner der mir bekannten Typen scheint mir für deine Zwecke geeignet zu sein - aber ich kann mich irren.

Neutral General 21. Mär 2008 18:08

Re: Shellextension - OnFileClick
 
Hi,

Damals war es: IShellExtInit und IContextMenu:

Delphi-Quellcode:
TEncryptContextMenu = class(TComObject, IShellExtInit, IContextMenu)
Bei deiner Möglichkeit müsste ich das ganze mit nem Hook lösen oder?

Mein Code ist bisher folgender:

Delphi-Quellcode:
library Hookdll;

uses
  Windows, Messages, CommCtrl, Dialogs;

var
  HookHandle: THandle;

function ClickHook(nCode: Integer; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall;
begin
  if nCode = HC_ACTION then
  case PMsg(lParam)^.message of
    NM_CLICK:
      ShowMessage('NM_CLICK!'); // wobei es so nicht geht weil NM_CLICK < 0 und
                                // PMsg(lParam)^.message: Cardinal deswegen hatte ichs mal so:

   // case Integer(PMsg(lparam)^.Message) of
   //      NM_CLICK: ...
  end
  else
  Result := CallNextHookEx(HookHandle, nCode, wParam, lParam);
end;

function InstallHook: Boolean; stdcall;
begin
  Result := false;
  if HookHandle = 0 then
  begin
    HookHandle := SetWindowsHookEx(WH_GETMESSAGE,@ClickHook,
                                   hInstance,0);
    Result := true;
  end;
end;

function UnInstallHook: Boolean;
begin
  Result := UnhookWindowsHookEx(HookHandle);
  HookHandle := 0;
end;

exports
  InstallHook,
  UnInstallHook;

begin

end.
Aber ich bekomme irgendwie gar keine Message abgefangen. Aber ClickHook wird schon aufgerufen, das habe ich beim Debuggen festgestellt.

Gruß
Neutral General

Apollonius 21. Mär 2008 19:59

Re: Shellextension - OnFileClick
 
Im von Marabu verlinkten Text heißt es, dass NM_CLICK über WM_NOTIFY empfangen wird.

Neutral General 22. Mär 2008 12:20

Re: Shellextension - OnFileClick
 
Hi,

Ja das habe ich mittlerweile jetzt auch herausgefunden aber es kommt mir vor als würde absolut niemand WM_NOTIFY Nachrichten versenden (WinVista).

Delphi-Quellcode:
function ClickHook(nCode: Integer; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall;
var Info: PNMHdr;
begin
  case PMsg(lParam)^.message of
    WM_NOTIFY: begin
                 Info := PNMHdr(PMsg(lParam)^.lParam);
                 if Info.code = NM_CLICK then
                   ShowMessage('NM_CLICK!');
               end;
  end;
  Result := CallNextHookEx(HookHandle, nCode, wParam, lParam);
end;
:wiejetzt:

Ach ja: Ich habe das Interface ICopyHookA/W gefunden, mit dem man das Umbenennen/Kopieren/Löschen verhindern kann, was erst mal gut klingt. Dummerweise funktioniert das nur bei Druckern und Ordnern und nicht bei normalen Dateien... Also wäre auch dankbar wenn jemand auf diesem Wege noch weiterwüsste.

Gruß
Neutral General


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:34 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz