Die Community zu .NET und Classic VB.
Menü

VB 5/6-Tipp 0111: Position fremder Fenster bestimmen und ändern

 von 

Beschreibung 

Dieses Beispiel zeigt wie Anhand eines Fenstertitels das Handle einer anderen Anwendung gefunden wird um damit die Fensterposition dersdelben auszulesen und frei über den Bildschirm zu verschieben. Dafür wird hier das aufrufende Form unteranderem 'OnTop' gesetzt.

Schwierigkeitsgrad:

Schwierigkeitsgrad 1

Verwendete API-Aufrufe:

FindWindowA (FindWindow), GetWindowRect, SetWindowPos, ShowWindow

Download:

Download des Beispielprojektes [2,58 KB]

'Dieser Quellcode stammt von http://www.activevb.de
'und kann frei verwendet werden. Für eventuelle Schäden
'wird nicht gehaftet.

'Um Fehler oder Fragen zu klären, nutzen Sie bitte unser Forum.
'Ansonsten viel Spaß und Erfolg mit diesem Source!

'------------- Anfang Projektdatei Project1.vbp -------------
'--------- Anfang Formular "Form1" alias Form1.frm  ---------
' Steuerelement: Schaltfläche "Command2"
' Steuerelement: Schaltfläche "Command1"
' Steuerelement: Bildfeld-Steuerelement "Picture1"

Option Explicit

Private Declare Function SetWindowPos Lib "user32" (ByVal _
        hwnd As Long, ByVal hWndInsertAfter As Long, _
        ByVal x As Long, ByVal y As Long, ByVal cx As Long, _
        ByVal cy As Long, ByVal wFlags As Long) As Long

Private Declare Function ShowWindow Lib "user32" (ByVal _
        hwnd As Long, ByVal nCmdShow As Long) As Long

Private Declare Function GetWindowRect Lib "user32" (ByVal _
        hwnd As Long, lpRect As RECT) As Long

Private Declare Function FindWindow Lib "user32" Alias _
        "FindWindowA" (ByVal lpClassName As String, ByVal _
        lpWindowName As String) As Long

Const SWP_NOMOVE = &H2
Const SWP_NOSIZE = &H1
Const HWND_TOPMOST = -1

Const SW_MAXIMIZE = 3
Const SW_MINIMIZE = 6
Const SW_RESTORE = 9

Private Type RECT
  Left As Long
  Top As Long
  Right As Long
  Bottom As Long
End Type

Dim XhWnd&

Private Sub Form_Load()
  Dim Result&
    Picture1.ScaleMode = vbPixels
    Picture1.Print "Hier die Maus drüber bewegen !"
  
    'NotePad starten
    Result = Shell("notepad.exe", vbNormalFocus)
  
    'Handle des Notepads auslesen
    XhWnd = FindWindow(vbNullString, "Unbenannt - Editor")
  
    'Eigenes Fenster nach oben setzen
    Result = SetWindowPos(Me.hwnd, HWND_TOPMOST, 0, 0, 0, 0, _
                          SWP_NOMOVE + SWP_NOSIZE)
End Sub

Private Sub Command1_Click()
  Call ShowWindow(XhWnd, SW_MINIMIZE)

End Sub

Private Sub Command2_Click()
  Call ShowWindow(XhWnd, SW_RESTORE)
End Sub

Private Sub Picture1_MouseMove(Button As Integer, Shift As _
                               Integer, x As Single, y As Single)
  Dim R As RECT, pX&, pY&
  
    'Neue Position berechnen
    pX = x * Screen.Width / Picture1.Width
    pY = y * Screen.Height / Picture1.Height
    
    'Neue Position Setzen
    Call SetWindowPos(XhWnd, 0, pX * 0.5, pY * 0.5, pX * 0.5 + _
                      pX * 0.25, pY * 0.5 + pY * 0.25, 0&)
    
    'Neue Position Auslesen und anzeigen
    Call GetWindowRect(XhWnd, R)
    Me.Caption = "[" & R.Left & "] [" & R.Top & "]"
End Sub
'---------- Ende Formular "Form1" alias Form1.frm  ----------
'-------------- Ende Projektdatei Project1.vbp --------------

Tipp-Kompatibilität:

Windows/VB-VersionWin32sWin95Win98WinMEWinNT4Win2000WinXP
VB4
VB5
VB6

Hat dieser Tipp auf Ihrem Betriebsystem und mit Ihrer VB-Version funktioniert?

Ja, funktioniert!

Nein, funktioniert nicht bei mir!

VB-Version:

Windows-Version:

Ihre Meinung  

Falls Sie Fragen zu diesem Artikel haben oder Ihre Erfahrung mit anderen Nutzern austauschen möchten, dann teilen Sie uns diese bitte in einem der unten vorhandenen Themen oder über einen neuen Beitrag mit. Hierzu können sie einfach einen Beitrag in einem zum Thema passenden Forum anlegen, welcher automatisch mit dieser Seite verknüpft wird.

Archivierte Nutzerkommentare 

Klicken Sie diesen Text an, wenn Sie die 3 archivierten Kommentare ansehen möchten.
Diese stammen noch von der Zeit, als es noch keine direkte Forenunterstützung für Fragen und Kommentare zu einzelnen Artikeln gab.
Aus Gründen der Vollständigkeit können Sie sich die ausgeblendeten Kommentare zu diesem Artikel aber gerne weiterhin ansehen.

Kommentar von Sachse am 15.11.2008 um 21:23

..also manche Tipps machen mich aber auch fertig! Es geht hier in dem Tipp doch darum, die Position eines Fensters festzulegen. Das steht im Mittelpunkt dieses Tipps und das erwartet man auch, wenn man von der Suche auf diesen Tipp stösst. Statt dessen müssen der User mühsam (!) versuchen, die Maus-Spielerei aus dem Code zu bekommen. Macht doch sowas bitte in Extra Tipps: "Mit der Maus die Fenstergröße und Position bestimmen". Das fällt leider in mehreren Tipps auf.
Sachse

Kommentar von Joie am 25.10.2005 um 00:57

Ha das jemand mit VB.NET zum laufen gebracht?

Kommentar von Matthias Göbel am 08.06.2002 um 22:36

Hat jemand eine Idee wie man eine DOS-Box
(Command.com oder cmd.exe) über VB in den Vollbild-Modus schalten kann (geht manuell mit "-") ?