PDA

Vollständige Version anzeigen : EICTools - Entwickler-DLL


Sascha Trowitzsch
20.12.2003, 09:47
<table width="95%" border="0" cellpadding="4" cellspacing="1" class="tabletext"> <tr> <td width="13%" valign=top class="tablehead2"> <p class="tabletext">Name des Produkts:</p></td> <td width="30%" valign=middle class="tablehead3"> <h3 class="tabletext"><strong>EICTools</strong></h3></td> </tr> <tr> <td valign=top class="tabletext2">Art des Produkts:<br> (Anwendung, AddIn, Tool o.&auml;.)</td> <td valign=middle class="tabletext3">Tool</td> </tr> <tr> <td valign=top class="tabletext2">Freie Software oder Betatest f&uuml;r zuk&uuml;nftige Vermarktung?</td> <td valign=middle class="tabletext3">Zeitlimitierte Beta (?)</td> </tr> <tr> <td valign=top class="tabletext2">Programmautor:</td> <td valign=middle class="tabletext3"><a href="http://www.ms-office-forum.net/forum/member.php?s=&action=getinfo&userid=15745">Stefan Kulpa</a>&nbsp;&nbsp;&nbsp; <a href="mailto:stefan@ms-office-forum.net"> mail: stefan@ms-office-forum.net</a></td> </tr> <tr> <td valign=top class="tabletext2">Aktueller Versionsstand:</td> <td valign=middle class="tabletext3">1.0 &szlig;</td> </tr> <tr> <td valign=top class="tabletext2">Downloadgr&ouml;&szlig;e:</td> <td valign=middle class="tabletext3">751 KB</td> </tr> <tr> <td valign=top class="tabletext2">Vorgesehen(e) Betriebssystem(e):</td> <td valign=middle class="tabletext3">Windows 9x/Me, NT, 2000, XP</td> </tr> <tr> <td valign=top class="tabletext2">Vorgesehene Office-Version(en):</td> <td valign=middle class="tabletext3">Office 8.0+ (z.B. Access 97 oder h&ouml;her)</td> </tr> <tr> <td valign=top class="tabletext2">Andere Systemvoraussetzungen:</td> <td valign=middle class="tabletext3">Bei Tests unter VB oder anderen 32-Bit Windows Entwicklungssystemen ist die entsprechende Entwicklungsumgebung notwendig</td> </tr> <tr> <td valign=top class="tabletext2">Installationshinweise:<br> (Art des Setups etc.)</td> <td valign=middle class="tabletext3">Das Download-File besteht aus 3 Dateien:<br> <strong>EICTools.dll</strong>...<br> Die eigentliche Tool-Datei muss entweder in das Systemverzeichnis oder in das Applikationsverzeichnis kopiert werden.<br> Wird die Datei in das Applikationsverzeichnis kopiert, so muss durch die Applikation sichergestellt werden, dass beim Aufruf einer Funktion auch in das Applikationsverzeichnis gewechselt wird (Bsp.: ChDir-Funktion) - ansonsten wird die DLL nicht gefunden.<br> <strong>EICTools.chm...</strong><br> Kompilierte HTML-Hilfe f&uuml;r das Tools, mit den Erl&auml;uterungen zu allen Funktionen und deren Anwendung, sowie Beispielen.<br> <strong>EICTools.bas</strong>...<br> Basic-Modul mit allen notwendigen Deklarationen und einigen Hilfsfunktionen.<br> Unter VB/VBA kann die Datei direkt bzw. deren Inhalt 1:1 &uuml;bernommen werden; in anderen Entwicklungsumgebungen m&uuml;ssen entsprechende Anpassungen durchgef&uuml;hrt werden (z.B. Delphi).</td> </tr> <tr> <td valign=top class="tabletext2">Zielgruppe:</td> <td valign=middle class="tabletext3">32-Bit Windows Anwendungsprogrammierer</td> </tr> <tr> <td valign=top class="tabletext2">Enth&auml;lt das Produkt den Quellcode?</td> <td valign=middle class="tabletext3">Nein</td> </tr> <tr> <td valign=top class="tabletext2">Mit welchem Entwicklungswerkzeug wurde es genau erstellt?<br> (Mit Versionsangabe)</td> <td valign=middle class="tabletext3"><a href="http://www.purebasic.de">PureBasic 3.81</a></td> </tr> <tr> <td valign=top class="tabletext2">Webseite:</td> <td valign=middle class="tabletext3">-</td> </tr> <tr> <td valign=top class="tabletext2">Download unter:</td> <td valign=middle class="tabletext3"><a href="http://www.kulpa-online.de/testversion.zip">http://www.kulpa-online.de/testversion.zip</a></td> </tr> <tr> <td valign=top class="tabletext2">Bisher getestete Konfigurationen:</td> <td valign=middle class="tabletext3">Visual Basic 6.0 (SP5) unter Windows XP (SP1) auf P4 2.66 GHz, 512 MB RAM</td> </tr> <tr> <td valign=top class="tabletext2">Kurzbeschreibung:</td> <td valign=middle class="tabletext3">Es handelt sich um eine API-Bibliothek mit zur Zeit 115 Funktionen aus vielen Bereichen der Programmierung (s. Hilfedatei) f&uuml;r die t&auml;gliche Programmierarbeit! Die EICTools bestehen aus einer einzelnen DLL-Datei (dynamic link library) und ben&ouml;tigen keine weiteren Laufzeitdateien - es handelt sich also nicht um eine ActiveX-DLL, wie man sie beispielsweise mit Visual Basic erstellen kann.<br> Achtung: das Tool ist z.T. recht hardwarenah programmiert (einige Funktionen rufen direkte Assembler-Befehle auf); Probleme sind allerdings bisher nicht aufgetreten.</td> </tr> <tr> <td valign=top class="tabletext2">Testziel: <br> In welcher Hinsicht und unter welchen Bedingungen soll das Produkt getestet werden?</td> <td valign=middle class="tabletext3"><p><strong>Funktionsf&auml;higkeit der Routinen</strong> in unterschiedlichen Kombinationen aus Entwicklungsumgebung (zielf&uuml;hrend VB/A) und 32-Bit Betriebssystemen.<br> <strong>Bewertung einzelner Funktionen</strong> hinsichtlich Realisierung (z.B. Parameter, R&uuml;ckgabe, grunds&auml;tzliche Funktionsbewertung).<br> <strong>Bewertung des Umfangs</strong> (was fehlt, was kann ggf. wegfallen).</p> <p> Ziel des Entwicklers ist es, eine funktionsf&auml;hige Tool-DLL zu erstellen, die ein breites Spektrum an Anforderungen erf&uuml;llt und einen hohen Stabilit&auml;tsgrad besitzt.</p></td> </tr> </table>

Sascha Trowitzsch
21.12.2003, 18:07
Dann mach ich mal den Anfang mit einigen Anmerkungen...

- Ich denke, als Zielgruppe sind vor allem VB/A/Script-Programmierer zu erwarten. (Delphi- und C-Programmierer haben die meisten der Funktionen bereits im Entwicklungssystem.) Das hast du ja allerdings auch schon angedeutet.
Da wäre es natürlich schön, wenn es ein begleitendes Demo-Projekt gäbe.
Ansonsten muss man sich ja selbst eines erstellen, was angesichts der Fülle an Funktionen doch ganz schön umfangreich werden könnte.

- Eine alternative Möglichkeit zum Deklarationsmodul könnte eine Klasse sein. (Da die meisten Funktionen bereits in Properties verpackt sind, war das das erste, was ich für das Demoprojekt gemacht habe: Modul in Klasse umwandeln, weil dann einfacher auf die Properties zugegriffen werden kann. Die API-Deklarationen und Konstanten hab ich in einem Modul gelassen.)

- Es wäre weiterhin schön, wenn im Modul auch die restlichen Konstanten, die auch in der Hilfe angegeben sind, deklariert würden. (Registry-Konstanten etc.)

- Die Hilfedatei enthält im Index noch nicht alle Funktionen.

- Funktion GetShortcutTarget: Bei Links, die durch den WInstaller erzeugt wurden, erfolgt eine quasi sinnlose Rückgabe. Das könnte evtl. in der Hilfe erwähnt werden.

Ansonsten: :10points: Prima! Das Teil ist professionell gemacht. Das gilt auch für die Hilfe.
Ich konnte keine Fehler in den Funktionen entdecken.
(W2000 SP4, IE6SP1, 256MB, 100er-Ethernet; Test auf W98 folgt.)

Einige der Funktionen würde ich evtl. rauslassen. Das sind die, die man mit fast einer Zeile Win32-API ebenfalls erhalten kann. (Weißt wohl selber, welche das sind.)
Super sind dagegen jene, die normalerweise ein ganzes Modul brauchen wie die Systemdialoge, die Listenfunktionen (Drucker), die Systemfunktionen, Registry, ...

Soweit für's erste nach einem 3/4-Stundentest.

Gruß, Sascha

PS: Ist nun eine Zeitbegrenzung eingebaut oder nicht? (Sorry, dass ich meinen Disassembler angeworfen habe: Es ist wohl schon was drin, aber nicht aktiv?)

Stefan Kulpa
22.12.2003, 05:58
Da wäre es natürlich schön, wenn es ein begleitendes Demo-Projekt gäbe.
Das hatte ich spätestens für die Release-Version vor, dabei stellt sich natürlich die Frage, für was resp. welche Versionen (mindestens Access 97/2000, VB6).

Eine alternative Möglichkeit zum Deklarationsmodul könnte eine Klasse sein ...
Stimmt, nur muss man dann für alle Funktionen "Wrapper" basteln, da man nicht mehr direkt an die Funktionen kommt; manche können ja direkt aufgerufen werden und geben nur 0/1 etc. zurück.
Allerdings könnte man so die Rückgabe von numerischen Werten "typsicher" als Boolean gestalten.

Es wäre weiterhin schön, wenn im Modul auch die restlichen Konstanten, die auch in der Hilfe angegeben sind, deklariert würden.
Hab' ich das vergessen? Ups... :eek:

Die Hilfedatei enthält im Index noch nicht alle Funktionen.
Was fehlt? Das ist meine erste HTML-Hilfe und ich war froh, dass überhaupt was dabei rumgekommen ist. ;)

Funktion GetShortcutTarget: Bei Links, die durch den WInstaller erzeugt wurden, erfolgt eine quasi sinnlose Rückgabe.
Sind das die Pfade mit den Variablen (%SYSTEM32& etc.)? Die könnte man ja versuchen aufzulösen (Windows kann das ja auch...) :cool:

PS: Ist nun eine Zeitbegrenzung eingebaut oder nicht? (Sorry, dass ich meinen Disassembler angeworfen habe: Es ist wohl schon was drin, aber nicht aktiv?)
Eigentlich schon - Stichtag: 01.04.2004 :D

Vielen Dank für die ersten Tests ...

Sascha Trowitzsch
22.12.2003, 10:04
Wg. GetShortcutTarget, Bsp.:
sEIC_GetShortcutTarget("C:\Dokumente und Einstellungen\Administrator\Desktop\HACTronic.lnk")
ergibt:
C:\Dokumente und Einstellungen\Administrator\Anwendungsdaten\Microsoft\ _
_Installer\{F4193443-7652-4656-A1F9-92F7AA6B98DA}\_9B67EBCFB2A6_40BC_8F21_1FEBC471C1B7.exe

Das sind die Links, die bei Installation per WindowsInstaller entstehen und die in den Eigenschaften unter "Ziel" eine disabled Editbox haben.
(Ich weiß ehrlich gesagt auch nicht, wie das funktioniert. Ich glaube diese Exes werden vor die eigentliche Anwendung geschaltet, um Änderungen an der Installation überprüfen zu könnnen und gegebenenfalls den Installer aufzurufen: "Dies Anwendung muss repariert werden, blabla...")

Wg. Hilfeindex: Bei mir sind da genau 63 Funktionen von den 115 zu sehen.

Wg. Demoprojekt: Da würde ich eines für VB5/6 machen und eines für Word97+. (Word hat fast jeder, Access nicht.)

Ciao, Sascha

Stefan Kulpa
02.01.2004, 13:43
Also, hier schon mal ein Word 97 Beispiel - quasi als "Starthilfe" :D

Voraussetzung:
Die DLL befindet sich lokal auf der Platte (am besten im System-Ordner) und es ist (natürlich :cool: ) Word >= 97 installiert. Bei höheren Version kann es sein, dass man erst die Makros aktivieren muss.

Das Beispiel enthält nicht alle - aber einen Großteil - der Funktionen ...

Ein VB6-Beispielprojekt ist in Arbeit.

Gruß,

[MK] - Dateianhang entfernt - siehe AKTUALISIERUNG

Stefan Kulpa
04.01.2004, 12:10
... also hier noch ein VB6 Beispielprojekt. Auch hier enthält das Projekt nicht alle - aber einen Großteil - der Funktionen.

Voraussetzung:
Die DLL befindet sich lokal auf der Platte (am besten im System-Ordner) und es ist VB6 installiert; ob das SP5 erforderlich ist, weiss ich nicht. Das Projekt benötigt keinerlei Verweise auf irgendwelche ActiveX-Bibliotheken und/oder -Controls.

So, jetzt würde ich mich über ein wenig Feedback freuen :D

vg

[MK] - Dateianhang entfernt - siehe AKTUALISIERUNG

Sascha Trowitzsch
04.01.2004, 18:27
Ich schon wieder...
(Hoffentlich wird das hier nicht nur ein Zwiegespräch. :( )

Die DLL funktioniert tadellos mit beiden Projekten.
Es haben sich aber kleine Fehler eingeschlichen:

Im VB-Projekt findet er beim Laden erst nicht die EICTOOLS.bas. Musste erst manuell eingebunden werden. (Als Pfad ist in der vbp-Datei angegeben:
Module=modEICTools; ..\..\..\PUREBA~1\KITATH~1\TESTVE~1\EICTools.bas )

Im Word-Projekt fehlt ein Punkt in

Private Sub cmdScreenshot_Click()
Dim sTmp As String
Dim sPic As String

sPic = Trim$(cTools.TempFile())
sPic = Left(sPic, Len(sPic) - 3) & "jpg"
'Richtig: sPic = Left(sPic, Len(sPic) - 3) & ".jpg"
If cTools.MakeWinScreenshot(GetDesktopWindow(), sPic) Then
Debug.Print sPic
Set imgScreenshot.Picture = LoadPicture(sPic)
End If
End Sub
(Deshalb ging der Screenshot nicht.)

Im Word-Projekt kommt es zu einem auch für mich unerklärlichen Phänomen:
Wenn einer der Export-Buttons im Register "Diverses" aufgerufen wird, so wird das Ergebnis zwar in Excel oder Notepad angezeigt, danach ist aber Word blockiert und muss abgeschossen werden. Es ist egal, ob Excel/Notepad davor geschlossen werden oder nicht. Das UserForm hat dabei den Fokus verloren und man kann ihn auch nicht mehr drauf setzen.
Hab das UserForm auch auf nichtmodal gestellt - ändert nichts.
Hab auch noch ein paar andere Geschichten ausprobiert, es blieb aber dabei. Vielleicht tritt das nur unter meiner Konfiguration auf? (O2000 SP3, neueste MSForms-DLLs)

Gruß, Sascha

PS: Test mit VB-EXE und Word-Doc unter W98II, PII300, 64MB, O97SP2 ebenfalls fehlerlos. Hier tritt das Verhalten mit blockiertem UserForm nicht auf!

Stefan Kulpa
05.01.2004, 05:55
Hallo Sascha!

Vielen Dank für dein Feedback.
Ich hab' die Projektdatei (.vbp) korrigiert und das gesamte ZIP-Archiv hier noch mal angehangen (die alte Version kann ich nicht ersetzen). Komisch, dass VB manchmal solche Pfad in die Projektdatei einfügt, obwohl sich alles von Anfang an im gleichen Ordner befindet...

Die Funktion cTools.TempFile() gibt einen kompletten Pfad zu einer Temp-Datei zurück.
Mit der Anweisung sPic = Left(sPic, Len(sPic) - 3) & "jpg" werden lediglich die letzten drei Buchstaben "tmp" gegen "jpg" ausgetauscht.
Wenn du die letzten drei Buchstaben mit ".jpg" austauscht, hast du 2 Punkte vor der Dateiendung ...

Der Screenshot geht bei mir (Word97/Windows2000 bzw. Word XP/Windows XP) ohne Anpassungen.
Kurz nach dem Laden des Bildes in das Image "hängt" Word97 einen kurzen Moment, dann geht's aber wieder.
Das liegt aber eher an Word - die DLL ist dann ja schon "fertig" ... in VB gibt's das Problem ja nicht.

Das mit dem "Hänger" bei den Export-Geschichten kann ich mir auch nicht erklären - vielleicht liegt's wirklich an der Konstellation (O2000 SP3, neueste MSForms-DLLs).

Viele Grüße,

[MK] - Dateianhang entfernt - siehe AKTUALISIERUNG

Stefan Kulpa
07.01.2004, 11:03
So, jetzt gibt's auch ein Access 97 Testprojekt für die EICTools, da das Access-Forum das am meisten besuchte Forum ist.

Gruß,

[MK] - Dateianhang entfernt - siehe AKTUALISIERUNG

J_Eilers
08.01.2004, 13:05
Hi Stefan,

bin leider erst nach deinem Eintrag im Access-Forum hierüber gestolpert. Fand es dann aber so interessant, dass ich mir gleich mal die Datei gezogen habe und am Rumspielen war.

Also mein System Win2K SP 4; A2K SR-1, habe versucht die DB in 2K umzuwandeln, erhalte dann aber die Fehlermeldung, dass die DLL nicht gefunden wurde. Habe es dann in der 97er Version getestet.

Folgendes viel mir auf:

NT/Startdiskette bringt mich zu dem Softwarefenster und ich kann den Standardbrowser uä einstellen, aber keine Startdiskette erstellen.

In der Ordnerauswahl erhalte ich eine Fehlermeldung:

Fehler 2465 Feld "|" kann nicht gefunden werden.

Bei dem Papierkorb, dem Arbeitsplatz, dem IE und dem Netzwerk bekomme ich eine MsgBox, die leider nur eine Sprechblase mit einem i enthält.

Das Screencapturing hakt bei mir auch etwas (ca. 5-10sek).

Ich geb gerne zu, dass ich keine Ahnung hab, was du da gemacht hast, geschweige wie, aber es sieht sehr professionell aus! :top: Hoffe meine unfachlichen Beschreibungen helfen dir ein wenig...

Mike
08.01.2004, 15:00
Hallo Stefan,

ich habe auch ein wenig getestet:

Das ganze macht einen sehr professionellen Eindruck.

Hier noch ein paar kleine Schönheitsfehler:

Beim Starten von 'EICTools.mdb': Fehler 3315, Feld 'tblTmpAutorun.KeyValue' hat Stringlänge 0

Beim Öffnen der Ordnerauswahl: ... kann das angesprochene Feld 'CurDir$' nicht finden. In SetupAutorunList beim Update

Bei Diverses: 'Autorun-Einträge in der Registry' alle erscheinen als #gelöscht (kann mit F9 aktualisiert werden)

Mike

Stefan Kulpa
08.01.2004, 15:40
Na, das wird ja ... :D

Zunächst vielen Dank für die Tests.

@Jan
Den Fehler bei der Konvertierung (XP) habe ich nicht. Ich werde wohl eine A2K-Version zur Verfügung stellen müssen.

NT/Startdiskette bringt mich zu dem Softwarefenster und ich kann den Standardbrowser uä einstellen, aber keine Startdiskette erstellen.
In der Auswahl steht Software NT/Startdiskette (W9x); da du unter Win2K testest, kommt halt Software und nicht Startdiskette (W9x).

Fehler 2465 Feld "|" kann nicht gefunden werden.
Die Konvertierung von A97 in A2K hat hier den Code [CurDir$] nicht korrigiert. Unter A2K und höher müssen die eckigen Klammern weg!

Bei dem Papierkorb, dem Arbeitsplatz, dem IE und dem Netzwerk bekomme ich eine MsgBox, die leider nur eine Sprechblase mit einem i enthält.
... da nicht verfügbar. Etwas unschön, eine leere Msgbox. Das werde ich anpassen.

Das Screencapturing hakt bei mir auch etwas (ca. 5-10sek).
Was soll da haken? Das von Sascha erwähnt Haken bezog sich auf die Word-Version, da dort das erstellte Image in der UserForm geladen wird und damit etwas überfordert ist. Hier wird aber lediglich die Grafikdatei erzeugt (geht blitzschnell) und dann versucht, mit einem passenden Programm anzuzeigen. Das Laden durch das zuständige Programm kann u.U. etwas dauern, aber der Screenshot selbst ist sehr schnell erstellt.

Fazit: es geht ja eigentlich um die DLL-Funktionen und die scheinen zu klappen. Das Testprojekt (hier Access) ist wohl ein bischen optimierungsbedürftig; das mag aber auch an meiner mangelnden Access-Kenntnis liegen... :D

<hr>

@Mike
Beim Starten von 'EICTools.mdb': Fehler 3315, Feld 'tblTmpAutorun.KeyValue' hat Stringlänge 0
Das liegt daran, dass ich vergessen habe bei den beiden Tabellen tblTmpApps und tblTmpAutorun die Felder auf "Leere Zeichenfolge = Ja" zu stellen. Wenn du das änderst, klappt's...

Beim Öffnen der Ordnerauswahl: ... kann das angesprochene Feld 'CurDir$' nicht finden.
s.o.
Mit was hast du denn getestet? Access-Version? Betriebssystem?

Bei Diverses: 'Autorun-Einträge in der Registry' alle erscheinen als #gelöscht (kann mit F9 aktualisiert werden)
Komisch, eigentlich steht im Code ein Requery und reproduzieren kann ich das auch nicht. Aber eigentlich geht's ja um die DLL-Funktion, um diese Einträge zu ermitteln - und das scheint ja zu klappen.

Fazit: auch hier kann ich keine Fehler in der DLL entdecken - Prima!

Nochmals vielen Dank!

Viele Grüße

Mike
08.01.2004, 16:19
Fehler 3315
tritt mit 'Leerer Zeichenfolge' nicht mehr auf.

Die Konvertierung von A97 in A2K hat hier den Code [CurDir$] nicht korrigiert. Unter A2K und höher müssen die eckigen Klammern weg!
ich arbeite mit A97 unter NT

'Autorun-Einträge in der Registry' alle erscheinen als #gelöscht
dieser Fehler tritt nun (nach Änderung auf 'Leere Zeichenfolge') nicht mehr auf

Mike

Stefan Kulpa
08.01.2004, 16:28
ich arbeite mit A97 unter NT
... und wenn du CurDir$ entsprechend änderst - also die eckigen Klammern entfernst? Dann müsste es doch klappen ...

Viele Grüße

Stefan Kulpa
08.01.2004, 16:31
Damit man sich nicht alles zusammensuchen muss, hier nun alle Links:

Basisdateien (DLL, Hilfe, BAS und CLS Datei) (http://www.kulpa-online.de/testversion.zip)

Beispielprojekt für Access 2000/XP (http://www.kulpa-online.de/A2K_EICTools.zip)

Beispielprojekt für Access 97 (http://www.kulpa-online.de/A97_EICTools.zip)

Beispielprojekt für Word 97 oder höher (http://www.kulpa-online.de/W97_EICTools.zip)

Beispielprojekt für Visual Basic 6.0 (http://www.kulpa-online.de/VB6_EICTools.zip)

Gruß,

J_Eilers
08.01.2004, 16:43
@Stefan Wie gesagt, ich habe keine Ahnung, was du dort wie machst. Der Fehler mit der .DLL kam, weil ich sie erst falsch eingebunden habe. Hier zu hause läuft alles ebenfalls 1a :winner:

BS: WXP SP 1 AXP

Edit habe die Datei in 97, 2K und XP getestet. Unter AXP nirgendwo Probleme, wenn man die [] entfernt hat.

Sascha Trowitzsch
09.01.2004, 19:20
Fazit: auch hier kann ich keine Fehler in der DLL entdecken - Prima!

Ich komme noch mal auf meine obige (vermeintliche) Korrektur des Word-Demos zurück:
sPic = Left(sPic, Len(sPic) - 3) & "jpg"
'Richtig: sPic = Left(sPic, Len(sPic) - 3) & ".jpg"
Das hatte ich mir ja nicht so einfach ausgedacht...
Bei neuem Test mit dem aktuellen DOC funktionierte der Screenshot wieder nicht. Ich hab dann ins Property Get TempFile der Klasse cEICTools ein Debug.Print eingebaut:

Public Property Get TempFile() As String
'//
'//... ============================================================================
TempFile = GetMemString(EIC_TempFile())
Debug.Print TempFile
End Property

Und dann das Userform mit dem Screenshot-Button bedient. Beim 13 Versuch kam der Screenshot ;) Das ist das Ergebnis des Direktfensters:
C:\DOKUME~1\ADMINI~1\LOKALE~1\Tem
C:\DOKUME~1\ADMINI~1\LOKALE~1\Temp
C:\DOKUME~1\ADMINI~1\LOKALE~1\Temp\
C:\DOKUME~1\ADMINI~1\LOKALE~1\Temp\~
C:\DOKUME~1\ADMINI~1\LOKALE~1\Temp\~E
C:\DOKUME~1\ADMINI~1\LOKALE~1\Temp\~EI
C:\DOKUME~1\ADMINI~1\LOKALE~1\Temp\~EI2
C:\DOKUME~1\ADMINI~1\LOKALE~1\Temp\~EI28
C:\DOKUME~1\ADMINI~1\LOKALE~1\Temp\~EI29.
C:\DOKUME~1\ADMINI~1\LOKALE~1\Temp\~EI2A.t
C:\DOKUME~1\ADMINI~1\LOKALE~1\Temp\~EI2B.tm
C:\DOKUME~1\ADMINI~1\LOKALE~1\Temp\~EI2C.tmp
C:\DOKUME~1\ADMINI~1\LOKALE~1\Temp\~EI2C.jpg

Lustig, nicht?
Entweder stimmt jetzt die API-Funktion nicht oder an GetMemString ist was faul.
Komischerweise tritt das in den anderen Demos nicht auf? :confused:

(Langsam frage ich mich, ob mein ganzes System im Eimer ist, soviele seltsame Effekte wie ich in den letzten Wochen hatte. Aber die DLL sollte doch auch mit einem solchen System zurechtkommen, oder? :D )

Gruß, Sascha

Stefan Kulpa
09.01.2004, 19:42
Dieses Phänomen habe ich auch gehabt - aber nur bei der Word-Variante.
Die GetMemString() Funktion kann es eigentlich nicht sein, denn die wird ja andauernd benutzt - seltsam.

Irgendwie scheint VBA unter Word hier bei der Speichernutzung "einzuschreiten" - wie, ist mir jedoch absolut schleierhaft ...

die DLL sollte doch auch mit einem solchen System zurechtkommen, oder?
Klar, auf jedem "Runkelsystem" :D :D :D

Gruß,

TommyK
09.01.2004, 21:49
Hallo Stefan,

erstmal, möchte ich Dir sagen, Hut ab, die DLL ist prima. :top:

Mir sind aber einige Sachen beim ersten Test aufgefallen.

Ich habe unter Win XP Home SP1a getestet mit A97, A00, AXP und WordXP

Screenshot unter A97 geht bei mir nicht. Es kommt kurz die Sanduhr, das wars.

Bei der Dateiauswahl unter AXP hängt sich AXP nach der Auswahl einer Datei auf. Kann nur über Taskmanager abgeschossen werden.

Unter WordXP, ruft man im Register "Diveres" die jeweiligen Ausgaben und schließt die txt- Dateien wieder, ist Word blockiert und auch hier geht es dann nur noch mittels Taskmanager.

Sascha Trowitzsch
09.01.2004, 22:51
Das mit dem blockierten UserForm in Word hat mir keine Ruhe gelassen.

Wenn du aus den Button-Prozeduren in "Diverses" das
Me.Enabled = False
...
Me.Enabled = True

rauslässt, so tritt der Effekt nicht mehr auf.
Wenn man es drin lässt und die Prozedur durchlaufen lässt, dann in den VBA-Editor geht (...er muss vorher schon offen sein, weil ja jetzt bereits alles blockiert ist), auf den Unterbrechen-Button geht und im Direktfenster
? frmDemo.Enabled
abfragt, so erhält man "Wahr". Trotzdem stimmt das nicht.
Gibt man nämlich jetzt im Direktfenster ein
frmDemo.Enabled = True
und setzt den Code fort, so ist die Blockade weg! Sonst nicht.

Das scheint eine Macke der aktuellen MSForms zu sein, die Tommy wohl auch im System hat.
Es tritt genauso in Excel2000 auf, wenn man das Form Disabled/Enabled.
So. Und damit funktioniert es problemlos:

Me.Enabled = False
...
Me.Enabled = True
Me.Enabled = True

:confused: :D

Ciao, Sascha

Stefan Kulpa
10.01.2004, 06:02
ja, ja diese Nachteulen - ich sag's ja *grimel*
@TommyK
Zunächst besten Dank für's Testen.
Screenshot unter A97 geht bei mir nicht.
Das ist diese TempFile()-Geschichte, die Sascha erwähnte - keine Ahnung, ich muss mir das noch mal genau anschaun.

Bei der Dateiauswahl unter AXP hängt sich AXP nach der Auswahl einer Datei auf.
Das kann ich zwar nicht reproduzieren, aber vielleicht liegt's an einem "alten Fehler" bei mir unter Access. Ich "vergesse" grundsätzlich in Access das Me! vor den Controlnamen (Gewohnheit aus VB) und ich kann mich erinnern, dass ich damit schon mal Probleme hatte.
Wenn es sich um die Registerkarte "Dateisystem" handelt, möchte ich dich bitten, den Code für den Button "Dateiauswahl" wie folgt anzupassen:

<div><link href="http://www.ms-office-forum.net/forum/externals/codeconv.css" rel="stylesheet"><pre><span class="TOKEN">Private Sub</span> cmdGetFilepath_Click()
&nbsp;
<span class="TOKEN">Dim</span> sPattern <span class="TOKEN">As</span> <span class="TOKEN">String</span>
<span class="TOKEN">Dim</span> sFilepath <span class="TOKEN">As</span> <span class="TOKEN">String</span>
&nbsp;
sPattern = &quot;Alle Dateien (*.*)|*.*&quot;
sFilepath = cTools.GetOpenFilename(&quot;&quot;, &quot;*.*&quot;, sPattern, 1)
<span class="TOKEN">If</span> cTools.FileExists(sFilepath) <span class="TOKEN">Then</span>
Me!txtFileSystem01.Value = sFilepath
Me!txtFileSystem02.Value = cTools.GetShortPath(sFilepath)
Me!txtFileSystem03.Value = cTools.GetFilePart(sFilepath)
Me!txtFileSystem04.Value = cTools.GetExtensionPart(sFilepath)
Me!txtFileSystem05.Value = cTools.GetPathPart(sFilepath)
Me!txtFileSystem06.Value = cTools.FolderSize(Me!txtFileSystem05.Value)
Me!txtFileSystem07.Value = cTools.CountFilesInFolder(Me!txtFileSystem05.Value, &quot;*.*&quot;)
Me!txtFileSystem08.Value = cTools.GetExecutable(sFilepath)
Me!txtFileSystem09.Value = cTools.GetFileVersion(Me!txtFileSystem08.Value)
Me!txtFileSystem10.Value = cTools.MD5FileHashCode(Me!txtFileSystem08.Value)
<span class="TOKEN">Else</span>
Me!txtFileSystem01.Value = vbNullString
Me!txtFileSystem02.Value = vbNullString
Me!txtFileSystem03.Value = vbNullString
Me!txtFileSystem04.Value = vbNullString
Me!txtFileSystem05.Value = vbNullString
Me!txtFileSystem06.Value = vbNullString
Me!txtFileSystem07.Value = vbNullString
Me!txtFileSystem08.Value = vbNullString
Me!txtFileSystem09.Value = vbNullString
Me!txtFileSystem10.Value = vbNullString
<span class="TOKEN">End</span> <span class="TOKEN">If</span>
&nbsp;
<span class="TOKEN">End</span> <span class="TOKEN">Sub</span></pre></div>
Code eingefügt mit dem MOF Code Converter (http://www.ms-office-forum.net/forum/codeconverter.php)

Bei der Dateiauswahl unter AXP hängt sich AXP nach der Auswahl einer Datei auf.
Das verstehe ich nun überhaupt nicht - das ist ein simpler Shell-Aufruf

Shell "Notepad.exe " & sExportFile, vbNormalFocus

Shell() hält den Programmablauf nicht auf - wieso hängt dann Access *grummel*
Vielleicht werde ich auch eine Variante des ShellExecute in die DLL einbauen...

@Sascha
Auch dir noch mal vielen Dank ;o)
Me.Enabled = True
Me.Enabled = True

Was soll man dazu sagen ... am besten nichts.


Na, dann mach' ich mich auf die Suche nach den Ursachen. Außerdem wollte ich noch ein Beispiel für die restlichen Funktionen erstellen; zumindest für die komplexeren Teile wie Archiv und Link erstellen, etc. - nicht ganz simpel.

By the way - ihr seid doch öfter im Access-Forum als ich und kennt die "Trends der Fragenden" *grimel*
Was wäre eurer Meinung nach noch notwendig, um die DLL "abzurunden", sprich: was wird immer wieder gefragt und könnte sinnvollerweise durch die Bibliothek abgedeckt werden? Das sollten allerdings Funktionen sein, die nicht nur für Access relevant sind bzw. auch "anderswo" funktionieren ...

Viele Grüße und ein schönes Wochenende

Stefan

PS: Ich hab' auch gerade festgestellt, dass bei A2K-Variante die Überschrift nicht stimmt; da steht noch "Access 97 Beispielanwendung" - das werde ich noch ändern (copy and paste-Syndrom *grins*)

Edit: der Fehler beim Screenshot ist auf eine buggige Funktion zur Tempdateierstellung zurückzuführen (komisch, dass es überhaupt funktioniert hat). Ich habe die aktuelle Version der DLL hier mal angehangen. Das Downloadfile werde ich aktualisieren, sobald ich weitere Anpassungen/Erweiterungen durchgeführt habe.

Sascha Trowitzsch
10.01.2004, 10:58
Yo, jetzt funktioniert's!

Was bei mir nicht geht ist die Funktion EIC_ForceShutdown().
Es passiert gar nichts. (Konfiguration s. oben.)

Ciao, Sascha

Stefan Kulpa
10.01.2004, 12:25
Es passiert gar nichts. (Konfiguration s. oben.)

Welche meinst du:

W2000 SP4, IE6SP1, 256MB, 100er-Ethernet
W98II, PII300, 64MB, O97SP2

aber ich denke mal die W2K-Variante, oder?
Dann mag' es an der AdjustToken() Routine in der DLL liegen - ich hab' sie mal ein wenig modifiziert und ne neue DLL angehangen ... wenn du möchtest :D

Gruß,

Sascha Trowitzsch
10.01.2004, 13:07
Ja, Konf. ist die W2k.

Die neue DLL ändert leider am ForcedShutDown nichts.

Ich glaube aber, dass diese Funktion ohnehin zu jenen gehört, die man nicht unbedingt braucht. (Geht das nicht einfach mit Win32API: ExitExecEx ?)

Ciao, Sascha

Stefan Kulpa
10.01.2004, 14:30
Was ist denn ExitExecEx für eine Funktion? Die kann ich gar nicht finden ...

In der DLL versuche ich's mit ExitWindowsEx, was bei mir sowohl unter W98 als auch unter XP funktioniert. Bei NT muss man halt zunächst "das Privileg erwerben", denn Rechner herunterzufahren, daher AdjustTokenPrivileges(...).

Gruß, Stefan

Stefan Kulpa
15.02.2004, 15:49
So, nach einer kurzen Pause geht's weiter.
Es gibt 26 neue Funktionen; insgesamt jetzt knapp 140!

Neu hinzugekommen sind:

EIC_QualifyPath
EIC_UnqualifyPath
EIC_GetDayFromGauss
EIC_IsLeapyear
EIC_CallPOP3Server
EIC_********
EIC_UrlDownloadToFile
EIC_BinToValue
EIC_CountChars
EIC_CountStrings
EIC_CountWords
EIC_DigitToString
EIC_Levenshtein
EIC_TurnString
EIC_MsgBoxEx
EIC_CPUSpeed
EIC_DesktopLocked
EIC_GetProcessList9x
EIC_GetProcessListNt
EIC_LockDesktop
EIC_RunProgram
EIC_CaesarDecrypt
EIC_CaesarEncrypt
EIC_DeCodeFile
EIC_EnCodeFile
EIC_ROT13

(... mehr oder weniger selbsterklärend :D )

Bisher hatte ich nur die Zeit, die Help-Datei entsprechend anzupassen (dort gibt's aber zu jeder Funktion Beispiele).

Wer also Lust hat ...

Die neue DLL als ZIP-File (94 KB) (http://www.kulpa-online.de/newsgroup/dll.zip)
Eine angepasste (allgemeingültige) BAS-Datei (10 KB) (http://www.kulpa-online.de/newsgroup/bas.zip)
Die aktuelle HTML-Hilfe (686 KB) (http://www.kulpa-online.de/newsgroup/htmlhilfe.zip)
Das VB6-Beispiel mit angepasster Hilfe (854 KB) (http://www.kulpa-online.de/newsgroup/vb6sample.zip)

Vielen Dank für's Testen!

Gruß

Stefan Kulpa
27.02.2004, 08:11
Hallo!

Hiermit möchte ich die Tests abschließen und die letzte Version zur Verfügung stellen, in der Hoffnung noch ein paar Tester zu finden ...

Die EICTools heißen jetzt EICLib, da es ja bereits EICTools in Form von Access.MDAs gibt - da besteht aber kein Zusammenhang.

* Die DLL besitzt jetzt über 140 Funktionen.
* Die CHM-Hilfe wurde komplett überarbeitet und um Beispiele erweitert.
* Die Testversion ist nicht mehr zeitlich limitiert, sondern bringt pro Thread eine MessageBox (nag-screen).

Wer also mag...

EICLib.dll (muss in den System32-Ordner) - 95 KB (http://www.kulpa-online.de/newsgroup/_dll.zip)
EICLib.chm (Hilfedatei muss in den Projekt bzw. den EXE-Ordner) - 833 KB (http://www.kulpa-online.de/newsgroup/_helpfile.zip)
VB6 (SP5) EXE-Datei (benötigt Hilfe und DLL, sowie VB6-Runtime-Dateien) - 34 KB (http://www.kulpa-online.de/newsgroup/_vb6projekt.zip)
VB6 (SP5) Projektdateien (benötigt Hilfe und DLL, sowie VB6-Runtime-Dateien) - 40 KB (http://www.kulpa-online.de/newsgroup/_vb6sp5exe.zip)

Schön wäre es natürlich, wenn jemand die DLL als Tool testet, also selbst in ein Projekt (VB/VBA) einfügt, die Delcares und die Funktionen nutzt.

Auf jeden Fall sollte die fertige VB6-EXE einwandfrei laufen - obwohl dort nicht alle Funktionen untergebracht sind.


Schon mal vielen Dank für's Testen ...

Viele Grüße

Großer Meister
11.03.2004, 02:43
hallo stefan,
vielen dank für diese praktische API Sammlung. Da sieht man mal wieder, was mit VB(A) alles möglich ist.
Public ctools As clsEICTools habe ich aus dem code rausgenommen. Dann lief alles wunderbar in AXP.