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. 
