WinAPI Library (Snippets) (1163 Beispielcodes)

Windowsspezifisches Forum , API ,..
Beiträge, die plattformübergreifend sind, gehören ins 'Allgemein'-Forum.
Benutzeravatar
Rudi
Beiträge: 143
Registriert: 22.04.2010 18:28
Wohnort: #PB_Any

Re: WinAPI Library (Snippets) (548)

Beitrag von Rudi »

Struktur geändert!
Win7 (x64)PB 5.4x (x86)5,7 Windows-LeistungsindexSuche
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) (548)

Beitrag von ts-soft »

Rudi hat geschrieben:Struktur geändert!
Funktioniert immer noch nicht.
Bzw. hWnd.i und hIcon.i waren richtig aber den Fehler kann ich auch noch nicht erkennen.
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
Rudi
Beiträge: 143
Registriert: 22.04.2010 18:28
Wohnort: #PB_Any

Re: WinAPI Library (Snippets) (548)

Beitrag von Rudi »

ts-soft hat geschrieben:hWnd.i und hIcon.i waren richtig aber den Fehler kann ich auch noch nicht erkennen.
Vermute eher, dass man folgende Werte so verwenden sollte:
hWnd.q
hIcon.q
hBalloonIcon.q
also Quads.

Den Rest möglicherweise Integer.

Eventuel hilft noch eine Erhöhung der sz-Werte. Wenn nicht, muss es erst einmal so stehenbleiben: Nicht für 64 Bit!

Vielleicht findet sich ein 64 Bit-Nutzer, der den Code noch zum Laufen bringt. Ich werde mich erst wieder damit beschäftigen wenn ich zufällig auf vielversprechende Hinweise stoßen sollte.
Win7 (x64)PB 5.4x (x86)5,7 Windows-LeistungsindexSuche
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Re: WinAPI Library (Snippets) (548)

Beitrag von edel »

Integer war schon richtig. .i ist unter 32 bit 4 und unter 64bit 8 byte gross.

Die Strucktur ist 12 byte zu gross. Aber den Fehler hab ich nicht gefunden.
Aber warten wir mal auf Thomas, er scheint ja da mehr zu wissen.
Andreas21
Beiträge: 390
Registriert: 30.08.2004 09:05
Computerausstattung: Desktop
Windows 10 Pro x64
CPU: AMD Ryzen 5 2600 3.40 GHz
Ram: 16GB RAM
Grafik: NVIDA Geforce 1060
PB: 5.72 X86/X64
Wohnort: Heidelberg

Re: WinAPI Library (Snippets) (548)

Beitrag von Andreas21 »

Windows 10 x64 Pro - PB 5.61 X64 / x32 - PB 4.6 x32
Benutzeravatar
Rudi
Beiträge: 143
Registriert: 22.04.2010 18:28
Wohnort: #PB_Any

Re: WinAPI Library (Snippets) (548)

Beitrag von Rudi »

Habe nach einer Möglichkeit zum Ändern der Prozesspriorität gesucht und unter dem Ordner "Prozesse" => Eintrag "Prozess-Priorität ändern" was gefunden. Allerdings funktionierte der nicht, weil statt der PID das hWnd übergeben wurde.
Habe das mal abgeändert - hier, wenn der Prozess schon läuft:

Code: Alles auswählen

RunProgram("notepad")
Delay(1000)

hWnd = FindWindow_("Notepad", "Unbenannt - Editor")
GetWindowThreadProcessId_(hWnd, @pId)
hProcess = OpenProcess_(#PROCESS_SET_INFORMATION, #Null, pId)
If hProcess
  SetPriorityClass_(hProcess, #BELOW_NORMAL_PRIORITY_CLASS)
  CloseHandle_(hProcess)
EndIf
End
; #REALTIME_PRIORITY_CLASS     ;Echtzeit
; #HIGH_PRIORITY_CLASS         ;Hoch
; #ABOVE_NORMAL_PRIORITY_CLASS ;Höher als normal
; #NORMAL_PRIORITY_CLASS       ;Normal
; #BELOW_NORMAL_PRIORITY_CLASS ;Niedriger als normal
; #IDLE_PRIORITY_CLASS         ;Niedrig
Wenn der Prozess vom eigenen Programm gestartet wird, dann mache ich das so:

Code: Alles auswählen

pNr = RunProgram("notepad", "", "", #PB_Program_Open)
Delay(1000)
If IsProgram(pNr) <> 0
  pId = ProgramID(pNr)
  hProcess = OpenProcess_(#PROCESS_SET_INFORMATION, #Null, pId)
  If hProcess
    SetPriorityClass_(hProcess, #HIGH_PRIORITY_CLASS)
    CloseHandle_(hProcess)
  EndIf
  CloseProgram(pNr)
EndIf
End
; #REALTIME_PRIORITY_CLASS     ;Echtzeit
; #HIGH_PRIORITY_CLASS         ;Hoch
; #ABOVE_NORMAL_PRIORITY_CLASS ;Höher als normal
; #NORMAL_PRIORITY_CLASS       ;Normal
; #BELOW_NORMAL_PRIORITY_CLASS ;Niedriger als normal
; #IDLE_PRIORITY_CLASS         ;Niedrig
Hier noch eine einfache Variante um ein Fenster mit einem ein Pixel schmalen Rahmen zu erhalten:

Code: Alles auswählen

OpenWindow(0,10,10,200,100,"",#WS_POPUPWINDOW)
Delay(3000)
CloseWindow(0)
End
Siehe "OpenWindow" => "Fensterrahmen entfernen"
Zuletzt geändert von Rudi am 30.10.2010 23:47, insgesamt 2-mal geändert.
Win7 (x64)PB 5.4x (x86)5,7 Windows-LeistungsindexSuche
Benutzeravatar
Rudi
Beiträge: 143
Registriert: 22.04.2010 18:28
Wohnort: #PB_Any

Re: WinAPI Library (Snippets) (548)

Beitrag von Rudi »

Habe noch ein Geschenk für ts-soft:

Code: Alles auswählen

Structure NOTIFYICONDATA_
  cbSize.l
  CompilerIf #PB_Compiler_Processor = #PB_Processor_x64
    PB_Alignment1.b[4]
  CompilerEndIf
  hWnd.i
  uID.l
  uFlags.l
  uCallbackMessage.l
  CompilerIf #PB_Compiler_Processor = #PB_Processor_x64
    PB_Alignment2.b[4]
  CompilerEndIf
  hIcon.i
  StructureUnion
    szTip.s{64}
    szTipEx.s{128}
  EndStructureUnion
  dwState.l
  dwStateMask.l
  szInfo.s{256}
  StructureUnion
    uTimeout.l
    uVersion.l
  EndStructureUnion
  szInfoTitle.s{64}
  dwInfoFlags.l
  guidItem.GUID
  hBalloonIcon.i
EndStructure 

Procedure SysTrayIconBalloon(uId, hWindow, Title$, Message$, timeOut, flags)
  Protected nId.NOTIFYICONDATA_
  If OSVersion() >= #PB_OS_Windows_Vista
    nId\cbSize = SizeOf(NOTIFYICONDATA_)
  ElseIf OSVersion() >= #PB_OS_Windows_XP
    nId\cbSize = #NOTIFYICONDATA_V3_SIZE
  ElseIf OSVersion() >= #PB_OS_Windows_2000
    nId\cbSize = #NOTIFYICONDATA_V2_SIZE
  Else
    nId\cbSize = #NOTIFYICONDATA_V1_SIZE
  EndIf
  If nId\cbSize
    nId\uId         = uId
    nId\hwnd        = hWindow
    nId\szInfoTitle = Title$
    nId\szInfo      = Message$
    nId\uTimeout    = timeOut
    nId\dwInfoFlags = flags
    nId\uFlags      = #NIF_INFO
    nId\uVersion    = #NOTIFYICON_VERSION+1
    Shell_NotifyIcon_(#NIM_SETVERSION, @nId)
    ProcedureReturn Shell_NotifyIcon_(#NIM_MODIFY, @nId)
  EndIf
  ProcedureReturn #False
EndProcedure

If OpenWindow(0,#PB_Ignore,#PB_Ignore,200,200,"BalloonTip",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
  AddSysTrayIcon(0, WindowID(0), ExtractIcon_(0,"explorer.exe",3))
  SysTrayIconBalloon(0, WindowID(0),"BalloonTip 1!","BalloonTip wechselt in drei Sekunden!", 100, #NIIF_INFO)
  Delay(3000)
  SysTrayIconBalloon(0, WindowID(0),"BalloonTip 2!","BalloonTip verschwindet gleich!", 100, #NIIF_WARNING)
  Delay(3000)
  SysTrayIconBalloon(0, WindowID(0), "", "", 100, #NIIF_NONE)
  Delay(1000)
EndIf
End
Mit freundlichen Grüßen, Rudi!
Win7 (x64)PB 5.4x (x86)5,7 Windows-LeistungsindexSuche
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: WinAPI Library (Snippets) (548)

Beitrag von RSBasic »

Danke :wink:
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) (548)

Beitrag von ts-soft »

Nach soviel Geschenk von mir auch noch einen :mrgreen:

Code: Alles auswählen

Procedure.s FindAssociatedProgram(File.s)
  Protected Result.s = Space(#MAX_PATH)
  Protected Error
  
  Error = FindExecutable_(@File, 0, @Result)
  If Error <= 32
    Select Error
      Case #SE_ERR_FNF
        Debug "The specified file was not found"
      Case #SE_ERR_PNF
        Debug "The specified path is invalid"
      Case #SE_ERR_ACCESSDENIED
        Debug "The specified file cannot be accessed"
      Case #SE_ERR_OOM
        Debug "The system is out of memory or resources"
      Case #SE_ERR_NOASSOC
        Debug "There is no association for the specified file type with an executable file"
      Default
        Debug "Unknown error"
    EndSelect
    ProcedureReturn ""
  EndIf
  ProcedureReturn Result
EndProcedure
File.s mit Pfad!
http://msdn.microsoft.com/en-us/library ... 85%29.aspx

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
Rudi
Beiträge: 143
Registriert: 22.04.2010 18:28
Wohnort: #PB_Any

Re: WinAPI Library (Snippets) (548)

Beitrag von Rudi »

Hier noch die URL zur NOTIFYICONDATA - Struktur:
http://msdn.microsoft.com/en-us/library ... 85%29.aspx

ComputerName setzen:

Code: Alles auswählen

SetComputerName_("Fritz")
;Änderungen werden beim nächsten Neustart des Computers übernommen!
;http://msdn.microsoft.com/en-us/library/ms724930%28VS.85%29.aspx
Datei ausdrucken, mit Fehlerauswertung:

Code: Alles auswählen

EnableExplicit
Global File$

File$ = OpenFileRequester("", "", "Text (*.txt)|*.txt|Alle Dateien (*.*)|*.*", 0)
If File$
  Select ShellExecute_(0, "print", File$, #Null, #Null, #SW_SHOWNORMAL)
    Case 0
      MessageRequester("Fehler", "The operating system is out of memory or resources.", #MB_ICONSTOP|#MB_TOPMOST)
    Case #ERROR_FILE_NOT_FOUND
      MessageRequester("Fehler", "The specified file was not found.", #MB_ICONSTOP|#MB_TOPMOST)
    Case #ERROR_PATH_NOT_FOUND
      MessageRequester("Fehler", "The specified path was not found.", #MB_ICONSTOP|#MB_TOPMOST)
    Case #ERROR_BAD_FORMAT
      MessageRequester("Fehler", "The .EXE file is invalid (non-Win32 .EXE or error in .EXE image).", #MB_ICONSTOP|#MB_TOPMOST)
    Case #SE_ERR_ACCESSDENIED
      MessageRequester("Fehler", "The operating system denied access to the specified file.", #MB_ICONSTOP|#MB_TOPMOST)
    Case #SE_ERR_ASSOCINCOMPLETE
      MessageRequester("Fehler", "The filename association is incomplete or invalid.", #MB_ICONSTOP|#MB_TOPMOST)
    Case #SE_ERR_DDEBUSY
      MessageRequester("Fehler", "The DDE transaction could not be completed because other DDE transactions were being processed.", #MB_ICONSTOP|#MB_TOPMOST)
    Case #SE_ERR_DDEFAIL
      MessageRequester("Fehler", "The DDE transaction failed.", #MB_ICONSTOP|#MB_TOPMOST)
    Case #SE_ERR_DDETIMEOUT
      MessageRequester("Fehler", "The DDE transaction could not be completed because the request timed out.", #MB_ICONSTOP|#MB_TOPMOST)
    Case #SE_ERR_DLLNOTFOUND
      MessageRequester("Fehler", "The specified dynamic-link library was not found.", #MB_ICONSTOP|#MB_TOPMOST)
    Case #SE_ERR_FNF
      MessageRequester("Fehler", "The specified file was not found.", #MB_ICONSTOP|#MB_TOPMOST)
    Case #SE_ERR_NOASSOC
      MessageRequester("Fehler", "There is no application associated with the given filename extension.", #MB_ICONSTOP|#MB_TOPMOST)
    Case #SE_ERR_OOM	
      MessageRequester("Fehler", "There was not enough memory to complete the operation.", #MB_ICONSTOP|#MB_TOPMOST)
    Case #SE_ERR_PNF
      MessageRequester("Fehler", "The specified path was not found.", #MB_ICONSTOP|#MB_TOPMOST)
    Case #SE_ERR_SHARE
      MessageRequester("Fehler", "A sharing violation occurred.", #MB_ICONSTOP|#MB_TOPMOST)
  EndSelect
EndIf

;http://msdn.microsoft.com/en-us/library/bb762153%28VS.85%29.aspx
;http://support.microsoft.com/kb/238245
Win7 (x64)PB 5.4x (x86)5,7 Windows-LeistungsindexSuche
Antworten