Seite 28 von 43

Re: WinAPI Library (Snippets) (548)

Verfasst: 13.01.2011 22:34
von Nino
ts-soft hat geschrieben: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)
  [...]
Cool, sowas brauche ich gerade. :)
FindExecutable_() kannte ich gar nicht ... da muss ich mir die Information nicht aus der Registry "herauspicken".
Vielen Dank!

Grüße, Nino

Re: WinAPI Library (Snippets) (548)

Verfasst: 14.01.2011 00:04
von RSBasic
@ts-soft & @Rudi
Cool, danke :allright:

Re: WinAPI Library (Snippets) (548)

Verfasst: 15.01.2011 03:32
von ts-soft
Einer geht noch ...

Code: Alles auswählen

; http://msdn.microsoft.com/en-us/library/bb773836%28v=VS.85%29.aspx

EnableExplicit

Prototype SHMessageBoxCheck(hWnd, Text.s, Caption.s, uType, iDefault, RegVal.s)
Procedure MessageRequesterCheck(Titel.s, Text.s, RegVal.s, Flags = 0)
  Protected hDLL = OpenLibrary(#PB_Any, "Shlwapi.dll")
  Protected SHMessageBoxCheck.SHMessageBoxCheck
  Protected result
 
  CompilerIf #PB_Compiler_Unicode
    SHMessageBoxCheck = GetFunctionEntry(hDLL, 191)
  CompilerElse
    SHMessageBoxCheck = GetFunctionEntry(hDLL, 185)
  CompilerEndIf
  If SHMessageBoxCheck
    result = SHMessageBoxCheck(0, Text, Titel, Flags, #PB_Ignore, RegVal)
  Else
    result = MessageRequester(Text, Titel, Flags)
  EndIf
  CloseLibrary(hDLL)
  ProcedureReturn result
EndProcedure


Select MessageRequesterCheck("Fehler:", "Du bist zu blöd zum Mäuse melken", "{9937FEAC-4F3B-44F0-9D96-20D8F1784479}", #MB_YESNO | #MB_ICONERROR)
  Case #PB_MessageRequester_Yes
    Debug "Siehst es ja wenigstens ein"
  Case #PB_MessageRequester_No
    Debug "Na dann melk mal"
  Case #PB_Ignore
    Debug "Ach, haste mich abgeschaltet ;)"
EndSelect
// geändert

Re: WinAPI Library (Snippets) (548)

Verfasst: 15.01.2011 14:03
von RSBasic
@ts-soft
Wow, das ist ja geil. :allright:
Anhand der Class ID kann ich ohne großen Aufwand automatisch solche Meldungen erstellen, die der Anwender ausblenden kann, ohne dass ich extra eine Abfrage erstellen müsste, ob die Meldung bei der nächsten Ausführung angezeigt werden soll.
Danke für den Code :allright:

PS: Um das automatische Ausblenden einer Message zu entfernen, müsste man nur diese Zeichenfolge, die durch das Aktivieren der Option für das dauerhafte Ausblenden erstellt wurde, unter folgendem Pfad löschen:
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\DontShowMeThisDialogAgain\{9937FEAC-4F3B-44F0-9D96-20D8F1784479}:NO
Legende: Pfad, Zeichenfolge, Wert

Diese Zeichenfolge müsste man dann manuell mit der WinAPI RegDeleteKey/Ex_() entfernen, oder gibt es da ein Unregister-Befehl für das Aufheben der dauerhafte Ausblendung der Message?

Re: WinAPI Library (Snippets) (548)

Verfasst: 15.01.2011 14:22
von ts-soft
Unregister Befehl gibts wohl nicht. Nur den RegVal Schlüssel löschen. Dieser Schlüssel sollte einmalig sein,
also am besten eine GUID nehmen:

Code: Alles auswählen

CompilerIf Defined(GUID, #PB_Structure) = #False
Structure GUID
  Data1.l
  Data2.w
  Data3.w
  Data4.b[8]
EndStructure
CompilerEndIf

CompilerIf #PB_Compiler_OS = #PB_OS_Linux
; requires uuid-dev
ImportC "-luuid"
  uuid_generate(*out.GUID)
  uuid_unparse_upper(*uu.GUID, *out)
EndImport
CompilerEndIf

Procedure.s MakeGUID()
  Protected guid.GUID, result.s
  
  CompilerSelect #PB_Compiler_OS
    CompilerCase #PB_OS_Linux
      result = Space(36)
      uuid_generate(@guid)
      uuid_unparse_upper(@guid, @result)
      result = "{" + PeekS(@result, -1, #PB_Ascii) + "}"        
    CompilerCase #PB_OS_Windows
      Protected lpsz.s{76}
      If CoCreateGuid_(@guid) = #S_OK
        result = PeekS(@lpsz, StringFromGUID2_(guid, @lpsz, 76), #PB_Unicode)
      EndIf      
    CompilerDefault
    
  CompilerEndSelect
  
  ProcedureReturn result
EndProcedure

Debug MakeGUID()
Und den Wert von iDefault setzt man sinniger Weise nicht auf 4711 (echt Kölsche Stinkwater), sondern auf
den Wert, der dann Defaultmässig ausgeführt wird, also in diesem Falle auf 6 oder 7!

Re: WinAPI Library (Snippets) (548)

Verfasst: 02.06.2011 18:36
von RSBasic
Es ist nun endlich vollbracht, es gibt jetzt wieder eine Online-Version: http://www.rsbasic.de/winapi-library/

Viel Spaß. :)

Re: WinAPI Library (Snippets) (548)

Verfasst: 03.06.2011 07:08
von rolaf
RSBasic hat geschrieben:Es ist nun endlich vollbracht, es gibt jetzt wieder eine Online-Version: http://www.rsbasic.de/winapi-library/

Viel Spaß. :)
Großartig, sauber gemacht, habe ich gebookmarkt. :allright:

Re: WinAPI Library (Snippets) (596)

Verfasst: 03.06.2011 15:47
von RSBasic
WinAPI Library 1.2.3 wurde veröffentlicht (48 neue Beispielcodes)

Hinzugefügt:


WinAPI Library-Programm:
  • Einstellungsmöglichkeit für Zeilenumbruch

Benutzer: ButtonGadget: Dateien: Dialoge: EditorGadget: Gadgets: Internet: Konsole: Laufwerke: ListIconGadget: Menü: OpenWindow: PanelGadget: Popup-Menü: Prozesse: Sonstige: SpinGadget: StringGadget:
Online: http://www.rsbasic.de/winapi-library
Offline: Updaten ;)

Re: WinAPI Library (Snippets) (632)

Verfasst: 04.06.2011 13:22
von RSBasic

Re: WinAPI Library (Snippets) (632)

Verfasst: 15.07.2011 23:57
von STARGÅTE
Weil ich es noch nicht gefunden habe, hier mal n kleiner Codeschnipsel von mir:

Code: Alles auswählen

Procedure.s ExpandEnvironmentString(String.s)
	Protected ExpandString.s, Length.i
	Length = ExpandEnvironmentStrings_(@String, #Null, #Null)
	ExpandString = Space(Length)
	ExpandEnvironmentStrings_(@String, @ExpandString, Length)
	ProcedureReturn ExpandString
EndProcedure

Debug ExpandEnvironmentString("%ProgramFiles%")
Debug ExpandEnvironmentString("%HomeDrive%%HomePath%")
Debug ExpandEnvironmentString("%AppData%\Meine Firma")