Einzelnen Beitrag anzeigen

Benutzerbild von bitsetter
bitsetter

Registriert seit: 17. Jan 2007
1.169 Beiträge
 
Turbo Delphi für Win32
 
#21

Re: Welche unit wird benötigt?

  Alt 23. Dez 2007, 18:35
Du hättest natürlich einige Fehlermeldungen einbauen können oder einfach F7 benutzen.
Delphi-Quellcode:
procedure TForm1.Button4Click(Sender: TObject);
var
  TB: Commctrl.TBBUTTONINFO; p: Commctrl.PTBBUTTONINFO;
  ProcessHandle, wnd: THandle;
  BytesW, BytesR, ProcId: cardinal;
const
  BtnIndex= 0;
begin
  wnd:= ...;
  GetWindowThreadProcessId(wnd, @ProcId);
  ProcessHandle := OpenProcess(PROCESS_VM_OPERATION or PROCESS_VM_READ or PROCESS_VM_WRITE, False, ProcId);
  if ProcessHandle= 0 then
    MessageDlg(format('Fehler bei OpenProcess %s', [SyserrorMessage(getLastError)]), mtError, [mbOk], 0)
  else
    try
      p := VirtualAllocEx(ProcessHandle, nil, SizeOf(TB), MEM_COMMIT, PAGE_READWRITE);
      if Assigned(p) then
      begin
        TB.cbSize := SizeOf(TB);
        TB.dwMask := CommCtrl.TBIF_COMMAND;
        if not WriteProcessMemory(ProcessHandle, p, @TB, SizeOf(TB.cbSize) + SizeOf(TB.dwMask), BytesW) then
          MessageDlg(format('Fehler bei WriteProcessMemory %s', [SyserrorMessage(getLastError)]), mtError, [mbOk], 0);
        if SendMessage(wnd, TB_GETBUTTONINFO, BtnIndex, Cardinal(p))<> BtnIndex then
          MessageDlg('Fehler bei TB_GETBUTTONINFO', mtError, [mbOk], 0);
        if not ReadProcessMemory(ProcessHandle, p, @TB, SizeOf(TB), BytesR) then
          MessageDlg(format('Fehler bei ReadProcessMemory %s', [SyserrorMessage(getLastError)]), mtError, [mbOk], 0);
        if SendMessage(wnd, TB_PRESSBUTTON, TB.idCommand, MAKELONG (1, 0))= 0 then
          MessageDlg('Fehler bei TB_PRESSBUTTON', mtError, [mbOk], 0);
        VirtualFreeEx(ProcessHandle, p, 0, MEM_RELEASE);
      end
      else
        MessageDlg(format('Fehler bei VirtualAllocEx %s', [SyserrorMessage(getLastError)]), mtError, [mbOk], 0);
    finally
      CloseHandle(ProcessHandle);
    end;
end;
EDIT: Was für ein Betriebssystem hast du überhaupt?
Gruß bitsetter
"Viele Wege führen nach Rom"
Wolfgang Mocker (geb. 1954), dt. Satiriker und Aphoristiker
  Mit Zitat antworten Zitat