Avatar billede mahh Nybegynder
09. maj 2000 - 15:01 Der er 18 kommentarer

Tilføje menupunkt i andre programmer/vinduer

Hejsa!

Jeg har installeret Paintshop Pro og når jeg højreklikker i øverste venstre hjørne af et vindue kommer der en menu frem hvor jeg blandt andet kan "browse with paintshop pro".

Mit spørgsmål er: Hvordan tilføjer jeg selv sådan et menupunkt til vinduer og programmer og kan det lade sig gøre at dette menupunkt kun er der når mit program afvikles?
Avatar billede mahh Nybegynder
09. maj 2000 - 15:02 #1
Jeg ville gerne give mere en 60 point, men det kan jeg af en eller anden grund ikke... Jeg er villig til at oprette dummy spørgsmål hvis der ønskes flere point.
Avatar billede kokoko Nybegynder
09. maj 2000 - 22:50 #2
hehe.. du kan trykke der hvor der står 60 "point" så kan du sætte det op til det antal du har ialt...
Avatar billede kim_bille Nybegynder
09. maj 2000 - 23:26 #3
Det du taler om hedder explore-extention (tror jeg nok).

De ting det står når du højre klikker på enn fil er bestem af registringsdatabasen. Du kan rette i hvad det står ved at vælge mappeinstillinge-filtyper-rediger i explore.

Håber dette hjælper dig på vej
Avatar billede mahh Nybegynder
10. maj 2000 - 06:56 #4
Jeg tror at vi bevæger os i den rigtige retning, men den menu der kommer frem når man højre klikker på en fil skal jeg ikke bruge til noget... Jeg skal kun bruge den menu der kommer frem når man højreklikker i øverste venstre hjørne af et vindue/program. Derudover må det ekstra menupunkt kun være der når programmet kører.
Avatar billede sjensen Nybegynder
10. maj 2000 - 12:40 #5
Der er en fin artikel (med eksempler) på følgende link:

http://www.undu.com

vælg articles og søg efter "shell"

Dokumentet hedder "property sheet explorer shell extentions" og der er henvisninger dels til beskrivelser og downloads af sourcekoder.
Avatar billede mahh Nybegynder
11. maj 2000 - 11:55 #6
sjensen > Jeg har læst artiklen og jeg er ikke sikker på at den indeholder det jeg skal bruge...

Så vidt jeg kan se handler artiklen om hvordan man tilføjer tab's til fil-properties.

Jeg skal tilføje et menupunkt til den menu der kommer frem når man højreklikker i øverste venstre hjørne af et vindue (ikke en fil)
Avatar billede sjensen Nybegynder
11. maj 2000 - 14:41 #7
mahh, det har jeg forstået, men artiklen handler også generelt om shell extentions, og det er den del du skal koncentrere dig om.

Jeg kan desværre ikke hjælpe dig med et program eks. med source da jeg ikke har et men jeg vil gerne prøve at finde et til dig.

I artiklen er der en del skriveri om hvilke API kald der udfører hvad, og det er denne vej du skal.
Avatar billede mahh Nybegynder
15. maj 2000 - 09:11 #8
Jeg ville meget gerne have hvis du kunne finde et eksempel til mig for jeg må være lidt for dum til at forstå hvad der står i den artikel. Jeg har nærlæst den igen og stadig kan jeg ikke finde noget som hjælper mig ret meget.
Avatar billede michaelras Nybegynder
22. maj 2000 - 13:01 #9
Det med "browse with paintshop pro" har INTET med explorer extensions at gøre, det er en simpel tilføjelse til registreringsdatabasen. Prøv at kigge under (i et almindeligt stifinder vindue) "Vis", "Indstillinger", "Filtyper" og klik rediger ved "Mappe", der har du din "browse with paintshop pro" (det samme som "HKEY_CLASSES_ROOT\Folder\shell\Browse with Paint Shop Pro" i reg-databasen)

Mere generelt om tilføjelse af menupunkter til system-menuen: der er et par API-kald som gør det muligt, kan ikke lige huske dem, men vender tilbage når jeg har fundet dem

Michael
Avatar billede sjensen Nybegynder
22. maj 2000 - 13:19 #10
mahh,

du skal se i win32.hlp efter følgende api's

GetSystemMenu, AppendMenu, InsertMenu, ModifyMenu, og der er en god forklaring på brugen af det sammen med beskrivelsen for WM_SYSCOMMAND

Nedenstående et lille eksempel hvor jeg fjerner menupunkter fra systemmenuen:

  SystemMenu          := GetSystemMenu(Handle, False);
  DeleteMenu(SystemMenu, SC_TASKLIST, MF_BYCOMMAND);
  DeleteMenu(SystemMenu, 7, MF_BYPOSITION);
  DeleteMenu(SystemMenu, 5, MF_BYPOSITION);
  DeleteMenu(SystemMenu, SC_MAXIMIZE, MF_BYCOMMAND);
  DeleteMenu(SystemMenu, SC_MINIMIZE, MF_BYCOMMAND);
  DeleteMenu(SystemMenu, SC_SIZE, MF_BYCOMMAND);
  DeleteMenu(SystemMenu, SC_RESTORE, MF_BYCOMMAND);
  DeleteMenu(SystemMenu, SC_MOVE, MF_BYCOMMAND);

Dette bruges til at fjerne hele systemmenuen fra f.eks. et trayareaprogram. Jeg håber du kan bruge noget af det.
Avatar billede mahh Nybegynder
23. maj 2000 - 09:03 #11
sjensen,

Nu er vi absolut på den rigtige vej... Jeg har fået tilføjet en menupunkt til systemmenuen i et andet program og det er også fint nok, men jeg kan stadig ikke regne ud hvordan jeg skal fange den event der fremkommer når der trykkes på mit nye menupunkt...

Jeg har fundet et enkelt eksempel som viser hvordan man gør, men så vidt jeg kan se kan det kun lade sig gøre at fange event'en hvis det er mig selv der opretter vinduet. Kan det virkelig passe?

(Jeg er ked at skulle blive ved med at afvise dine svar, men der mangler desværre lige lidt endnu :-)
Avatar billede michaelras Nybegynder
23. maj 2000 - 18:00 #12
Mahh: For at fange "eventen" er du nød til at implementere en Hook - det er så vidt jeg ved den eneste mulighed...

Sjensen: du huggede mine API-kald :)

Michael
Avatar billede mahh Nybegynder
24. maj 2000 - 07:07 #13
michaelras,

Du har sikkert ret, men kunne du fortælle lidt om hvordan man gøre det så?
Avatar billede sjensen Nybegynder
24. maj 2000 - 11:37 #14
mahh,

du skal lave en dll der indeholder det program du vil have afviklet når man klikker på dit nye menupunkt.

Dll'en skal du installere under windows et eller andet sted, og i forbindelse med det api hvor du opretter dit menupunkt angiver du også hvilke procedurer der skal igangsættes. Jeg er ikke helt sikker men det er noget med WM-syscommand. Det kaldes for Add-In til de forskellige programmer, men du skal være opmærksom på at det ikke er alle programmer der kan ændres på denne måde.

Avatar billede michaelras Nybegynder
24. maj 2000 - 14:44 #15
Menupunkter er identificeret med et ID, som sendes til det vindue (hwnd) som ejer menuen i en WM_COMMAND / WM_SYSCOMMAND message, ved at opsætte en global hook kan ens eget program læse de messages der sendes til andre programmer - ikke som normalt, hvor man kun har adgang til de messages der sendes til ens eget program. Det der er farligt ved hooks er, at hvis man kommer til at lave en fejl er det HELE systemet - altså hele Windows - man fucker op (kun den kørende sesseion, alt er iorden efter reboot), da alle beskeder sendes til den funktion man har lavet, og hvis den funktion pludselig ikke svarer, så svarer resten af systemet heller ikke. Globale Hooks SKAL ligges i en DLL. Så man kan godt anskue den som en Add-In til hele systemet (som sjensen nævnte). Den type Hook der skal tilføjes er nok en WH_MSGFILTER, da den:
"monitors messages generated as a result of an input event in a dialog box, message box, menu, or scroll bar" (tekst fra MSDN om SetWindowsHookEx)

se evt http://msdn.microsoft.com/library/psdk/winbase/hooks_9rg3.htm for mere information om Hooks på Microsofts hjemmeside (MSDN)

Michael
Avatar billede mahh Nybegynder
26. maj 2000 - 12:22 #16
Nu er jeg efterhånden ved at være meget tæt på en løsning, men der mangler stadig lige det sidste.

Jeg kan tilføje et menupunkt til systemmenuen i andre programmer og jeg ved at for at reagere når der bliver trykket på dette nye menupunkt så skal jeg lave en hook til programmet. Jeg ved også at jeg bliver nødt til at lave denne hook i en dll fil for at det virker, men jeg har en del problemer med at få det til at fungerer.

Det jeg skal bruge nu er enten en meget enkel, men avanceret, forklaring på hvordan man gør det der med hooks og dll filer i delphi eller også et eksempel der virker.
Avatar billede michaelras Nybegynder
26. maj 2000 - 15:55 #17
Jeg tror desværre ikke det bliver fra mig (lige forløbig), jeg har de sidste 2 måneder kæmpet med at få hooks til at virke, men med det resultat hver gang at det crasher de resterende programmer - og nogle gange også hele windows. Hvis jeg får mit til at virke vil jeg meget gerne sende dig koden - eller et eksempel på hvordan jeg har fået det til at virke, da jeg efterhånden (tror/håber jeg) er meget tæt på at det virker...

Michael
Avatar billede webb Nybegynder
12. marts 2001 - 17:07 #18
Jeg sad lige og læste hele historien og
blev lidt forvirret da der nu skulle laves en Dll m.m. (Add-in)

For at kommentere vil jeg pointere at der er forskel på
om man vil skrive et add-on til programmet (Til Winamp og Photoshop og andre
programmer har de lavet den mulighed at man kan lave et add-on til what ever og
det har de lavet en skabelon for\"

Men at patche et program \"live\" er noget andet !

-Webb
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester