shell32.dll - api_DragQueryFile
Übersicht

![]() |
hecticSieger des IS Talentwettbewerb 2006Betreff: shell32.dll - api_DragQueryFile |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich komm nicht klar mit folgendem Code (eine Konvertierung aus verschiedenen Programmiersprachen):
Code: [AUSKLAPPEN] ;.lib "shell32.dll"
; ;api_DragAcceptFiles (hwnd%, fAccept%) : "DragAcceptFiles" ;api_DragFinish (hDrop%) : "DragFinish" ;api_DragQueryFile% (HDROP%, UINT%, lpStr$, ch%) : "DragQueryFileA" ;api_DragQueryPoint% (HDROP%, lpPoint*) : "DragQueryPoint" Graphics 400,300,0,2 SetBuffer FrontBuffer() Local HWND = api_GetActiveWindow() api_DragAcceptFiles(HWND, True) Print "Fensterhandle "+HWND Local Anzahl Local x = 40, y = 40 Local Bank=CreateBank(1024) Local Inhalt$ = "" While Not KeyHit(1) ;Anzahl der Dragdateien erfragen Anzahl = api_DragQueryFile(Bank, $FFFFFFFF, Inhalt$, 261) ;api_DragQueryFile% (HDROP%, UINT%, lpStr$, ch%) : "DragQueryFileA" ;1.Parameter: Handle auf einen Speicherbereich, der die ‘Dropped Files’ enthält. Dieses Handle Lässt sich über das Abfangen der Message WM_DROPFILES (563) herausfinden. ;2.Parameter: Der bei 0 beginnende Index (die Ordnungsnummer) des auszulesenden Files oder $FFFFFFFF, um die Anzahl der aufgenommenen Files zu erfahren. ;3.Parameter: Mindestens 261 Bytes grosse Bereichsvariable, die das ausgelesene File aufnimmt. ;4.Parameter: Die Grösse der Bereichsvariablen aus Parameter 3 in Bytes. Text x, y, Anzahl y = y + 14 If y > 240 x = x + 20 y = 40 End If Delay 250 Wend api_DragFinish(HWND) api_DragAcceptFiles(HWND, False) End Ich will mithilfe der API ein Drag&Drop realisieren, doch irgendwie will es nicht so wie ich. Ich habe mir dazu schon mehrere Beispiele im Internet (Delphi, Visual Basic und C) angeschaut, doch ich bekomme kein Rückgabewert für die Anzahl der DragFiles etc. Ich bin allerdings auch nicht gerade erfahren was API ansprechen angeht. Userlibs -Einträge habe ich im Code mit drinne, um sofort sehen zu können was Sache ist oder auch nicht ist. Kann mir hierzu jemand ein wenig Hilfestellung geben, oder wie man das ganze interpretieren soll? Ich weiß zum Beispiel nicht was hDrop in der api_DragQueryFile% (HDROP%, UINT%, lpStr$, ch%) : "DragQueryFileA" für eine Variable sein soll etc... |
||
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D |
ChristianK |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Das kannst du nicht ohne DLL lösen, denn du musst ( wie in dem Kommentar beschrieben ) die WM_DROPFILES Nachricht auswerten, wofür wiederum Functionpointer gebraucht werden.
Ich habe dafür aber die acceptfiles.dll programmiert, die du, wenn ich mich nicht irre, in deinem Dreamplayer verwendest. Wenn du noch ein Feature brauchst oder einen Fehler gefunden hast, kann ich das gerne verbessern. |
||
AdvanceLcd
Intel Core 2 Duo 3.2 GHz, 4 GB RAM, GeForce 8800 GTX | MacBook Pro 15,4″ Intel Core 2 Duo 2.4 GHz, 2 GB RAM, GeForce 8600M GT |
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Achja, da war ja noch was,.. Funktionspointer. So ein Misst! Den ganzen Tag umsonst den Kopf mit kryptischen Programmiersprachen durchgebraten.
Und ja, es ist für den Dreamplayer. Folgendes wollte ich nach Möglichkeit vermeiden: - externe BASS.DLL für den Audiostream - externe ACCEPTFILES.DLL für Drag&Drop - externe BLITZSYS.DLL für Fileopen -Dialoge Das alles wirkt etwas frickelich, wenn du verstehst. Wo dann auch noch die Blitz3D -.exe so groß ist. - Das erste zu vermeiden kann ich natürlich gleich knicken. - Drag&Drop schien einfach, wo ich es also versucht habe, aber jetzt (ich glaub dir einfach mal) wohl doch nicht zu vermeiden ist. - Das dritte konnte ich zum Teil auch selbst per API ansprechen, aber auch hier hatte ich die gleichen Probleme wie mit der BlitzSys. Wenn ich also dein Angebot annehmen darf, so bräuchte ich eine Funktion was auch die BlitzSys im Example 21 drin hat. Nur das in diesem Example das Flag OFN_ALLOWMULTISELECT nicht ''richtig'' funktioniert. Dieses Flag soll eine Mehrfachauswahl erlauben, nur der ganze Öffnen -Dialog sieht dann wie bei Win 3.11 aus und kann keine langen Dateinamen lesen wenn Leerzeichen drin enthalten sind. Ohne diesen Flag kann man nur einzelne Dateien auswählen, was sehr nervig ist. Dieses Flag geht im übrigen nicht mit BlitzSys, als auch nicht wenn man sich das ganze selbst über die API zusammen baut. Ich habe zusätzlich noch alle 32 Bits als Parameter durchprobiert. Ohne Erfolg. Was ich also Will, ist ein Öffnendialog wo ich; - eine Mehrfachauswahl machen kann. - lange Dateinamen auch als solche sehen kann. - Dateiendung die angezeigt werden soll, selbst bestimmen kann. - die Erlaubnis habe, die DLL so umzubenennen wie ich will bzw. zu verstecken. Benötigte Librarys: .lib "kernel32.dll" api_RtlMoveMemory(Destination*,Source,Length) : "RtlMoveMemory" .lib "comdlg32.dll" api_GetOpenFileName% (pOpenfilename*) : "GetOpenFileNameA" api_GetSaveFileName% (pOpenfilename*) : "GetSaveFileNameA" Sollte dieses für dich möglich sein, so lass es mich wissen. Ich bezahle auch. Habe gestern erst die Überweisung für die BASS.DLL losgeschickt. Wenn nicht, und du die ganze Sache auch für andere zur Verfügung stellen willst, dann ist mein vierter Punkt irrelevant. |
||
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group