AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Welche unit wird benötigt?

Ein Thema von ghost007 · begonnen am 21. Dez 2007 · letzter Beitrag vom 24. Dez 2007
 
Benutzerbild von bitsetter
bitsetter

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

Re: Welche unit wird benötigt?

  Alt 23. Dez 2007, 19:36
Hast du auch der Variable Wnd das Handle der Toolbar übergeben?
Ansonsten habe ich es jetzt mal zum Testen so gemacht, dass der 2. Button in der Taskbar (ist ja auch eine Toolbar) von WinXP runtergedrückt wird.
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  TB: TTBBUTTON;
  p: PTBBUTTON;
  ProcessHandle, wnd: THandle;
  BytesR, ProcId: cardinal;
  count, loop, idx: integer;
const
  BtnIndex= 2;
begin
  Wnd := FindWindow('Shell_TrayWnd', nil);
  Wnd := FindWindowEx(Wnd, 0, 'ReBarWindow32', nil);
  Wnd := FindWindowEx(Wnd, 0, 'MSTaskSwWClass', nil);
  Wnd := FindWindowEx(Wnd, 0, 'ToolbarWindow32', nil);

  //wnd:=...;
  if isWindow(wnd) then
  begin
    idx:= 0;
    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
          count := SendMessage(wnd, TB_BUTTONCOUNT, 0, 0);
          if count= 0 then
            MessageDlg('Fehler bei TB_BUTTONCOUNT', mtError, [mbOk], 0);
          for loop := 0 to pred(count) do
          begin
            if SendMessage(wnd, TB_GETBUTTON, loop, Cardinal(p))= 0 then
              MessageDlg('Fehler bei TB_GETBUTTON', 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 TB.fsState and TBSTATE_HIDDEN = 0 then//sichtbar
              inc(idx);
            if idx= BtnIndex then
            begin
              if SendMessage(wnd, TB_PRESSBUTTON, TB.idCommand, MAKELONG (1, 0))= 0 then
              MessageDlg('Fehler bei TB_PRESSBUTTON', mtError, [mbOk], 0);
            end;
          end;
          VirtualFreeEx(ProcessHandle, p, 0, MEM_RELEASE);
        end
        else
          MessageDlg(format('Fehler bei VirtualAllocEx %s', [SyserrorMessage(getLastError)]), mtError, [mbOk], 0);
      finally
        CloseHandle(ProcessHandle);
      end;
  end
  else
    MessageDlg('Kein gültiges Fenster Hande', mtError, [mbOk], 0);
end;
Gruß bitsetter
"Viele Wege führen nach Rom"
Wolfgang Mocker (geb. 1954), dt. Satiriker und Aphoristiker
  Mit Zitat antworten Zitat
 

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 03:20 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