Habe auch eine Lösung fürs Icon .. und obwohl ich mich mit Handles oder Speicheradr. immer schwer tue ..... sie funktioniert soweit ichs sehe.
Code: Alles auswählen
; *** Als .Dll compilieren (CompilerOption: Unicode an) und in .cpl umbenennen. Dann in c:\Windows\System32 kopieren ***
EnableExplicit
Define Name.s,Info.s
ProcedureDLL.i CPlApplet(hwndCPI.i, uMsg.l, lParam1.l, lParam2.l)
Shared Name.s,Info.s
#CPL_DBLCLK = 5
#CPL_EXIT = 7
#CPL_GETCOUNT = 2
#CPL_INIT = 1
#CPL_INQUIRE = 3
#CPL_STOP = 6
#CPL_NEWINQUIRE = 8
Structure NEWCPLINFO ; typedef struct tagNEWCPLINFO {
dwSize.l ; DWORD dwSize;
dwFlags.l ; DWORD dwFlags;
dwHelpContext.l ; DWORD dwHelpContext;
lData.i ; LONG_PTR lpData;
hIcon.i ; HICON hIcon;
szName.c[32] ; TCHAR szName[32];
szInfo.c[64] ; TCHAR szInfo[64];
szHelpFile.c[128] ; TCHAR szHelpFile[128];
EndStructure ; } NEWCPLINFO, *LPNEWCPLINFO;
Define result,*cp.NEWCPLINFO
Select uMsg
Case #CPL_INIT
;beim Initieren die Variablen füllen
Name = "CPL-Test" ;Name der unter dem Icon erscheint (max. 32)
Info = "Ruft nur Notepad auf" ;Info die in der Statusbar erscheint (max. 64)
result = 1
Case #CPL_GETCOUNT
result = 1 ;1 Icon
Case #CPL_NEWINQUIRE
;Informationen setzen
*cp.NEWCPLINFO = lParam2
*cp\dwSize = SizeOf(NEWCPLINFO)
*cp\hIcon = CatchImage(0, ?CPLicon)
PokeS(@*cp\szName[0], Name)
PokeS(@*cp\szInfo[0], Info)
result = 0
Case #CPL_DBLCLK
;hier passiert alles was beim Doppelklick auf das Icon passieren soll
;in diesem Fall wird Notepad gestartet
RunProgram("Notepad.exe","c:\autoexec.bat", "c:\", 0)
result = 0
Case #CPL_STOP
result = 0
Case #CPL_EXIT
result = 0
EndSelect
ProcedureReturn result
EndProcedure
DataSection
CPLicon:
Data.q $2020000100010000,$02E8000400010010,$0028000000160000,$0040000000200000,$0000000400010000
Data.q $0000000000000000,$0000000000000000,$0000000000000000,$8000008000000000,$0080008080000000
Data.q $8080008000800000,$808000C0C0C00000,$FF0000FF00000080,$00FF00FFFF000000,$FFFF00FF00FF0000
Data.q $000000FFFFFF0000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
Data.q $0000000000000000,$3B3B8B0000000000,$0000000000303B3B,$3B3B8B0000000000,$0000000000303B3B
Data.q $3B3B8B0000000000,$8888000000303B3B,$8888888888888888,$2280008088888888,$2122722227227222
Data.q $2280002022211222,$2222720200200000,$2280002022222222,$0022720288278078,$2280002002002000
Data.q $78227202772070A7,$2280702002882780,$2222722222222222,$2280702022222222,$A777770200200000
Data.q $9280702072A7777A,$2222720288278078,$2280702072222222,$22227202772A70A7,$2280702072020000
Data.q $2277772222222222,$9280707077028878,$2227720200200000,$2280702072028878,$2227720288278078
Data.q $2280002072028878,$2227720277207007,$9280807077027707,$2227722272222227,$2280002072222227
Data.q $A2A7722272222227,$77800020722222A7,$7777777777777777,$8888007077777777,$8888888888888888
Data.q $0000008088888888,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$FFFF000000000000
Data.q $FFFFFFFFFFFFFFFF,$FCFFFFFFFFFFFFFF,$FCFF3F00FCFF3F00,$0000030000003F00,$0000030000000300
Data.q $0000000000000300,$0000000000000000,$0000000000000000,$0000000000000000,$4040000000000000
Data.q $0040030000400008,$0000030000400300,$FFFFFFFFFFFF0300,$FFFFFFFFFFFFFFFF,$FFFFFFFFFFFFFFFF
Data.q $0000FFFFFFFFFFFF
EndDataSection
Jetzt noch den geheimnisvollen Kategorie-Wert/-Ort ohne Registrytricks dazu und wir sind fertig ...
wäre dann ggf. auch was für das nächste WinAPI-Library-Update.