![]() |
Re: Standard Startmenü durch eigenes ersetzen
Zitat:
wenn du möchtest kann ich dir mal die version mit OnTop per PN schicken zum testen. wenn du interesse hast meld dich einfach ;) gruß |
Re: Standard Startmenü durch eigenes ersetzen
Nabend, also, ich poste das mal schnell... in das Programm habe ich das hier reingepackt:
Delphi-Quellcode:
Die DLL habe ich wie folgt aufgebaut:
function InjectIntoProcess(lpProcessID: Cardinal; lpDllname: String):Boolean;
var hProc: Cardinal; oAlloc: Pointer; cWPM: Cardinal; hRemThread: Cardinal; begin result := false; SetLastError(ERROR_SUCCESS); hProc := OpenProcess(PROCESS_ALL_ACCESS, false, lpProcessID); if hProc <> 0 then begin oAlloc := VirtualAllocEx(hProc, 0, length(lpDllname), MEM_COMMIT, PAGE_EXECUTE_READWRITE); if oAlloc <> nil then begin if WriteProcessMemory(hProc, oAlloc, PChar(lpDllName), length(lpDllName), cWPM) = true then begin CreateRemoteThread(hProc, nil, 0, GetProcAddress(GetModuleHandle('kernel32.dll'), 'LoadLibraryA'), oAlloc, 0, hRemThread); if GetLastError = ERROR_SUCCESS then begin result := true; end; end; end; end; CloseHandle(hProc); end; procedure TForm1.Button1Click(Sender: TObject); var h: hwnd; pid: dword; begin h := FindWindow('Shell_TrayWnd', nil); //Taskbar suchen GetWindowThreadProcessID(h, @pid); //Prozess zur Taskbar suchen InjectIntoProcess(pid, 'hookdll.dll'); //Die DLL reinladen end;
Delphi-Quellcode:
So, das habe ich hier Quick and Dirty hingeklatscht und ist eigentlich nur aus Neugierde entstanden... Sicherlich sind Fehler drin oder falsche Annahmen meinerseits, aber weil ihr ja das Startmenü bauen wollt und ich seit etwas mehr als 30 Stunden keinen Schlaf hatte und das ja nur auf euren Wunsch gepostet habe, lege ich mich trotzdem nun mit gutem Gewissen schlafen.
library hookdll;
uses sysutils, Windows, messages; {$R *.res} var h: HWND; OldWndProc: pointer; function NewWndProc(hWnd: HWND; uMsg: UINT; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall; begin case uMsg of WM_LBUTTONDOWN: begin // Hier wurde der Linke Mausbutton auf den Startknopf gedrückt. MessageBeep(mb_iconinformation); Result := DefWindowProc(hWnd, uMsg, wParam, lParam); // Ob das hier richtig ist weiß ich nicht.. Exit; end; WM_USER + 22222: // Mit dieser Message kann der Hook deinstalliert werden, das klappt aber nur so "halb". begin SetWindowLong(h, GWL_WNDPROC, LongInt(@OldWndProc)); Result := 0; Exit; end; end; Result := CallWindowProc(OldWndProc, hWnd, uMsg, wParam, lParam); end; begin h := FindWindow('Shell_TrayWnd',nil); h := FindWindowEx(h,0,'Button',nil); //Startknopf finden OldWndProc := Pointer(SetWindowLong(h, GWL_WNDPROC, LongInt(@NewWndProc))); //Die WndProc umlenken end. Gute Nacht, ich hoffe, jemand kann mit diesem Zeug irgendetwas anfangen... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:44 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz