AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Fremdes PopupMenu erweitern

Ein Thema von Björn Ole · begonnen am 28. Jul 2010 · letzter Beitrag vom 5. Jul 2011
Antwort Antwort
Seite 2 von 3     12 3   
EWeiss
(Gast)

n/a Beiträge
 
#11

AW: Fremdes PopupMenu erweitern

  Alt 4. Jul 2011, 16:35
Ich habe ein Programm in Delphi geschrieben mit dem man fremde Menüs Fernsteuern kann!
Bei bedarf lade ich es als Open Source mal hoch.
Denke da ist was passendes dabei mit dem du weiterarbeiten könntest.

gruss
Bedarf!

Der Screenshot sieht vielversprechend aus. Kann man damit "nur" Menüs oder auch - wie von mir benötigt - PopupMenüs fernsteuern. Dann wäre es etwas für mich. Denn wenn man das mit fremden Programmen kann, sollte es innerhalb der eigenen Application erst Recht funktionieren.

Hier im Forum gibt es mehrere Themen dazu. Diese kommmen alle zu dem Ergebnis, dass man das PopupMenü lieber selbst (nach)schreiben und dann die weiteren Einträge hinzufügen sollte. Das finde ich nicht so elegant.

Gruß
Alle Fenster von dem du ein Handle in erfahrung bringen kannst und die ein Menü haben selbstverständlich
Habs glaube ich nur für Standard/System Menüs erstellt schon lange her..
Teste es einfach dann kannst sehen ob du es gebrauchen kannst.

PS:
Alternativ könntest du dein Popupmenu zerstören und einfach während der laufzeit mit neuen Einträgen
erweitern bzw.. neu einladen (aber zur Laufzeit )

Ich mache das genauso.

gruss

Geändert von EWeiss ( 4. Jul 2011 um 17:22 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#12

AW: Fremdes PopupMenu erweitern

  Alt 4. Jul 2011, 19:39
Self.Handle dürfte nicht das Handle des Memos auf deiner Form, sondern die Form selber sein.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#13

AW: Fremdes PopupMenu erweitern

  Alt 4. Jul 2011, 21:18
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  Menu: THandle;
begin
  Menu := GetMenu(Memo1.Handle);
  if Menu <> 0 then
  begin
    if not InsertMenu(Menu, 0, MF_BYPOSITION or MF_STRING, 0, 'Test') then
      RaiseLastOSError;
  end
  else
    RaiseLastOSError;
end;
Ich glaube, das mit dem Kontextmenü funktioniert nicht, weil es nicht sichtbar ist. Es wird erst erzeugt, wenn es aufgerufen wird.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#14

AW: Fremdes PopupMenu erweitern

  Alt 4. Jul 2011, 21:23
Wird schon gehen
Man kann das mit einem trick bewerkstelligen das Kontexmenü erstellen aber mit Focus unterdrücken
damit du es nicht siehst anschließend könnte man (also meine Idee) trotzdem an die Einträge kommen.

Beispiel Textbox:

Wie bekannt hat eine Textbox ein eigenes Kontexmenü das kann man aber unterdrücken in dem man vorher beim RButtonClick
diese auf Enabled False stellt anschließend wieder auf true dann den Focus auf die TextBox setzen und dann dein eigenes Popupmenu anzeigen lassen.

Meine idee auch wenn das menü unterdrückt wird müßte es eigentlich ausgelößt sein um daraus Daten entnehmen zu können.

gruss

Geändert von EWeiss ( 4. Jul 2011 um 21:33 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#15

AW: Fremdes PopupMenu erweitern

  Alt 4. Jul 2011, 21:31
Ich würde das Memo irgendwie subklassen oder den Aufruf des Kontextmenüs hooken.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Björn Ole
Björn Ole

Registriert seit: 10. Jul 2008
166 Beiträge
 
Delphi XE Professional
 
#16

AW: Fremdes PopupMenu erweitern

  Alt 4. Jul 2011, 23:50
Es wird erst erzeugt, wenn es aufgerufen wird.
Genau das war bei mir auch der Fall.

Hier mal das Wichtigste aus meiner hook.dll:
Delphi-Quellcode:
mmfData^.hHookWndProc := SetWindowsHookEx(WH_CALLWNDPROC, @HookWndProc, hInstance, TID);

function HookWndProc(Code: Integer; wParam: wParam; lParam: lParam): Integer;
  stdcall;
var
  cwp: PCWPSTRUCT;
begin
  Result := CallNextHookEx(mmfData^.hHookWndProc, Code, wParam, lParam);
  if Code >= 0 then
  begin
    cwp := PCWPSTRUCT(lParam);
    case cwp.message of
      WM_INITMENU:
        AddPopupItem(cwp.wParam);
    end;
  end;
end;

// - fügt dem PopupMenu mit Handle hPopup einen Eintrag "&Advanced" an zweiter Stelle ein
// - es handelt sich um das richtige PopupMenu, wenn die Anzahl der MenuItems = 8 und der Text des ersten MenuItems = "&Open" ist
procedure AddPopupItem(hPopup: Cardinal);
var
  mii: TMENUITEMINFO;
  s: string;
  len: Integer;
begin
  if GetMenuItemCount(hPopup) = 8 then
  begin
    len := GetMenuString(hPopup, 0, nil, 0, MF_BYPOSITION);
    if (len > 0) then
    begin
      SetLength(s, len + 1);
      GetMenuString(hPopup, 0, PChar(s), len + 1, MF_BYPOSITION);
      if Pos('&Open', s) > 0 then
      begin
        s := '&Advanced';
        ZeroMemory(@mii, sizeof(TMENUITEMINFO));
        mii.cbSize := sizeof(TMENUITEMINFO);
        mii.fMask := MIIM_TYPE;
        mii.dwTypeData := PChar(s);
        mii.cch := Length(s);
        InsertMenuItem(hPopup, 1, true, mii);
      end;
    end;
  end;
end;
Falls du noch etwas brauchst, sag Bescheid.
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#17

AW: Fremdes PopupMenu erweitern

  Alt 5. Jul 2011, 05:07
Zitat:
es handelt sich um das richtige PopupMenu, wenn die Anzahl der MenuItems = 8 und der Text des ersten MenuItems = "&Open" ist
Jo und wer garantiert dir das?

gruss
  Mit Zitat antworten Zitat
Benutzerbild von Björn Ole
Björn Ole

Registriert seit: 10. Jul 2008
166 Beiträge
 
Delphi XE Professional
 
#18

AW: Fremdes PopupMenu erweitern

  Alt 5. Jul 2011, 19:17
Solang es keinen anderen gibt, der wie ich an den PopupMenus rumschraubt, hab ich da keine Bedenken, zumal ich mein Tool nur privat einsetze.
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#19

AW: Fremdes PopupMenu erweitern

  Alt 5. Jul 2011, 19:33
Solang es keinen anderen gibt, der wie ich an den PopupMenus rumschraubt, hab ich da keine Bedenken, zumal ich mein Tool nur privat einsetze.
Ist nicht bösgemeint oder eine Anmache
Ich denke nur er wollte fremde popupmenus erweitern.

und da weiss er ja nicht wo was steht.

Im eigenen wird das gehn da du ja weist wo was stehen muss bz. steht um erfolg zu haben.

gruss
  Mit Zitat antworten Zitat
Benutzerbild von Björn Ole
Björn Ole

Registriert seit: 10. Jul 2008
166 Beiträge
 
Delphi XE Professional
 
#20

AW: Fremdes PopupMenu erweitern

  Alt 5. Jul 2011, 22:26
War auch nicht so aufgefasst.

Meine Antwort war aber schon auf ein fremdes Programm ausgelegt. Um genau zu sein handelte es sich um Bei Google suchenProxifier v2.9, dessen TrayMenu ich um einen Eintrag erweitert habe.
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:39 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