AGB  ·  Datenschutz  ·  Impressum  







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

Probleme mit EnumProc

Ein Thema von Amateurprofi · begonnen am 17. Apr 2013 · letzter Beitrag vom 17. Apr 2013
 
Amateurprofi

Registriert seit: 17. Nov 2005
Ort: Hamburg
1.041 Beiträge
 
Delphi XE2 Professional
 
#1

Probleme mit EnumProc

  Alt 17. Apr 2013, 17:25
Ich arbeite zu Zeit viel mit einem Wave-Editor (WavePad) und habe einen häufig wiederkehrenden Vorgang abzuarbeiten, nämlich
1) Ab aktueller Position bis Dateianfang markieren.
2) Im Bearbeiten-Menu "Markierten Bereich speichern als" wählen.
3) Im dann erscheinenden SaveDialog den Dateinamen eingeben.
4) "Speichern"-Button drücken.

Ich möchte das automatisieren.

1 und 2 habe ich bereits.

Das Handle des SaveDialogs finde ich auch.

Aber für das dann folgende macht mir die EnumProc, die ich zum suchen des Edits für den Dateinamen und des "Speichern"-Buttons verwende, Probleme.
Die EnumProc läuft einmal fehlerfrei durch und beim zweiten Durchlauf krachts:

Im Projekt Chat.exe ist eine Exception der Klasse $C0000005 mit der Meldung 'access violation at 0x005632cc: read of address 0x0c7164b0' aufgetreten.

Das Ganze ist reproduzierbar.

Hat jemand eine Idee, wo der Fehler liegt?

Delphi-Quellcode:
function SaveDlgEnumProc(win:HWND; ctrls:array of HWND): BOOL; stdcall;
var s:string; buf:array[0..255] of char;
begin
   Result:=True;
   GetClassName(win,buf,256);
   s:=buf;
   if s='Buttonthen begin
      SendMessage(win,WM_GETTEXT,256,Integer(@buf));
      s:=buf;
      if s='Speichernthen ctrls[1]:=win;
   end else if s='Editthen begin
      ctrls[0]:=win;
   end;
end;
Delphi-Quellcode:
PROCEDURE TMain.Test(win:HWND; const dsn:string);
var ctrls:Array of HWND;
begin
   SetLength(ctrls,2);
   ctrls[0]:=0; // Edit
   ctrls[1]:=0; // Speichern-Button
   EnumChildWindows(Win,@SaveDlgEnumProc,NativeInt(ctrls));
   if ctrls[0]<>0 then begin
      SendMessage(ctrls[0],WM_SETTEXT,0,Integer(PChar(dsn)));
      if Ctrls[1]<>0 then SendMessage(ctrls[1],BM_Click,0,0);
   end;
end;
Gruß, Klaus
Die Titanic wurde von Profis gebaut,
die Arche Noah von einem Amateur.
... Und dieser Beitrag vom Amateurprofi....
  Mit Zitat antworten Zitat
 


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 04:31 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