AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Kein Event vom Timer Win7

Ein Thema von EWeiss · begonnen am 20. Dez 2009 · letzter Beitrag vom 21. Dez 2009
Antwort Antwort
Seite 1 von 2  1 2      
EWeiss
(Gast)

n/a Beiträge
 
#1

Kein Event vom Timer Win7

  Alt 20. Dez 2009, 10:16
Ich erstelle einen Timer über MMSystem


Delphi-Quellcode:
procedure TimerProc(wTimerID: DWORD; Msg: DWORD;
                                     dwUser: longint;
                                     dw1: longint;
                                     dw2: longint); stdcall;
begin
  PostMessage(RenderHandle, MyTimerMessage, dw1, dw2);

end;
Delphi-Quellcode:
RenderHandle := Classes.AllocateHWnd(RenderProc);
TimerID := timeSetEvent(25, 300, @TimerProc, RenderHandle, TIME_PERIODIC);
Delphi-Quellcode:
procedure RenderProc(var Msg: TMessage);
begin
  blabla..;

end;
In Xp feuert der Timer richtig ab..

Unter Win7 geht so gut wie gar nichts.
System ist schnell genug daran liegt es nicht.

Sieht so aus das mein Event in der RenderProc nicht richtig ankommt.
Die Fenster scheinen das irgendwie zu blocken.

Jemand ne ahnung was das sein könnte?

EDIT:
Es liegt an der Oberfläsche von Win7.
Sobald ich die Visuellen Style ausschalte funktioniert das Event wieder. Was soll denn der Mist jetzt.

Gibt es eine alternative die Funktioniert?

gruss Emil
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: Kein Event vom Timer Win7

  Alt 20. Dez 2009, 11:08
- stimmt das Fensterhandle (RenderHandle)?
- wurde der Timer (TimerID) erstellt?
- wird TimerProc wirklich nicht aufgerufen?
- wenn du RenderHandle an TimerProc übergibst, warum nutzt du dann eine böse globale Variable?
- seit Vista sind viele Dinge verboten ... hast du von der Stelle, wo RenderProc aufgerufen wird, überhaupt das Recht an das Fenster eine Nachricht zu schicken?
- uvw., also anwelcher Stelle genau wird diese Kette unterbrochen?
daß am Ende nichts ankommt sagt ja nichts darüber aus, wo es genau hängt.
$2B or not $2B
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#3

Re: Kein Event vom Timer Win7

  Alt 20. Dez 2009, 11:23
Zitat von himitsu:
- stimmt das Fensterhandle (RenderHandle)?
- wurde der Timer (TimerID) erstellt?
- wird TimerProc wirklich nicht aufgerufen?
- wenn du RenderHandle an TimerProc übergibst, warum nutzt du dann eine böse globale Variable?
- seit Vista sind viele Dinge verboten ... hast du von der Stelle, wo RenderProc aufgerufen wird, überhaupt das Recht an das Fenster eine Nachricht zu schicken?
- uvw., also anwelcher Stelle genau wird diese Kette unterbrochen?
daß am Ende nichts ankommt sagt ja nichts darüber aus, wo es genau hängt.
UAC ist aus
Habe erstmal alle rechte .. bis auf ein paar kleine.

Die anderen Fragen sind schnell geklärt.
Deaktiviere ich in der EXE unter Kompatibilität Visuelle Design und Desktopgestaltung funktioniert alles so wie es soll.
Texte werden an mein Fenster (Caption) geschickt und in allen von mir erstellten Samples von C# -> VB funktioniert der Timer

Ist die Desktopgestaltung an wird kein Text (SongTitel) mehr an mein fenster geschickt und mein Timer in der DLL macht ärger
weil er kein Event mehr bekommt.

Kannst du oder jemand anderer mir sagen wie das Fenster heißt welches Transparent dargestellt wird?
Denke nur wenn ich das Handle habe funktioniert das wieder alles hier.
Warum das Fenster kein Event empfängt ist mir schleierhaft.

EDIT:
Wenn die Fenster Transparent sind und ich sie aktiviere/deaktiviere dann geht das Rendern
aber das ist kein zustand.
Die gleichen Dateien nur nach XP kopiert laufen alle ohne probleme.

gruss Emil
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: Kein Event vom Timer Win7

  Alt 20. Dez 2009, 11:49
Application (Application.Handle) hat so ein Hier im Forum suchenMessageOnlyWindow ... falls du grad sowas meintest
$2B or not $2B
  Mit Zitat antworten Zitat
jbg

Registriert seit: 12. Jun 2002
3.483 Beiträge
 
Delphi 10.1 Berlin Professional
 
#5

Re: Kein Event vom Timer Win7

  Alt 20. Dez 2009, 11:52
Ist jetzt nur eine Vermutung da ich schlecht hinter das "..." bei RenderProc schauen kann, aber rufst du in deiner RenderProc auch ordnungsgemäß DefWindowProc auf? Windows kann nämlich ziemlich seltsam reagieren, wenn der Aufruf fehlt.
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#6

Re: Kein Event vom Timer Win7

  Alt 20. Dez 2009, 11:55
Zitat von jbg:
Ist jetzt nur eine Vermutung da ich schlecht hinter das "..." bei RenderProc schauen kann, aber rufst du in deiner RenderProc auch ordnungsgemäß DefWindowProc auf? Windows kann nämlich ziemlich seltsam reagieren, wenn der Aufruf fehlt.
Danke ja..
Sagte ja schon es läuft alles Hundertprozentig unter XP oder WIN7 wenn ich die Desktopgestaltung in der EXE deaktiviere.

gruss Emil
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#7

Re: Kein Event vom Timer Win7

  Alt 20. Dez 2009, 11:58
Zitat von himitsu:
Application (Application.Handle) hat so ein Hier im Forum suchenMessageOnlyWindow ... falls du grad sowas meintest
Mir einem Window das ich selbst erstellt habe funktioniert es ja auch.
Aber die Anwendungen sind nicht NonVcl

Ich meinte eigentlich das Window welches Transparent ist ..
Keine ahnung ob dieses eine eigene Class besitzt.

gruss Emil
  Mit Zitat antworten Zitat
jbg

Registriert seit: 12. Jun 2002
3.483 Beiträge
 
Delphi 10.1 Berlin Professional
 
#8

Re: Kein Event vom Timer Win7

  Alt 20. Dez 2009, 12:04
Also ich habe jetzt mal schnell eine Testanwendung geschrieben (Win7, AeroGlass aktiv) und wenn ich einen BreakPoint auf das "Write;" lege, dann hält der Debugger dort auch an und das wegen dem Timer-Event mehrmals.

Delphi-Quellcode:
type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
    procedure RenderProc(var Msg: TMessage);
  public
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

var
  RenderHandle: THandle;
  TimerID: Integer;

procedure TimerProc(wTimerID: DWORD; Msg: DWORD;
                                     dwUser: longint;
                                     dw1: longint;
                                     dw2: longint); stdcall;
begin
  PostMessage(RenderHandle, MyTimerMessage, dw1, dw2);
end;

procedure TForm1.RenderProc(var Msg: TMessage);
begin
  if Msg.Msg = MyTimerMessage then
    Write; // << Breakpoint hier
  with Msg do
    Result := DefWindowProc(RenderHandle, Msg, WParam, LParam);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  RenderHandle := Classes.AllocateHWnd(RenderProc);
  TimerID := timeSetEvent(25, 300, @TimerProc, RenderHandle, TIME_PERIODIC);
end;
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#9

Re: Kein Event vom Timer Win7

  Alt 20. Dez 2009, 12:24
@jbg

Ja so wird es funktionieren und so habe ich es auch.. bis auf eins
Ich übergebe mein Windowhandle an eine DLL und dort wird der Timer ausgeführt.

Das ist komplett etwas anderes als wenn ich einen Timer auf meine Form lege
die feuert immer Events solange wie ich innerhalb der Form bleibe.

Trotzdem Danke !

gruss Emil
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#10

Re: Kein Event vom Timer Win7

  Alt 20. Dez 2009, 20:02
Frage aus dem Netz.

Zitat:
The first symptom we saw is that WM_GETTEXT and WM_GETTEXTLENGTH used on the buttons of the windows calculator are not retrieving the caption data as in win xp. The second symptom is that using the Spy++ tool from visual studio also doesn't get a caption from the calculator buttons.
Any ideas why this doesn't work anymore on Windows 7? Is there an alternative way to retrieve the caption in Windows 7?
Irgendwas an den Fenstern wurde geändert das ein "Application.Handle, frmMain.Handle" keine auswirkung mehr hat.

Hab noch nichts gefunden was da weiter hilft.
GEhört zum selben Thema um überhaupt mal feststellen zu können ob das Fenster eine Message erhält!


Zitat:
Es gibt es weitere typische Dinge, warum ein direktes
SendMessage ggf. nicht funktionieren "kann" ist:

Ab Vista / Server 2008 / Windows 7 und später gilt die: UIPI
Anwendungen auf niedrigeren Berechtigungsstufen können grundsätzlich keine
Mitteilungen an Anwendungen auf höheren Berechtigungsstufen senden, sofern
die Anwendung der höheren Berechtigungsstufe dies nicht ausdrücklich durch
Aufruf von ChangeWindowMessageFilter() erlaubt. Gleichermaßen können
Anwendungen mit niedrigeren Berechtigungsstufen ein HWND einer Anwendung mit
einer höheren Berechtigungsstufe zwar lesen, aber nicht modifizieren. Aus
Kompatibilitätsgründen geben SendMessage und andere APIs eine Erfolgsmeldung
zurück, auch wenn die API aufgrund von Berechtigungsproblemen blockiert
wurde. Wenn die Kompatibilitätsauswirkung hoch und das Sicherheitsrisiko
gering ist, dürfen auch Anwendungen mit niedriger Berechtigungsstufe in
einigen Fällen unaufgefordert Meldungen an Anwendungen mit höheren
Berechtigungsstufen senden.
Wenn meine Anwendung ein WM_GETTEXT sendet warm wird es dann nicht aufgelöst.

gruss Emil
  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 10:25 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