Autor | Thema: Nur Fenster unterdrücken | | Datum:17.07.02 18:15 
| |
Ich habe ein Fenster mit dem Namen A, das über den gesamten bildschirm geht, und mit setwindowpos in den vordergrund geholt wird. Damit wird das fenster B einer fremden Anwendung unterdrückt und wird so anscheinlich nicht angezeigt.
Es ist ja normal das nun Fenster B hinter fenster A steht - immer, ist es aber möglich, Messageboxen, die von Fenster B ausgehen trotzdem im Vorderung (also vor Fenster A) anzeigen zu lassen, das eigentliche Fenter B jedoch soll im Hintergrund bleiben .........
Mathias Kranze
|
| | Datum:18.07.02 17:41 
(GTelzerow@T-Online.de) | |
Hi Matihas,
ja, es ist möglich.
Hier ein kleines Beispiel für ein Fenster,
ist aber leicht ausbaubar oder nicht?
Du musst zuerst das Prog. B im Interpreter starten und dann stehen lassen und danach gleich das Prog. A im Interpreter starten, nach 20 Sekunden hast du eine Fehlermeldung
von Prog. B, zentriert auf dem Desktop.
'********* Prog. Fenster A ***********************
Def GetWindow(2) !"USER32","GetWindow"
Def GetClassName(3) !"USER32","GetClassNameA"
Def IsWindowVisible(1) !"USER32","IsWindowVisible"
Def GetWindowLong(2) !"USER32", "GetWindowLongA"
Def GetClassLong(2) !"USER32","GetClassLongA"
Declare X1%,Y1%,x2%,Y2%
Declare Fenster&
Declare cname#
Proc TaskWindows
Declare result&,cn$
Dim cname#,64
Declare Excluded_Classnames$,icon&
' Taskbar, Desktop, Tooltips, Startmenü sollen nicht erscheinen
Let Excluded_Classnames$="SHELL_TRAYWND PROGMAN TOOLTIPS TOOLTIPS_CLASS32 BASEBAR #32768"
Let result&=GetWindow(%desktop,5)
'UseCursor 2
While Neq(result&,0)
If Neq(result&,%desktop)
' nur Fenster mit Stilbit WS_VISIBLE kommen in Frage
If Neq(IsWindowVisible(result&),0)
' Taskbar und Desktop selbst sollen nicht erscheinen
GetClassName(result&,cname#,64)
Let cn$=Upper$(String$(cname#,0))
If Equ(Instr(cn$,Excluded_Classnames$),0)
' Nur Fenster ohne Elternfenster werden angezeigt
If Equ(GetWindowLong(result&,-8),0) 'GWL_HWNDPARENT
If @Equ$(GetText$(result&)," Time-Counter v 1.0 © G. Telzerow")
Let X1%=%WinLeft
Let Y1%=%WinTop
Let x2%=%WinRight
Let Y2%=%WinBottom
Let Fenster&=Str$(result&)
SetWindowPos Str$(result&)=@Add(%WinLeft,%MaxX),%WinTop-%WinRight,%WinBottom;1
Else
Endif
EndIf
EndIf
EndIf
Let result&=GetWindow(result&,2)
Wend
Dispose cname#
'UseCursor 0
EndProc
WindowTitle "Task-Fenster"
'Aufrufen
TaskWindows
WaitInput
'Das (oder die Programme) hier Prog. B wieder zurück hollen
SetWindowPos Fenster&=X1%,Y1%-X2%,Y2%;0
@SetActiveWindow(Fenster&)
End
'********* Prog. Fenster B ***********************
SetTrueColor 1
WindowStyle 144
WindowTitle " Time-Counter v 1.0 © G. Telzerow"
Window 10,10 - 600,390
Cls @RGB(192,192,192)
Print "Testen"
PROC Schlafe
Parameters N&
Declare Ende%
SetTimer N&
Let Ende% = 0
WHILENOT Ende%
WaitInput
If %wmTimer
@MessageBox("Die Datei wurde Gelöscht !"," Datei Fehler",4112)
Let Ende% = 1
Endif
ENDWHILE
KillTimer
ENDPROC
Schlafe 20000
Print "Weiter"
waitinput
End
|
| | Datum:20.07.02 10:55 
| |
danke schön!!!!!!
werde mir das jetzt mal anschauen und umbauen das das eine fenster mit winexe aufegrufen wird..
danke
|
| | Datum:23.07.02 22:52 
(GTelzerow@Tonline.de) | |
RE da das eine Fenster mit winexe aufgerufen wird..
Das spielt in meinem Beispiel keine Rolle, du könntest alle (Aktiven) Fenster in den Hintergrund verbannen.
MfG Gerd
|
| | Datum: 25.07.02 20:27 
| |
hatte bisher keine zeit mir das ganze anzuschauen oder zu testen......
|
|
|