Winapi und Filerequester
Übersicht

mpzBetreff: Winapi und Filerequester |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo Leute,
wer hat sich von Euch schon an die WINAPI Befehle rangetraut? Ich versuche gerade den GetOpenFileName (*Openfile) Befehl zu verwenden. Wenn es funktioniert, benötigt man für einen Filerequester keine zusätzliche *.dll Datei (z.B. Winsys.dll). Leider wird der Befehl nicht ausgeführt, was natürlich (Sch... ![]() Code: [AUSKLAPPEN] ; comdlg.decls im USERLIBS Verzeichnis .lib "comdlg32.dll" api_GetOpenFileName% (pOpenfilename*) : "GetOpenFileNameA" ; kernel32.decls im USERLIBS Verzeichnis .lib "kernel32.dll" api_GetLastError% () : "GetLastError" Dann nur noch mein (nicht funktionsfähiges) Programm: Code: [AUSKLAPPEN] Type OPENFILENAME ; Structur des Buffers (pOpenfilename*) Field lStructSize% Field hwndOwner% Field hInstance% Field lpstrFilter$ Field lpstrCustomFilter$ Field nMaxCustFilter% Field nFilterIndex% Field lpstrFile$ Field nMaxFile% Field lpstrFileTitle$ Field nMaxFileTitle% Field lpstrInitialDir$ Field lpstrTitle$ Field flags% Field nFileOffset% Field nFileExtension% Field lpstrDefExt$ Field lCustData% Field lpfnHook% Field lpTemplateName$ End Type test.OPENFILENAME= New OPENFILENAME test\lStructSize = 591 test\hwndOwner = hwndHandle;Me.hWnd test\hInstance = 0;App.hInstance test\lpstrFilter$ = "All Files (*.*)" + Chr$(0) + "*.*" + Chr$(0) test\lpstrFile$= String$ (" ", 254) test\nMaxFile=254 test\lpstrFileTitle$=String$ (" ", 254) test\nMaxFileTitle=254 test\lpstrInitialDir$="C:\" test\lpstrTitle$="test" test\flags = 0 api_GetOpenFileName (test) Print api_GetLastError () While MouseHit(1) <> 1 Wend Leider erscheint nur der Fehler (über api_GetLastError ()) 87 = heisst falsche Parameter. Habe es auch schon mit: Code: [AUSKLAPPEN] theBank=CreateBank(591) lStructSize=591 PokeInt theBank,0,lStructSize hwndOwner=0 PokeInt theBank,4,hwndOwner hInstance=0 PokeInt theBank,8,hInstance lpstrFilter$ = "All Files (*.*)" + Chr$(0) + "*.*" + Chr$(0) nextOffset=copyStringToBankZT(lpstrFilter$,theBank,12) lpstrCustomFilter$= "" nextOffset=copyStringToBankZT(lpstrCustomFilter$,theBank,nextOffset) nMaxCustFilter=0 PokeInt theBank,nextOffset,nMaxCustFilter nFilterIndex=0 PokeInt theBank,nextOffset+4,nFilterIndex lpstrFile$= String$ (" ", 254) nextOffset=copyStringToBankZT(lpstrFile$,theBank,nextOffset+8) nMaxFile=255 PokeInt theBank,nextOffset,nMaxFile lpstrFileTitle$=String$ (" ", 254) nextOffset=copyStringToBankZT(lpstrFileTitle$,theBank,nextOffset+4) nMaxFileTitle=255 PokeInt theBank,nextOffset,nMaxFileTitle lpstrInitialDir$="C:\" nextOffset=copyStringToBankZT(lpstrInitialDir$,theBank,nextOffset+4) lpstrTitle$="test" nextOffset=copyStringToBankZT(lpstrTitle$,theBank,nextOffset) flags=0 PokeInt theBank,nextOffset,flags nFileOffset=0 PokeInt theBank,nextOffset+4,nFileOffset nFileExtension=0 PokeInt theBank,nextOffset+8,nFileExtension lpstrDefExt$="" nextOffset=copyStringToBankZT(lpstrDefExt$,theBank,nextOffset+12) lCustData=0 PokeInt theBank,nextOffset,lCustData lpfnHook=0 PokeInt theBank,nextOffset+4,lpfnHook lpTemplateName$="" nextOffset=copyStringToBankZT(lpTemplateName$,theBank,nextOffset+8) api_GetOpenFileName (theBank) Print api_GetLastError () While MouseHit(1) <> 1 Wend Function copyStringToBankZT(theString$, theBank, theOffset) While (Len(theString$)>0) PokeByte theBank,theOffset,Asc(Left$(theString$,1)) theOffset=theOffset+1 theString$=Right$(theString$,Len(theString$)-1) Wend PokeByte theBank,theOffset,0 Return theOffset+1 End Function versucht, aber die Rettung kommt sicherlich, wenn Ihr mir weiterhelft. Also ran an die Tips, Ihr Götter der Blitzschreibweise ![]() Michael |
||
![]() |
Vertex |
![]() Antworten mit Zitat ![]() |
---|---|---|
Finde jetzt nichtmehr mein Example, aber Du musst an den ganzen
LPTSTR's die Adresse der Banks übergeben, in denen die Strings gespeichert sind. Dazu brauchst Du meine AdressOf-Funktion: Code: [AUSKLAPPEN] Function AddressOf(Bank) Local Address = CreateBank(4) RtlMoveMemory2(Address,Bank+4,4) Return PeekInt(Address,0) End Function Zitat: .lib "Kernel32.dll" RtlMoveMemory(Destination*,Source,Length) : "RtlMoveMemory" AdressOf(Bank) liefert Dir dann die Adresse der jeweiligen Bank zurück, in dem ein String gepoket sein sollt (nutz dazu Deine copyStringToBankZT Funktion) mfg olli |
||
vertex.dreamfall.at | GitHub |
mpz |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Sorry, das habe ich nicht genau verstanden. Heißt das das in den LPTSTRs keine Strings stehen, sondern die Adressen der Strings?
Adressen, Pointer usw. bei dreht sich im Moment alles im Kreis. Hast Du ein Beispiel? Oder kannst Du diesen Code funktionsfähig machen? Danke, Michael ![]() ![]() ![]() ![]() |
||
René Meyer |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Dieser Befehl ist Dir bekannt? :)
http://www.blitzbase.de/befehlegui/requestfile.htm |
||
www.blitzbasic.de | Das Buch zu Blitz Basic: www.schreibfabrik.de/txt/bbb |
mpz |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ja, aber leider habe ich mit Blitz Basic angefangen (nicht BlitzPlus!) und dann auf Blitz 3D erweitert. BlitzBasic 3D hat diesen Befehl nicht. Die Erweiterungen wie Filerequester könnte ich mit Purebasic als *.DLL schreiben oder die Blitzsys.dll benutzen, aber das MUSS dich einfacher gehen! Da meine Applikation aber mit Bitz 3D geschrieben wird, möchte ich nicht ein zusätzliche DLL Datei verwenden (Störisch, aber warum nicht?) Die WINAPI Befehle laden doch dazu ein Sie zu benutzen! Ich brauch nur noch den Anstoss einer Brechstange. 8) Und schon kann man wunderbare API Befehle benutzen...
Gruß Michael |
||
mpz |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Lösung habe ich gefunden und als Code reingestellt. Danke für die Tips
Michael |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group