Es ist zum verzweifeln...ich glaube ich habe jetzt schon ganz Google durchgelesen
Aber irgendwie bekomme ich es nicht gebacken... oder verstehe es nicht.
Ich lege die Menüitems folgendermassen an:
Delphi-Quellcode:
ZeroMemory(@mii, sizeof(TMENUITEMINFO));
mii.cbSize := sizeof(TMENUITEMINFO);
mii.fMask := MIIM_TYPE or MIIM_ID or MIIM_DATA or MIIM_STATE;
mii.dwTypeData := PChar(s); // Text des Menüitems
mii.dwItemData := cardinal(v.Stmt.lineNr);
mii.cch := Length(s);
mid := mid +1;
mii.wID := mid ;
mii.fType := MFT_STRING;
mii.fState := MFS_ENABLED;
count := GetMenuItemCount(jump);
count := count + 1 ;
InsertMenuItem(jump, count, true, mii);
So weit so gut...
Wie ich bis jetzt gelernt habe(oder dachte gelernt zu haben!) sollte mii.wID dazu da sein, später festzustellen,
welches Menuitem ausgewählt wurde.(eindeutige ID)
Da ich ja nicht weiß, wie die IDs der bestehenden Menuitems sind, habe ich einen recht hohen Wert angesetzt
mid := 64000
Das tut ja schon mal.
Aber wie bekomme ich mit, wenn ein Menueintrag angeklickt wurde?
Da ich eh' schon einen
DLL-Hook verwende, dachte ich, dass ich den WM_COMMAND abfange:
Hier mal der Hook
Delphi-Quellcode:
try
begin
if HookHandleMSG = 0 then
begin
HookHandleMsg := SetWindowsHookEx(WH_CALLWNDPROC, @MsgHookProc,
HInstance, 0);
MessageBox(0,'Msg-Hook installiert','Info',0);
end
else MessageBox(0,'MsgHook bereits installiert','Info',0);
end;
except MessageBox(0,'Msg-Hook konnte nicht installiert werden!','Info',0);
end;
und so fange ich die Messages ab:
Delphi-Quellcode:
if nCode < HC_ACTION then Result := CallNextHookEx(HookHandleMsg, nCode, wParam, lParam)
else
begin
fillchar(cwps,Sizeof(CWPStruct),0);
CopyMemory(@cwps, Pointer(lParam), SizeOf(CWPSTRUCT));
case cwps.message of
WM_INITMENU:
// Menüeinträge erzeugen...
WM_COMMAND:
begin
if cwps.lParam = 0 then
begin
s := inttostr(loword(wParam));
MessageBox(0,pchar(s),'Info',0);
end;
.
.
.
Laut Google bedeutet lParam=0 -> es wurde ein Menüeintrag ausgewählt... aber die MessaageBox erscheint nie. Auch nicht bei den nicht von mir erzeugten Einträgen.
Mache ich das IF vor der MessageBox weg, werde ich mit MessageBoxen überschwemmt...
Weiß jemand mehr?