AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Beim Programmstart geht es, im Thread nicht?
Thema durchsuchen
Ansicht
Themen-Optionen

Beim Programmstart geht es, im Thread nicht?

Ein Thema von Mattze · begonnen am 30. Jan 2011 · letzter Beitrag vom 1. Feb 2011
Antwort Antwort
Mattze

Registriert seit: 6. Jan 2005
664 Beiträge
 
#1

AW: Beim Programmstart geht es, im Thread nicht?

  Alt 30. Jan 2011, 15:12
Hallo,

es ist kein Schreibfehler. In meiner Frage steht Finfo.iicon!

Nochmals: Der Witz und das Komische ist, dass das Icon mit dieser Methode völlig richtig bestimmt wird - nur nicht in Devicearrival.

1. Es war mal direkt (also ohne Thread) im Devicearrival kodiert. Kein Problem! Alles OK!
Dann habe ich das in einen Thread gepackt.

2. Beim Programmstart wird genau das gleiche mittels des Threads aufgerufen. Kein Problem! Alles OK! Das FInfo.iicon ist korrekt bestimmt.

3. Der gleiche Thread wird genau auf die gleiche Art wie beim Programmstart beim Devicearrival in Devicechange aufgerufen. Das Icon wird nicht gefunden. Stattdessen wir ein Standardicon zurückgeliefert. Für mich ist merkwürdig, dass aber FInfo.szDisplayname immer richtig gefunden wird.

Alle Klarheiten beseitigt? Es ist ziemlich schwierig zu beschreiben,
weil da zweimal genau das gleiche zu halb-unterschiedlichen Ergebnissen kommt.

Gruß
Mattze

PS: D7 pro, Windows 7 HP
Ich konnte die Iconnummern angeben, weil ich sie mir mal habe anzeigen lassen.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Beim Programmstart geht es, im Thread nicht?

  Alt 30. Jan 2011, 15:44
Es kann sein, daß Windows für jeden Thread eine eigene ImageList erstellt, somit wäre es möglich, daß die Liste im Thread eine andere ist, als die im Hauptthread.

Jedes Programm hat ja auch seine eigene SystemImageList, wobei ich auf diese bisher immer nur im Hauptthread zugriff, also vielleicht doch nicht nur je Programminstanz, sondern direkt für jeden Thread (damit Windows da nichts gegen Threads absichern mußte).

Wenn dem so ist, dann bleiben nur zwei/drei Möglichkeiten:
- das Auslesen in den Hauptthread verlagen
- die Icons im Thread auslesen und in je ein TIcon kopieren
- oder die Icons im Thread auslesen und an eine programmeigene TImageList kopieren
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (30. Jan 2011 um 15:46 Uhr)
  Mit Zitat antworten Zitat
Mattze

Registriert seit: 6. Jan 2005
664 Beiträge
 
#3

AW: Beim Programmstart geht es, im Thread nicht?

  Alt 30. Jan 2011, 15:52
Hallo,

kleine Ergänzung und Einschränkung:
Ich habe es eben unter XP probiert und nun scheint sich zu zeigen, dass es wirklich nur bei USB-Sticks daneben geht.
Bei neuer DVD in das DVD-LW oder der externen (schon beim Start angeschlossenen) USB-HD kommt auch das richtige Icon.
Beim USB-Stick, wenn er vor dem Programmstart schon angeschlossen ist, auch.
Das richtige Icon wird eben "nur" nicht gefunden, wenn der USB-Stick erst während des Programmlaufs angesteckt wird. Und das unabhängig davon, ob das Icon schon in der Systemimagelist steht oder nicht. (Beim Windows-Explorer funktioniert es aber richtig!)

Nur der Vollständigkeit halber:
Das Icon steht in der Wurzel auf dem Stick und ist dort in die Autorun.inf eingetragen. Ob das ein Geschwindigkeitsproblem ist?
Wie gesagt, wenn ich das nicht über Thread mache, sondern das, was in execute steht, direkt ausführen lasse, funktioniert es!?
  Mit Zitat antworten Zitat
Mattze

Registriert seit: 6. Jan 2005
664 Beiträge
 
#4

AW: Beim Programmstart geht es, im Thread nicht?

  Alt 30. Jan 2011, 15:58
Hallo,

danke!
Das werde ich mal probieren.
Es wäre aus Sicherheitsgründen des Systems sogar verständlich, dass jeder Thread auch eine eigene "Systemimagelist" hat.
Ich werde das nachher mal probieren.

Aber wie macht das dann der Explorer? Ich dachte eigentlich, dass der sowas auch über einen Thread macht...

Ich melde mich...

Gruß
Mattze
  Mit Zitat antworten Zitat
Mattze

Registriert seit: 6. Jan 2005
664 Beiträge
 
#5

AW: Beim Programmstart geht es, im Thread nicht?

  Alt 30. Jan 2011, 16:41
Hm...
Mir fällt gerade auf, dass es mit der eigenen Imagelist pro Thread wahrscheinlich nicht sein kann.
Wie gesagt:
Ist der USB-Stick beim Programmstart dran, ist auch das richtige Icon da, obwohl das genau über diesen Thread eingebaut wird!
Wenn der USB-Stick mal dran war, steht dessen Icon auch schon in der Systemimagelist. Angezeigt wird es aber nicht, wenn der Stick dann nach Programmstart nochmal eingesteckt wird. Also auch das Kopieren der Systemimagelist in eine Threadimagelist kann es nicht sein.

Also, ich sehe da nicht durch! Irgendwas fehlt mir da. Der Explorer kann es doch auch und der macht es sicherlich auch per Thread...

Gruß
Mattze
  Mit Zitat antworten Zitat
Mattze

Registriert seit: 6. Jan 2005
664 Beiträge
 
#6

AW: Beim Programmstart geht es, im Thread nicht?

  Alt 31. Jan 2011, 15:10
Hallo,

au-weiha! Asche auf mein Haupt!
Ich habe es nicht gelöst und es scheint auch nicht mit mir zusammen zu hängen, aber der Thread war es auch nicht!
Sogar meine benutzte "Fremd-Explorer-Komponente" (TVirtualExplorerEasyListview) macht das so, also nicht richtig.
Eigentlich bin ich mir sicher, dass das früher funktioniert hat, weil ich ja darauf geachtet hatte. Aber nun geht das weder unter XP noch unter 7. Auch nicht mit (viel) älteren Versionen des Programms, bei denen es eigentlich immer geklappt hat!
Wieso kann es der Windows-Explorer richtig?

Das Icon für das Laufwerk steht als .Ico auf dem Stick und ist dort in der Autorun angegeben.
Der Windows Explorer liest es richtig aus, alles (?) andere nicht.
Wie bekommt man das Icon eines Laufwerkes noch raus, außer mit SHGetFileInfo?
Vielleicht (Sicher) muss man das anders machen!

Gruß
Mattze
  Mit Zitat antworten Zitat
generic

Registriert seit: 24. Mär 2004
Ort: bei Hannover
2.416 Beiträge
 
Delphi XE5 Professional
 
#7

AW: Beim Programmstart geht es, im Thread nicht?

  Alt 31. Jan 2011, 15:21
Rufst du im Thread-Context CoInitialize auf?
Coding BOTT - Video Tutorials rund um das Programmieren - https://www.youtube.com/@codingbott
  Mit Zitat antworten Zitat
Mattze

Registriert seit: 6. Jan 2005
664 Beiträge
 
#8

AW: Beim Programmstart geht es, im Thread nicht?

  Alt 31. Jan 2011, 15:29
Hallo,

nein, aber vergesst bitte den Thread!
Ich habe das so gemacht, wie es früher war (und es meiner Meinung nach funktionierte), also ohne Thread, sondern direkt im Hauptprogramm kodiert. Geht nicht! Genau das gleiche Problem.
Warum geht das nicht und wie kann man das richtig machen? Der Explorer kann es doch auch. Gehört das zu den geheimsten Geheimnissen von Minimalweich?

Gruß
Mattze
  Mit Zitat antworten Zitat
Antwort Antwort


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 08:27 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 by Thomas Breitkreuz