Seite 1 von 1

IMA in der IDE nach WinAPI-Aufruf

Verfasst: 08.01.2012 17:11
von [chaos]
Aloha,

die IDE verabschiedet sich mit einem IMA nachdem man einen vermeintlich harmlosen WinAPI-Aufruf macht. Auch die Fehlermeldung kann sich nicht so richtig entscheiden und zeigt jeweils
Error: Invalid memory access
File: [..]\PureBasicIDE\..\PureBasicDebugger\Communication_PipeWindows.pb
Line: 243
und
Error: Invalid memory access
File: [..]\PureBasicIDE\WindowsMisc.pb
Line: 784
an. (Fehlermeldungen von der v4.61 Beta 1 x86, da die v4.60 x64 IDE keine Fehlerbeschreibung ausgibt)

Wenn man diesen Code kompiliert und ausführt und danach zum IDE-Fenster wechselt (maximiert), fährt diese gegen die Wand, zumindest bei mir. Kann das jemand bestätigen?

Code: Alles auswählen

Procedure SetForegroundWindowEx(hWndWindow)
  Protected SetForegroundWindowEx
  Protected lThreadForeWin.l
  Protected lThreadWindow.l

  lThreadWindow  = GetWindowThreadProcessId_(hWndWindow, 0)
  lThreadForeWin = GetWindowThreadProcessId_(GetForegroundWindow_(), 0)
  
  If lThreadWindow = lThreadForeWin
    SetForegroundWindowEx = SetForegroundWindow_(hWndWindow)
  Else
    AttachThreadInput_(lThreadForeWin, lThreadWindow, #True)
    SetForegroundWindowEx = SetForegroundWindow_(hWndWindow)
    AttachThreadInput_(lThreadForeWin, lThreadWindow, #False)
  EndIf
  
  ProcedureReturn SetForegroundWindowEx
EndProcedure

OpenWindow(1, 100, 100, 200, 200, "Crashtest")

Repeat
  Event = WaitWindowEvent()

  SetForegroundWindowEx(WindowID(1))
Until Event = #PB_Event_CloseWindow
Anscheinend stellt

Code: Alles auswählen

AttachThreadInput_(lThreadForeWin, lThreadWindow, #True)
ein Problem für die IDE dar.

Getestest auf
  • PureBasic 4.60 (Windows - x64) auf Windows 7 Ultimate
  • PureBasic 4.61 Beta 1 (Windows - x86) auf Windows XP Professional
Bis dann,
Kaosu

__________________________________________________
Thread verschoben
Bugs>Windows
08.01.2012
RSBasic

Re: IMA in der IDE nach WinAPI-Aufruf

Verfasst: 08.01.2012 17:55
von ts-soft
Du unterbrichst IMHO die Verbindung der IDE zum Debugger, das dies Kracht ist gar nicht so verwunderlich.
In der erzeugten Exe, bzw. beim Testen ohne Debugger sollte ja alles laufen.

Gruß
Thomas

Re: IMA in der IDE nach WinAPI-Aufruf

Verfasst: 08.01.2012 18:40
von [chaos]
Selbst wenn der Debugger aus ist und selbst wenn ich eine EXE erzeuge, die aufrufe und zur PB-IDE wechsel, gibts nen IMA. Daran kann es also nicht liegen.

Edit: Bin ja auch auf das Problem gestoßen, als mein Kompilat die IDE jedesmal regelrecht abgeschossen hat, welche keinerlei Verbindung zur IDE hatte.

Gruß,
Kaosu

Re: IMA in der IDE nach WinAPI-Aufruf

Verfasst: 08.01.2012 19:20
von ts-soft
Okay, aber wenn Du mit: "AttachThreadInput_(lThreadForeWin, lThreadWindow, #True)" eine andere Exe manipulierst,
kannst Du nicht erwarten das diese normal weiter funktioniert.
Es ist in keinem Fall ein Bug in PB oder der IDE, sondern unsachgemässe Anwendung einer nicht so harmlosen API.
Diese API auf unbekannte Fenster anzuwenden sollte man wohl eher unterlassen, genauso wie ich es als unschön
empfinde, wenn ein Fenster mit SetForeGroundWindow in den Vordergrund gebracht wird. Im allgemeinen (mit
Ausnahmen), sollte dies nur der Anwender und keine Anwendung tun. Ich persönliche hasse so was, es sei denn, es ist
ein Setup, AV-Programm oder ähnliches mit hohem Beachtungsbedarf.

Gruß
Thomas

Re: IMA in der IDE nach WinAPI-Aufruf

Verfasst: 08.01.2012 19:38
von [chaos]
Problem ist, dass der LowLevelKeyboardHook nur Müll zurückgibt wenn das Fenster nicht den Fokus hat. Das Fenster ist nebenbei eine Application Desktop Toolbar, da wird nichts ins Gesicht springen.

Trotz alledem werd ich deinen Ratschlag beherzigen und den Code in die Tonne treten.

Gruß,
Kaosu.

Re: IMA in der IDE nach WinAPI-Aufruf

Verfasst: 08.01.2012 19:58
von ts-soft
Ich denke mal, Du wirst noch bessere Lösungen finden, danach wurde ja bisher nicht gefragt :wink:
Notfalls eine Blacklist, wo der Anwender bestimmte Anwendungen ausschließen kann, z.B. die meisten
Tools zur Dual-Monitor Unterstützung haben so was, weil es ziemlich viele Programme gibt, die auf
Veränderungen von "draussen", allergisch reagieren.