AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Item aus einer SysListView32 lesen (Vista x64)
Thema durchsuchen
Ansicht
Themen-Optionen

Item aus einer SysListView32 lesen (Vista x64)

Ein Thema von hugo1990 · begonnen am 18. Feb 2009 · letzter Beitrag vom 2. Sep 2009
Antwort Antwort
Seite 1 von 2  1 2      
hugo1990

Registriert seit: 27. Dez 2006
166 Beiträge
 
Turbo Delphi für Win32
 
#1

Item aus einer SysListView32 lesen (Vista x64)

  Alt 18. Feb 2009, 21:10
Ich möchte gern aus TaskMangaer ListView (eigentlich aus einem anderem SysListView32, welches aber schwieriger zu umschreiben wäre) ein Item auslesen, dazu habe ich mir folgenden Code aus mehreren Codeschnipseln zusammengebastelt.

Delphi-Quellcode:
var
  LVItem, lvi: TLVItem;
  PrItem, pvi: PLVItem;
  MemMgr: TProcessMemMgr;
  Buffer: PChar;
begin
  MemMgr := CreateProcessMemMgrForWnd(aWnd);
  PrItem := MemMgr.AllocMem(SizeOf(TLVItem));
  FillChar(LVItem, SizeOf(TLVItem), 0);
  LVItem.iItem := SendMessage(aWnd, LVM_GETNEXTITEM, -1,
      LVNI_SELECTED);
  LVItem.mask := LVIF_TEXT or LVIF_STATE;
  LVItem.iSubItem := 0;
  LVItem.pszText := Buffer;
  LVItem.cchTextMax := 255;
  MemMgr.Write(LVItem, PrItem, SizeOf(TLVItem));
  ListView_GetItem(aWnd, PrItem^);
  MemMgr.Read(PrItem, LVItem, SizeOf(TLVItem));
  Caption := MemMgr.ReadStr(LVItem.pszText);
  MemMgr.Free;
end;
dazu benötigt man noch die uProcessMemMgr.pas, die ich hier irgendwo im Forum gefunden habe. Auf meinem Laptop, auf dem Windows Vista Home Basic (32-bit) installiert ist, läuft das einwandfrei und ich bekomme den Text des Eintrags, aber auf meinem Rechner, auf dem Windows Vista Business (64-bit) installiert ist, bekomme ich nur einen leeren String zurück. Ich habe das Programm dann noch einen Kumpel geschickt, der auch ein 64-bit Vista installiert hat und er bekommt ebenfalls nur einen leeren String. Leider habe ich kein 2. 32-bit Vista um es dort noch testen zu können, aber ich vermute, dass es an dem 64-bit Vista liegt.
Liege ich da mit meiner Annahme richtig?
Weiß jemand, wie ich das Problem lösen kann?

Grüße
hugo1990

Edit:
Überschrift geändert von:
Item aus der ListView des TaskManagers lesen (Vista x64)
zu:
Item aus einer SysListView32 lesen (Vista x64)
  Mit Zitat antworten Zitat
Benutzerbild von toms
toms
(CodeLib-Manager)

Registriert seit: 10. Jun 2002
4.648 Beiträge
 
Delphi XE Professional
 
#2

Re: Item aus der ListView des TaskManagers lesen (Vista x64)

  Alt 19. Feb 2009, 09:50
Hallo

shima hat hierzu hier eine Antwort geschrieben.
Was ist eigentlich der Sinn dieses Auslesens? An die Laufenden Tasks kommt man auch einfach.
Thomas
  Mit Zitat antworten Zitat
hugo1990

Registriert seit: 27. Dez 2006
166 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Item aus der ListView des TaskManagers lesen (Vista x64)

  Alt 19. Feb 2009, 15:55
Es geht mir ja nicht um die Tasks, ich habe ja oben geschrieben, dass ich den Taskmanager nur genommen habe, weil es besser zu umschreiben war und es ebenfalls ein SysListView32 ist. Aber bevor jetzt noch mehr solche Fragen kommen, schreibe ich mal, was ich genau vorhabe.
Also ich möchte ein Programm schreiben, welches mir das Standardwiedergabegerät unter Vista ändert. Da das aber nicht mehr so wie unter früheren Windowsversionen funktioniert, indem man ein paar Keys in der Registry ändert, muss ich einen Umweg über den Soundeinstellungsdialog gehen. Dort muss ich einfach nur das Wiedergabegerät, welches als Standard festgelgt werden soll auswählen und auf den Button "Als Standard" klicken. Das funktioniert ja auch schon in meinem Programm, nur bekomme ich halt unter Vista x64 die Namen der Geräte nicht. Die Geräte stehen zwar immer in der selben Reihenfolge da, aber davon will ich nicht grundsätzlich ausgehen, denn ich kann ja auch mal ein neues Gerät hinzufügen und es ändert sich dadurch etwas an der Reihenfolge.
Und was in dem anderen Thread beschrieben wird kann es definitiv nicht sein, denn ich bekomme ja keine Fehlermeldung und das Sendmessage funktioniert ja auch um ein anderes Item in der ListView auszuwählen und auf den "Als Standard"-Button zu klicken. Mein Problem ist halt nur, dass ich unter Vista x64 nicht den Text des Items bekomme und das wäre mir schon wichtig.

Grüße
hugo1990
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#4

Re: Item aus einer SysListView32 lesen (Vista x64)

  Alt 19. Feb 2009, 16:01
Ich bin mir ziemlich sicher, dass es dafür API-Funktionen gibt.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
hugo1990

Registriert seit: 27. Dez 2006
166 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: Item aus einer SysListView32 lesen (Vista x64)

  Alt 19. Feb 2009, 16:06
@Luckie

Wofür, um das Standardwiedergabegerät zu ändern oder für das Problem mit dem Item.
Wenn du ersteres meinst, dann muss ich dich eines Besseren belehren, denn ich habe eine halbe Ewigkeit rumgegooglet um dafür eine API-Funktion zu finden und habe dann herausgefunden, dass man das in Vista rausgenommen hat, mit der Begründung, dass ein fremdes Programm nicht die Einstellungen des Benutzers verändern darf.
  Mit Zitat antworten Zitat
hugo1990

Registriert seit: 27. Dez 2006
166 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: Item aus einer SysListView32 lesen (Vista x64)

  Alt 19. Feb 2009, 16:30
Ah, ich habe gerade herausgefunden, dass es wirklich an den 64-bit liegt, die einzige Lösung, die es dafür gibt, ist das ganze mit einem 64-bit Compiler zu compilieren. Da es für Delphi meines Wissens nach soetwas aber noch nicht gibt, werde ich dann wohl das ganze mit einer anderen Sprache lösen müssen.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#7

Re: Item aus einer SysListView32 lesen (Vista x64)

  Alt 19. Feb 2009, 16:35
Zitat:
dass man das in Vista rausgenommen hat, mit der Begründung, dass ein fremdes Programm nicht die Einstellungen des Benutzers verändern darf.
find ich aber auch ganz schön so
$2B or not $2B
  Mit Zitat antworten Zitat
teebee

Registriert seit: 17. Jan 2003
Ort: Köln
460 Beiträge
 
Delphi 6 Professional
 
#8

Re: Item aus einer SysListView32 lesen (Vista x64)

  Alt 19. Feb 2009, 16:54
Überprüfe, wieviel-bittig Dein Betriebssystem ist (Stichwort IsWOW64Process) und benutze eine 64-Bit Struktur, falls nötig:
Delphi-Quellcode:
TLVItem64 = packed record
                  mask: UINT;
                  iItem: Integer;
                  iSubItem: Integer;
                  state: UINT;
                  stateMask: UINT;
                  _align: LongInt; // Zeiger müssen in 64-Bit-Windows an 8-Byte-Alignment beginnen
                  pszText: Int64; // Zeiger haben in 64-Bit-Windows 8 Byte
                  cchTextMax: Integer;
                  iImage: Integer;
                  lParam: LPARAM;
               end;
  Mit Zitat antworten Zitat
hugo1990

Registriert seit: 27. Dez 2006
166 Beiträge
 
Turbo Delphi für Win32
 
#9

Re: Item aus einer SysListView32 lesen (Vista x64)

  Alt 19. Feb 2009, 18:13
Zitat von teebee:
Überprüfe, wieviel-bittig Dein Betriebssystem ist (Stichwort IsWOW64Process) und benutze eine 64-Bit Struktur, falls nötig:
Delphi-Quellcode:
TLVItem64 = packed record
                  mask: UINT;
                  iItem: Integer;
                  iSubItem: Integer;
                  state: UINT;
                  stateMask: UINT;
                  _align: LongInt; // Zeiger müssen in 64-Bit-Windows an 8-Byte-Alignment beginnen
                  pszText: Int64; // Zeiger haben in 64-Bit-Windows 8 Byte
                  cchTextMax: Integer;
                  iImage: Integer;
                  lParam: LPARAM;
               end;
Cool, danke. Das war es, also brauche ich doch keinen 64-bit Compilier.
  Mit Zitat antworten Zitat
Benutzerbild von xDestiny
xDestiny

Registriert seit: 3. Feb 2005
Ort: Berlin
10 Beiträge
 
Delphi 2006 Architect
 
#10

Re: Item aus einer SysListView32 lesen (Vista x64)

  Alt 1. Sep 2009, 01:29
Hey hugo!

Ich stehe gerade vor dem selben Problem, das Standardwiedergabegerät zu ändern! Bisher hab ich allerdings nich besonders viel Erfolg gehabt. Wär nett, wenn du vllt ma posten könntest, wie du es geschafft hast!

lg xdestiny
xdestiny
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 19:09 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