Seite 34 von 43
Re: WinAPI Library (Snippets) (747)
Verfasst: 25.11.2012 03:49
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
Gruß
Thomas
Re: WinAPI Library (Snippets) (747)
Verfasst: 25.11.2012 12:21
von RSBasic
Danke schön Thomas.

Re: WinAPI Library (Snippets) (747)
Verfasst: 31.05.2013 13:59
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
Re: WinAPI Library (Snippets) (747)
Verfasst: 31.05.2013 14:31
von RSBasic
@Sicro
Super.

Re: WinAPI Library (Snippets) (802)
Verfasst: 29.06.2013 23:31
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

Re: WinAPI Library (Snippets) (802)
Verfasst: 29.06.2013 23:59
von ts-soft
Sehr schön, danke.
Hab da aber auf Anhieb was gefunden
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
Re: WinAPI Library (Snippets) (802)
Verfasst: 30.06.2013 00:55
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
Re: WinAPI Library (Snippets) (802)
Verfasst: 30.06.2013 10:53
von RSBasic
@ts-soft & @Josh
Danke schön für eure verbesserten Codeversionen, die ich dann beim nächsten Update hochladen werde. Danke.

Re: WinAPI Library (Snippets) (802)
Verfasst: 30.06.2013 11:52
von Sicro
Ohje, habe gerade ein Fehler in meinem Code gefunden: CloseHandle_() wird nie ausgeführt.

Ich habe den Code oben korrigiert.
Re: WinAPI Library (Snippets) (802)
Verfasst: 30.06.2013 12:11
von RSBasic
Okay, ist im nächsten Update gefixt. Danke.
