HWND (Void und int)
-
Hallo, ich weiss nicht genau ob das das richtige Unterforum ist, aber ich schildere jetzt erst mal das Problem:
Ich erhalte durch Find Window ein Handle.
so in etwa : HWND handle = Find Window....
jetzt will ich das Fenster schließen
etwas so : FileClose(handle) <----- doch ach, das mag er ned
ich bekomme die Fehlermeldung das ein int erwartet wurde, und statt dessen ein void übergeben wurde.
Wie wandel ich ein HWND (void?) in ein HWND (int) um?
Ich hoffe die Problematik wurde deutlich gemacht.
Vielleicht kann mir jemand helfen.
-
Hi,
du darfst die Handles nicht verwechseln.
Du versuchst mit dem Fenster-Handle eine Datei zu schließen, kann nicht gehen.
Datei-Handle:
FILE *file; file = fopen("test.txt","w"); // file ist das Handle // irgendwas fclose(file);
Fenster-Handle:
HWND hWnd = FindWindow( NULL, "Meine Applikation" );
Edit: fopen analog dazu
int FileHandle = FileOpen(OpenDialog1->FileName, fmOpenRead); FileClose(FileHandle);
mfg
kpeter
-
Sobald es sich um Windows Handles handelt benutze ich keine VCL Funktionen mehr, sondern die der Win32 API. Die VCL Funktionen sind meistens nur Wrapper, die auch noch weniger flexibel sind als die original Win32 API Funktionen.
Um ein fremdes Fenster zu schliessen kannst du folgendes machen:HWND hWindow = FindWindow( NULL, "Name" ); if( NULL != hWindow ) { // WM_CLOSE schliesst das Fenster SendMessage( hWindow, WM_CLOSE, 0, 0 ); }
FileClose ist im übrigen auch wieder nichts anderes als ein CloseHandle() Aufruf, wobei CloseHandle auch nur für Handles aufrufen sollte, die man etwender selbst erzeugt hat, oder wo die MSDN eindeutig verlangt, dass sie explitit geschlossen werden müssen (zB wenn eine Win32 Funktion eine Strukur füllt, dessen member ein Handle enthält).
Fenster gehören nicht zu diese Kategorie und daher sollte man CloseHandle nicht für HWND aufrufen. Ehrlicherweise habe ich keine Ahnung, was dann passiert, bin nocht nicht auf die Idee gekommen, das auszuprobieren.
-
vielen dank für die Hilfen, es hat geholfen.
bis zum nächsten mal^^
cu