WinAPI Library (Snippets) (1163 Beispielcodes)

Windowsspezifisches Forum , API ,..
Beiträge, die plattformübergreifend sind, gehören ins 'Allgemein'-Forum.
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: WinAPI Library (Snippets) (747)

Beitrag von ts-soft »

Ich hab hier noch eine undokumentierte Funktion, funktioniert mind. seit WinXP.

Code: Alles auswählen

#MB_TIMEDOUT = $7D00

Prototype.i MBTimeOut(hwnd.i, lpText.s, lpCaption.s, uType.l, wLanguageId.w, dwMilliseconds.l)

Procedure MessageBoxTimeout(hwnd.i, lpText.s, lpCaption.s, uType.l, dwMilliseconds.l)
  Protected hDLL = GetModuleHandle_("user32")
  Protected FuncString.s
  Protected MBTimeOut.MBTimeOut
  
  CompilerIf #PB_Compiler_Unicode
    FuncString.s = Space(17)
    PokeS(@FuncString, "MessageBoxTimeoutW", -1, #PB_Ascii)
  CompilerElse
    FuncString.s = "MessageBoxTimeoutA"
  CompilerEndIf
  
  If hDLL
    MBTimeOut = GetProcAddress_(hDLL, @FuncString)
    If MBTimeOut
      ProcedureReturn MBTimeOut(hwnd, lpText, lpCaption, uType, 0, dwMilliseconds)
    EndIf
  Else
    Debug "Error: MessageBoxTimeout"
  EndIf
EndProcedure

; Beispiel:
Select MessageBoxTimeout(0, "Mögen Sie PureBasic?" + #LF$ + "Sie haben 5 Sekunden zu antworten!", "Frage:", #MB_YESNO, 5000)
  Case #IDYES
    Debug "Sie haben 'Ja' gewählt!"
  Case #IDNO
    Debug "Sie haben 'Nein' gewählt!"
  Case #MB_TIMEDOUT
    Debug "Sie waren zu langsam ;-)"
EndSelect
Jetzt haste wieder was zum hinzufügen :wink:

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
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: WinAPI Library (Snippets) (747)

Beitrag von RSBasic »

Danke schön Thomas. :D
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
Sicro
Beiträge: 963
Registriert: 11.08.2005 19:08
Kontaktdaten:

Re: WinAPI Library (Snippets) (747)

Beitrag von Sicro »

Mit dieser Procedure kann man prüfen, ob das Programm bereit für Benutzereingaben ist.
Codes diesbezüglich gibt es bereits im englischem Forum, aber diese funktionieren nicht mehr.

Code: Alles auswählen

Procedure IsProgramReady(Program.i, MillisecondsToWait.i)
  Protected ProgramHandle.i, RetVal.i
  
  ProgramHandle = OpenProcess_(#PROCESS_QUERY_INFORMATION, #False, ProgramID(Program))
  If ProgramHandle = 0
    ProcedureReturn -1
  EndIf
  
  Select WaitForInputIdle_(ProgramHandle, MillisecondsToWait)
    Case #WAIT_FAILED:  RetVal = -1
    Case #WAIT_TIMEOUT: RetVal = #False
    Case 0:             RetVal = #True
  EndSelect
  
  CloseHandle_(ProgramHandle)
  ProcedureReturn RetVal
EndProcedure

Program = RunProgram("C:\Program Files\Paint.NET\PaintDotNet.exe", "", "", #PB_Program_Open)
If IsProgram(Program)
  
  ; Warte bis Programm bereit ist
  Repeat
    If ProgramRunning(Program)
      If IsProgramReady(Program, 100) = #True
        Break
      EndIf
    EndIf
  ForEver
  
  Debug "Programm ist nun bereit"
  
EndIf
Edit: Fehler im Code beseitigt
Zuletzt geändert von Sicro am 30.06.2013 11:40, insgesamt 1-mal geändert.
Bild
Warum OpenSource eine Lizenz haben sollte :: PB-CodeArchiv-Rebirth :: Pleasant-Dark (Syntax-Farbschema) :: RegEx-Engine (kompiliert RegExes zu NFA/DFA)
Manjaro Xfce x64 (Hauptsystem) :: Windows 10 Home (VirtualBox) :: Neueste PureBasic-Version
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: WinAPI Library (Snippets) (747)

Beitrag von RSBasic »

@Sicro
Super. :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
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: WinAPI Library (Snippets) (802)

Beitrag von RSBasic »

WinAPI Library 1.3.0 wurde veröffentlicht (55 neue Beispielcodes, 24 Beispielcodes repariert)

Hinzugefügt:


Benutzer: CheckBoxGadget: ComboBoxGadget: EditorGadget: Gadgets: Internet: Konsole: ListIconGadget: ListViewGadget: Maus und Tastatur: Menü: OpenWindow: Prozesse: Sonstige: StatusBar: Taskleiste: TextGadget: ToolBar: WebGadget:
Repariert:
  • Sonstige\Windows-Seriennummer ermitteln
  • Sonstige\Systemwiederherstellungspunkt erstellen
  • ComboBoxGadget\Überprüfen, ob Box ausgeklappt ist
  • OpenWindow\Titelleiste ohne Icon
  • ButtonGadget\Button mit Icon
  • Dateien\Verknüpfung lesen
  • ExplorerListGadget\Header auf Mausklick abfragen
  • ExplorerListGadget\Header-Höhe ändern
  • Gadgets\Maus zum Gadget springen
  • Gadgets\ToolTip mit Zeilenumbruch
  • ListIconGadget\Header auf Mausklick abfragen
  • ListIconGadget\Header-Höhe ändern
  • Menü\Breite und Höhe ermitteln
  • OpenWindow\Client-Bereich der Titelleiste modifizieren
  • OpenWindow\Schaltfläche aus der Taskleiste entfernen
  • Popup-Menü\Breite und Höhe ermitteln
  • Prozesse\Fenstergröße wiederherstellen
  • Prozesse\Maximieren
  • Prozesse\Minimieren
  • Prozesse\Schaltfläche aus der Taskleiste entfernen
  • Prozesse\Text unter Maus ermitteln
  • Sonstige\Task Dialog 1
  • StatusBar\Schrift- und Hintergrundfarbe ändern
  • StringGadget\Hintergrundbild hinzufügen

Online: http://www.rsbasic.de/winapi-library
Offline: Updaten ;)
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
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: WinAPI Library (Snippets) (802)

Beitrag von ts-soft »

:allright:
Sehr schön, danke.

Hab da aber auf Anhieb was gefunden :mrgreen:
OpenWindow / Aero-Hintergrund läuft nicht im Unicode-Modus.
(liegt an GetProcAddress_, erwartet funktionsnamen immer in ASCII)
Habs mal angepaßt, unter Verwendung der PB-Funktionen:

Code: Alles auswählen

Procedure EnableBlurBehindWindow(hWnd.l, enable.b = #True, region.l = 0, transitionOnMaximized.b = #False)
  Protected blurBehind.DWM_BLURBEHIND
  Protected Lib
  Protected *pAfunc
  
  blurBehind\dwFlags = #DWM_BB_ENABLE | #DWM_BB_TRANSITIONONMAXIMIZED
  ;blurBehind\dwFlags = #DWM_BB_ENABLE
  blurBehind\fEnable = enable
  blurBehind\fTransitionOnMaximized = transitionOnMaximized
  
  ;Lib = LoadLibrary_("dwmapi.dll")
  Lib = OpenLibrary(#PB_Any, "dwmapi.dll")
  If Lib
    If (enable And 0) <> region
      blurBehind\dwFlags = #DWM_BB_BLURREGION
      blurBehind\hRgnBlur = region
    EndIf
      ;*pAfunc = GetProcAddress_(Lib, "DwmEnableBlurBehindWindow")
      *pAfunc = GetFunction(Lib,  "DwmEnableBlurBehindWindow")
      CallFunctionFast(*pAfunc, hWnd, @blurBehind)
      ;FreeLibrary_(Lib)
      CloseLibrary(Lib)
  EndIf
   
  ProcedureReturn
EndProcedure
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
Josh
Beiträge: 1028
Registriert: 04.08.2009 17:24

Re: WinAPI Library (Snippets) (802)

Beitrag von Josh »

Hallo RSBasic,

danke für deine Arbeit. Vielleicht kannst du bei Mausrad-Ticks ermitteln die Prozedur MouseWheelDelta wie folgt ändern. Neue Mäuse senden nicht mehr zwangsweise einen Wert von 120 und mit dieser geänderten Prozedur wird die alte Funktion simuliert:

Code: Alles auswählen

Procedure.w MouseWheelDelta() 
  Static MouseDelta.w
  Define ret
  
  MouseDelta + ((EventwParam()>>16)&$FFFF)
  ret = MouseDelta/120
  MouseDelta - ret*120

  ProcedureReturn -ret

EndProcedure 
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: WinAPI Library (Snippets) (802)

Beitrag von RSBasic »

@ts-soft & @Josh
Danke schön für eure verbesserten Codeversionen, die ich dann beim nächsten Update hochladen werde. Danke. :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
Sicro
Beiträge: 963
Registriert: 11.08.2005 19:08
Kontaktdaten:

Re: WinAPI Library (Snippets) (802)

Beitrag von Sicro »

Ohje, habe gerade ein Fehler in meinem Code gefunden: CloseHandle_() wird nie ausgeführt. :roll:
Ich habe den Code oben korrigiert.
Bild
Warum OpenSource eine Lizenz haben sollte :: PB-CodeArchiv-Rebirth :: Pleasant-Dark (Syntax-Farbschema) :: RegEx-Engine (kompiliert RegExes zu NFA/DFA)
Manjaro Xfce x64 (Hauptsystem) :: Windows 10 Home (VirtualBox) :: Neueste PureBasic-Version
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: WinAPI Library (Snippets) (802)

Beitrag von RSBasic »

Okay, ist im nächsten Update gefixt. Danke. ;)
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Antworten