WinAPI Library (Snippets) (1163 Beispielcodes)

Windowsspezifisches Forum , API ,..
Beiträge, die plattformübergreifend sind, gehören ins 'Allgemein'-Forum.
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: WinAPI Library (Snippets) (548)

Beitrag von RSBasic »

@neotoma
Wow, sehr fleißig, vielen lieben Dank für deine zahlreichen Beispielcodes :) :allright:
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
Rudi
Beiträge: 143
Registriert: 22.04.2010 18:28
Wohnort: #PB_Any

Re: WinAPI Library (Snippets) (548)

Beitrag von Rudi »

Ist mir zufällig beim Durchstöbern aufgefallen:
Hier verschwindet der Effekt, sobald das Fenster den Fokus verliert:
"OpenWindow -> Dünner Rahmen"

Code: Alles auswählen

If OpenWindow(0,0,0,500,250,"Window",#PB_Window_SystemMenu|#PB_Window_ScreenCentered|#PB_Window_Invisible)
  SetWindowLongPtr_(WindowID(0),#GWL_EXSTYLE,$2000)
  HideWindow(0,0)
  
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf
Hier erscheint die Schaltfläche in der Taskleiste, wenn der Fokus erst genommen und dann wieder gegeben wird:
"OpenWindow - Schaltfläche aus der Taskleiste entfernen"

Code: Alles auswählen

EnableExplicit

Procedure HideFromTaskBar(hWnd.l, Flag.l)
  Protected TBL.ITaskbarList
  CoInitialize_(0)
  If CoCreateInstance_(?CLSID_TaskBarList, 0, 1, ?IID_ITaskBarList, @TBL) = #S_OK
    TBL\HrInit()
    If Flag
      TBL\DeleteTab(hWnd)
    Else
      TBL\AddTab(hWnd)
    EndIf
    TBL\Release()
  EndIf
  CoUninitialize_()
 
  DataSection
    CLSID_TaskBarList:
    Data.l $56FDF344
    Data.w $FD6D, $11D0
    Data.b $95, $8A, $00, $60, $97, $C9, $A0, $90
    IID_ITaskBarList:
    Data.l $56FDF342
    Data.w $FD6D, $11D0
    Data.b $95, $8A, $00, $60, $97, $C9, $A0, $90
  EndDataSection
EndProcedure

If OpenWindow(0,0,0,500,250,"Window",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
  
  HideFromTaskBar(WindowID(0),1)
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf
Vielleicht kann jemand helfen. :iamwithstupid:
Win7 (x64)PB 5.4x (x86)5,7 Windows-LeistungsindexSuche
Benutzeravatar
Falko
Admin
Beiträge: 3535
Registriert: 29.08.2004 11:27
Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.11b1
HP255G8 Notebook @AMD Ryzen 5 5500U with Radeon Graphics 2.10 GHz 3.4GHz, 32GB_RAM, 3TB_SSD (Win11 Pro 64-Bit)
Kontaktdaten:

Re: WinAPI Library (Snippets) (548)

Beitrag von Falko »

Da ich jetzt wieder auf Vsita 32bit umgestiegen bin, habe ich
die WinAPI Library erneut installiert.

Dabei ist mir folgendes aufgefallen:

Die WinAPI Library kann ich so nicht vom Start ... Programm ausführen.
Was half, im Verzeichnis WinAPI Library eine neue Vernküpfung erzeugen
und diese dann ins Startverzeichnis kopieren. Damit funktioniert sie wieder.

Unten rechts der Button für PureBasic funktioniert wohl nur auf ein festes
Verzeichnis. Denn ich bekomme die Fehlermeldung:
WinAPI Library hat geschrieben: [Window Title]
C:\Program Files\PureBasic\PureBasic.exe

[Content]
"C:\Program Files\PureBasic\PureBasic.exe" konnte nicht gefunden werden. Stellen Sie sicher, dass Sie den Namen richtig eingegeben haben und wiederholen Sie den Vorgang.

[OK]
Die html-Seite im Programmordner zeigt noch den alten Link zu http://www.rsbasic.i3h.de
Obwohl der im Programm wohl korrekt ist, sollte die html-Seite auch auf http://www.rsbasic.de zeigen.

Gruß Falko
Bild
Win11 Pro 64-Bit, PB_6.11b1
super_castle
Beiträge: 557
Registriert: 29.11.2005 15:05

Re: WinAPI Library (Snippets) (548)

Beitrag von super_castle »

Ein Dosfenster(DosBox) in einem Purebasicwindows setzen(öffnen) und daneben Buttons .
Wie geht so etwas?

Gruss
Jilocasin
Beiträge: 665
Registriert: 13.05.2006 16:04
Kontaktdaten:

Re: WinAPI Library (Snippets) (548)

Beitrag von Jilocasin »

DOSBox ist ein DOS-Emulator und wahrscheinlich was ganz anderes, als du meinst.
Willst du die Konsole in ein Fenster verfrachten, könnte das mit SetParent_() gehen.

Code: Alles auswählen

OpenConsole()
ConsoleTitle("Blablabla")

OpenWindow(0, 0, 0, 650, 400, "Test", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
SetParent_(FindWindow_(0, "Blablabla"), WindowID(0))

Repeat

Until WaitWindowEvent() = #PB_Event_CloseWindow
Im Übrigen.. ich schätze, das ist das falsche Topic zum random-Fragen stellen :?

Edit: Oh.. ich hab gerade mal ein wenig gestöbert und geblättert.. was dein Profil angeht.. ich frage mich, wieso ich das hier eigentlich noch extra für dich schreibe :lol:
Bild
super_castle
Beiträge: 557
Registriert: 29.11.2005 15:05

Re: WinAPI Library (Snippets) (548)

Beitrag von super_castle »

Jup, danke.

Sieht schon gut aus. Erscheint im Screen, aber es lässt sich kein "Dir" eingeben bzw es hat keine aktivitäten.

Gruss
Jilocasin
Beiträge: 665
Registriert: 13.05.2006 16:04
Kontaktdaten:

Re: WinAPI Library (Snippets) (548)

Beitrag von Jilocasin »

Klar hat es keine, ist ja auch nur eine Console... :freak:
Bild
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7028
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: WinAPI Library (Snippets) (548)

Beitrag von STARGÅTE »

Cool, habe den Link irgendwie jetzt erst richtig wargenommen.
:allright:
Viele kurze einfache Beispiele zu durchaus wichtigen APIs ... danke
Bild
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
neotoma
Beiträge: 202
Registriert: 13.09.2004 16:16
Kontaktdaten:

Re: WinAPI Library (Snippets) (548)

Beitrag von neotoma »

Ein Fenster in den Fullscreen wechseln und zurück.
Quelle: http://www.vbarchiv.net/tipps/tipp_834- ... modus.html

Code: Alles auswählen

#SC_SYSSEPERATOR = $0


;Structure to keep the Infoprmation of a Window for restore them.
Structure sFullscreenWindow
  bytState.i
  tWinRect.RECT
  lWinStyle.i
EndStructure  
  
; For the 'courious' case with more than one Fullscreen-Windows  
Global NewMap _Fullscreen_windows.sFullscreenWindow()

; Window-Fullscreen
;
;
Procedure WindowFullscreen(win_id.i, bState.i, bMenuClose.i = #True)    
  Protected lStyle.i, hMenu
  
  LockWindowUpdate_( GetDesktopWindow_() ) 
  
  If IsWindow(win_id)        
    
    ;Noch nicht in der Vollansicht gewesen.
    If FindMapElement( _Fullscreen_windows(),Str(win_id) ) = 0 And bState = #False
      LockWindowUpdate_( #Null )
      
      ProcedureReturn 
    EndIf          
    
    With _Fullscreen_windows(Str(win_id))
      
      ;Ist bereits vollansicht
      If  \bytState = #True And bState = #True
        LockWindowUpdate_( #Null )

        ProcedureReturn 
      EndIf
      
      ;Vollansicht?
      If bState
        
        \bytState = #True 
        
        ;Gr÷¯e und Position merken
        GetWindowRect_( WindowID(win_id), @\tWinRect )
        
        ;Stil merken
        \lWinStyle = GetWindowLong_(WindowID(win_id), #GWL_STYLE)
   
        ;Titelleiste und (Gr÷¯enõnderungs-)Rahmen entfernen
         lStyle = \lWinStyle & ~(#WS_CAPTION | #WS_THICKFRAME)
         SetWindowLong_(WindowID(win_id), #GWL_STYLE, lStyle)
        
        ExamineDesktops()
        
        ; Fenstergr÷¯e auf Bildschirm-Gr÷¯e setzen
        SetWindowPos_(WindowID(win_id), #HWND_NOTOPMOST, 0, 0, DesktopWidth(0),DesktopHeight(0),#SWP_FRAMECHANGED)
        
        ; Handle des SystemMen³s ermitteln
        hMenu = GetSystemMenu_(WindowID(win_id), #Null)      
 
        ; Eintrõge aus dem SystemMen³ entfernen
        If hMenu 
          ; Wiederherstellen
          DeleteMenu_(hMenu, #SC_RESTORE, #MF_BYCOMMAND)
          ; Verschieben
          DeleteMenu_(hMenu, #SC_MOVE, #MF_BYCOMMAND)
          ; Gr÷¯e õndern
          DeleteMenu_(hMenu, #SC_SIZE, #MF_BYCOMMAND)
          ; Minimieren
          DeleteMenu_(hMenu, #SC_MINIMIZE, #MF_BYCOMMAND)
          ; Maxminieren
          DeleteMenu_(hMenu, #SC_MAXIMIZE, #MF_BYCOMMAND)
          ; Trennlinie
          DeleteMenu_(hMenu, #SC_SYSSEPERATOR, #MF_BYCOMMAND)
          If bMenuClose = #False 
            ; Schlie¯en
            DeleteMenu_(hMenu, #SC_CLOSE, #MF_BYCOMMAND)
          EndIf
        EndIf
      Else
        ; Status auf Normalansicht setzen
        \bytState = #False
                
        ; Fenstergr÷¯e wiederherstellen
        SetWindowPos_( WindowID(win_id), #HWND_NOTOPMOST, \tWinRect\left, \tWinRect\top, \tWinRect\right - \tWinRect\left, \tWinRect\bottom - \tWinRect\top, #SWP_FRAMECHANGED)
 
        ; Fensterstil wiederherstellen
        SetWindowLong_( WindowID(win_id), #GWL_STYLE, \lWinStyle )
 
        ; Systemmen³ wiederherstellen
        GetSystemMenu_( WindowID(win_id), #True)
      EndIf
 
    ; Systemmen³ neu zeichnen
      DrawMenuBar_(WindowID(win_id))
    EndWith
  EndIf
  
  LockWindowUpdate_( #Null )
EndProcedure 

; Vollansicht-Status ermitteln
Procedure WindowFullscreenState(win_id)
  ProcedureReturn  _Fullscreen_windows(Str(win_id))\bytState
EndProcedure   


; Test
Define flag=0

If OpenWindow(0,0,0,500,250,"Window",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
  ButtonGadget(1,10,10,100,20,"FullscreenSwitch",0)
  Repeat
    
EventID=WaitWindowEvent()
If EventID=#PB_Event_Gadget
  Select EventGadget()
    Case 1
      WindowFullscreen(0, 1!WindowFullscreenState(0))
  EndSelect
EndIf
Until EventID = #PB_Event_CloseWindow
EndIf
; IDE Options = PureBasic 4.50 (Windows - x86)
; CursorPosition = 108
; FirstLine = 83
; Folding = -
; EnableXP
Alle Rechtschreibfehler unterliegen der GPL und dürfen frei kopiert und modifiziert werden.
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: WinAPI Library (Snippets) (548)

Beitrag von RSBasic »

Hallo neotoma,

danke für dein Code :allright:
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Antworten