Seite 1 von 2
PB versteht bestimmte API-befehle nicht !?!
Verfasst: 24.08.2005 10:32
von Dr.Pixel
Warum versteht PureBasic bestimmte Befehle nicht?
Beispiel:
Code: Alles auswählen
hWnd.l = FindWindow_(0, "Dokument1 - Microsoft Word")
If hWnd
SetForegroundWindow(hWnd)
EndIf
Fehlermeldung:
Zeile3: SetForegroundWindow() is not a function, an array, or a linked list
Auch bei vielen anderen Befehlen aus dem Codearchiv kommt diese Fehlermeldung.
Muss ich mit "IncludeFile" noch eine api.dll oder ähnliches hinzufügen?
Danke.
Edit by Kiffi: Code-Tags gesetzt
Verfasst: 24.08.2005 10:36
von Tafkadasom2k5
Das Problem kenne ich auch...bei den Befehlen wos ned ging hab ich das dann so gemacht:
LoadLibrary(1,blabla.dll..)
CallFunction(1,"Befehl",flags)
die "1" steht hier immer für die ID der geladenen Library...
Verfasst: 24.08.2005 10:38
von DarkDragon
SetForegroundWindow(hWnd) = SetForegroundWindow_(hWnd)
[EDIT]
Ha ich war schneller

Re: PB versteht bestimmte API-befehle nicht !?!
Verfasst: 24.08.2005 10:39
von Kiffi
da fehlt der Unterstrich vor der Klammer:
[Edit]
@DD: Grrrrrrrrr!
Ich war aber schneller als Mücke

[/Edit]
Verfasst: 24.08.2005 10:41
von mueckerich
Da fehlt einfach ein Unterstrich. Schreib mal
SetForegroundWindow
_(hWnd)
dann gehts. Es handelt sich hier um einen API- Aufruf, die werden durch einen Unterstrich am ende gekennzeichnet.
Edit: Okay Kiffi war schneller

Edit:

Autsch, DD auch noch.
Verfasst: 24.08.2005 11:13
von Dr.Pixel
OK, danke. Klappt.
Aber was ist hier falsch in der Datei "ListChildWindows.pb" aus dem Codearchiv:
Zeile 18: class$ = PeekS (MemoryID())
Fehlermeldung:
Zeile18: MemoryID() is not a function, an array, or a linked list
Verfasst: 24.08.2005 11:15
von DarkDragon
MemoryID gibts nichtmehr, man muss den rückgabewert von AllocateMemory(DerzweiteParameter) speichern und anstatt MemoryID() benutzen.
Verfasst: 24.08.2005 11:24
von Kiffi
alternativ kannst Du den Klassennamen und Fenstertitel auch mit diesen
beiden Routinen ermitteln:
Auszug aus NTCs
EnumAllWindows V3:
Code: Alles auswählen
Procedure.s GetClassName(handle.l)
Class.s = Space(#BufferSize)
GetClassName_(handle, @Class, Len(Class))
ProcedureReturn Left(Class, Len(Class))
EndProcedure
Procedure.s GetTitle(handle)
Name.s = Space(#BufferSize)
GetWindowText_(handle, @Name, Len(Name))
ProcedureReturn Left(Name, Len(Name))
EndProcedure
der Aufruf erfolgt dann mit:
und
Grüße ... Kiffi
Verfasst: 24.08.2005 15:01
von Dr.Pixel
Also, ich habe das Programm nun umgeschrieben.
Trotzdem kommt folgende FM:
[ERROR] ListChildWindows.pb (Line 20): "Class.s = Space(#BufferSize)"
[ERROR] Invalid Memory access.
Was mache ich falsch?
Code: Alles auswählen
#BufferSize = 2048
Procedure.s GetClassName(handle.l)
Class.s = Space(#BufferSize)
GetClassName_(handle, @Class, Len(Class))
ProcedureReturn Left(Class, Len(Class))
EndProcedure
Procedure.s GetTitle(handle)
Name.s = Space(#BufferSize)
GetWindowText_(handle, @Name, Len(Name))
ProcedureReturn
EndProcedure
Procedure ListChildWindows (window, parameter)
GetClassName_ (window, ReAllocateMemory (0, 255), 255)
;class$ = PeekS (MemoryID ())
class$ = GetClassName(window)
GetWindowText_ (window, ReAllocateMemory (0, 255), 255)
AllocateMemory(DerzweiteParameter)
;title$ = PeekS (MemoryID ())
title$ = GetTitle(window)
FreeMemory (0)
For a = 1 To parameter
sub$ = sub$ + "--------"
Next
Debug sub$ + ">" + Chr (34) + title$ + Chr (34) + " / Class: " + class$
EnumChildWindows_ (window, @ListChildWindows (), parameter + 1)
ProcedureReturn #True
EndProcedure
; List top-level windows...
Procedure ListWindows (window, parameter)
GetClassName_ (window, ReAllocateMemory (0, 255), 255)
;class$ = PeekS (MemoryID ())
class$ = GetClassName(window)
GetWindowText_ (window, ReAllocateMemory (0, 255), 255)
;title$ = PeekS (MemoryID ())
title$ = GetTitle(window)
FreeMemory (0)
Debug ""
Debug "------------------------------------------------------------------------"
Debug Chr (34) + title$ + Chr (34) + " / Class: " + class$
Debug "------------------------------------------------------------------------"
EnumChildWindows_ (window, @ListChildWindows (), 1)
ProcedureReturn #True
EndProcedure
EnumWindows_ (@ListWindows (), 0)
Verfasst: 24.08.2005 15:25
von Kiffi
ungetestet:
Code: Alles auswählen
#BufferSize = 2048
Procedure.s GetClassName(handle.l)
Class.s = Space(#BufferSize)
GetClassName_(handle, @Class, Len(Class))
ProcedureReturn Left(Class, Len(Class))
EndProcedure
Procedure.s GetTitle(handle)
Name.s = Space(#BufferSize)
GetWindowText_(handle, @Name, Len(Name))
ProcedureReturn
EndProcedure
Procedure ListChildWindows (window, parameter)
class$ = GetClassName(window)
title$ = GetTitle(window)
For a = 1 To parameter
sub$ = sub$ + "--------"
Next
Debug sub$ + ">" + Chr (34) + title$ + Chr (34) + " / Class: " + class$
EnumChildWindows_ (window, @ListChildWindows (), parameter + 1)
ProcedureReturn #True
EndProcedure
; List top-level windows...
Procedure ListWindows (window, parameter)
class$ = GetClassName(window)
title$ = GetTitle(window)
Debug ""
Debug "------------------------------------------------------------------------"
Debug Chr (34) + title$ + Chr (34) + " / Class: " + class$
Debug "------------------------------------------------------------------------"
EnumChildWindows_ (window, @ListChildWindows (), 1)
ProcedureReturn #True
EndProcedure
EnumWindows_ (@ListWindows (), 0)