AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Standard Startmenü durch eigenes ersetzen
Thema durchsuchen
Ansicht
Themen-Optionen

Standard Startmenü durch eigenes ersetzen

Ein Thema von Diamondback2007 · begonnen am 31. Dez 2007 · letzter Beitrag vom 4. Jan 2008
Antwort Antwort
Seite 3 von 3     123   
Benutzerbild von Diamondback2007
Diamondback2007

Registriert seit: 2. Feb 2007
260 Beiträge
 
Delphi 2007 Professional
 
#21

Re: Standard Startmenü durch eigenes ersetzen

  Alt 4. Jan 2008, 14:42
Zitat von BullsEye:
Also solltet ihr lieber auf Diamonds Version warten *Diamond push*
find ch auch

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ß
Fabian E.
  Mit Zitat antworten Zitat
Benutzerbild von wicht
wicht

Registriert seit: 15. Jan 2006
Ort: Das schöne Enger nahe Bielefeld
809 Beiträge
 
Delphi XE Professional
 
#22

Re: Standard Startmenü durch eigenes ersetzen

  Alt 4. Jan 2008, 15:49
Nabend, also, ich poste das mal schnell... in das Programm habe ich das hier reingepackt:

Delphi-Quellcode:
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;
Die DLL habe ich wie folgt aufgebaut:

Delphi-Quellcode:
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.
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.

Gute Nacht, ich hoffe, jemand kann mit diesem Zeug irgendetwas anfangen...
http://streamwriter.org

"I make hits. Not the public. I tell the DJ’s what to play. Understand?"
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 3     123   


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:27 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