Freitag, 4. Juli 2008

entwickler.com Magazine Konferenzen Akademie Entwickler-Forum Jobbörse Bücher
Software & Support Verlag

Tarife der Anbieter vergleichen
Ihr Stromverbrauch steigt stetig? Mit dem cleveren Stromvergleich sparen Sie bares Geld. Auch Gastarife (Erdgastarife), DSL-Flatrates, Versicherungen und Kredite (sogar Kredite ohne Schufa-Auskunft) lassen sich kinderleicht vergleichen.
Selbstverständlich können Sie auch die Preise für z.B. günstige Neuwagen oder billige Gebrauchtwagen, hochwertige Immobilien, fähige Handwerker und andere Finanzprodukte vergleichen.
Windows-Taschenrechner "ausborgen"

Frage: Ich möchte eine Berechnung über den Windows-Taschenrechner vornehmen und muss dazu diesem die Werte übergeben und am Ende auch das Rechenergebnis auslesen. Wie kann ich aus meiner Delphi-Anwendung heraus den Taschenrechner fernsteuern?

Antwort: Das Windows-Zubehör Taschenrechner (calc.exe) stellt kein COM-Interface für die Automation zur Verfügung, so dass der konventielle Weg über die Windows-Botschaften genutzt werden muss. Das folgende Beispiel demonstriert, wie man den Taschenrechner von Windows für eigene Berechnungen nutzt und das Ergebnis im eigenen Delphi-Programm anzeigt. Die beiden Funktionen AppActivate und SendKeys stammen aus der Unit SNDKEY32.pas, die Borland im Extras-Unterverzeichnis der Delphi-CDROM mit ausliefert. Die Sleep-Aufrufe sollen nur den Ablauf im Taschenrechner visuell nachverfolgbar machen. Der zu suchende Fensterklassen-Name des Eingabefeldes des Taschenrecherns wurde über WinSight32 nachgeschlagen (siehe Abbildung):

uses ShellAPI, SNDKEY32;

procedure TForm1.Button1Click(Sender: TObject); var hCalcWnd : HWND; hEditWnd : HWND; iBuffLen : Integer; pBuffer : PChar; begin hCalcWnd := FindWindow(nil, 'Rechner'); AppActivate('Rechner'); SendKeys('1{+}', True); Sleep(500); SendKeys('2', True); Sleep(500); SendKeys('~', True); hEditWnd := FindWindowEx(hCalcWnd, 0, PChar('Edit'), nil); if hEditWnd <> 0 then begin iBuffLen := SendMessage(hEditWnd, WM_GETTEXTLENGTH, 0, 0); if iBuffLen > 0 then begin Inc(iBuffLen); GetMem(pBuffer, iBuffLen); try SendMessage(hEditWnd, WM_GETTEXT, iBuffLen, LPARAM(pBuffer)); StatusBar1.SimpleText := pBuffer; finally FreeMem(pBuffer); end end end; end;






Software & Support Verlag GmbH