IMA in der IDE nach WinAPI-Aufruf

Windowsspezifisches Forum , API ,..
Beiträge, die plattformübergreifend sind, gehören ins 'Allgemein'-Forum.
Benutzeravatar
[chaos]
Beiträge: 9
Registriert: 04.08.2006 14:40
Wohnort: Ludwigshafen
Kontaktdaten:

IMA in der IDE nach WinAPI-Aufruf

Beitrag 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
PureBasic 4.60 (Windows - x64)
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: IMA in der IDE nach WinAPI-Aufruf

Beitrag 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
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
[chaos]
Beiträge: 9
Registriert: 04.08.2006 14:40
Wohnort: Ludwigshafen
Kontaktdaten:

Re: IMA in der IDE nach WinAPI-Aufruf

Beitrag 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
PureBasic 4.60 (Windows - x64)
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: IMA in der IDE nach WinAPI-Aufruf

Beitrag 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
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
[chaos]
Beiträge: 9
Registriert: 04.08.2006 14:40
Wohnort: Ludwigshafen
Kontaktdaten:

Re: IMA in der IDE nach WinAPI-Aufruf

Beitrag 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.
PureBasic 4.60 (Windows - x64)
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: IMA in der IDE nach WinAPI-Aufruf

Beitrag 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.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Antworten