CLSID oder IID importieren statt suchen :wink:

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
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

CLSID oder IID importieren statt suchen :wink:

Beitrag von ts-soft »

Naja, geht nicht mit allen, aber sehr viele sind schon in der Lib. Hier der
Beispielcode, der ersichtlich macht, was ich meine, jedenfalls denjenigen,
die schon mit COM was gemacht haben.

Code: Alles auswählen

Import "uuid.lib"
  CLSID_TaskbarList
  IID_ITaskbarList
EndImport

Procedure HideFromTaskBar(hWnd.l, Flag.l)
  Protected TBL.ITaskbarList

  CoInitialize_(0)
  If CoCreateInstance_(@CLSID_TaskBarList, 0, 1, @IID_ITaskBarList, @TBL) = #S_OK
    TBL\HrInit()
    If Flag
      TBL\DeleteTab(hWnd)
    Else
      TBL\AddTab(hWnd)
    EndIf
    TBL\Release()
  EndIf
  CoUninitialize_()

EndProcedure

; DataSection
;   CLSID_TaskBarList:
;   Data.l $56FDF344
;   Data.w $FD6D, $11D0
;   Data.b $95, $8A, $00, $60, $97, $C9, $A0, $90
;   IID_ITaskBarList:
;   Data.l $56FDF342
;   Data.w $FD6D, $11D0
;   Data.b $95, $8A, $00, $60, $97, $C9, $A0, $90
; EndDataSection

If OpenWindow(0, #PB_Ignore, #PB_Ignore, 640, 480, "test")
  HideFromTaskBar(WindowID(0), #True)
  While WaitWindowEvent() <> 16 : Wend  
EndIf
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
PureLust
Beiträge: 1145
Registriert: 21.07.2005 00:02
Computerausstattung: Hab aktuell im Grunde nur noch 'nen Lenovo Yoga 2 Pro im Einsatz.
Wohnort: am schönen Niederrhein

Beitrag von PureLust »

Hi Thomas,

au mann ... bei Deine Codes komm ich mir häufig soooo dumm und unwissend vor. :cry:
Könntest Du für Anfänger oder auch geistig scheinbar unbewaffnete Leute wie mich vielleicht noch kurz dazu schreiben was CLSID oder IID überhaupt ist und wofür man Deinen Code einsetzen könne? :oops:

ThanX und Gruß,
PureLust.
[Dynamic-Dialogs] - komplexe dynamische GUIs einfach erstellen
[DeFlicker] - Fenster flimmerfrei resizen
[WinFX] - Window Effekte (inkl. 'durchklickbares' Window)
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag von edel »

Benutzeravatar
PureLust
Beiträge: 1145
Registriert: 21.07.2005 00:02
Computerausstattung: Hab aktuell im Grunde nur noch 'nen Lenovo Yoga 2 Pro im Einsatz.
Wohnort: am schönen Niederrhein

Beitrag von PureLust »

Ich nehme mal an das war jetzt für mich oder andere Unwissende bestimmt.
Forensuche hat geschrieben:Die Suche hat 55 Ergebnisse ergeben.
Meintest Du nun einen bestimmten davon?
Denn für jemanden wie mich der keinen Schimmer hat worum es gehen könnte sehen die alle nach böhmischen Dörfern aus. :roll:
[Dynamic-Dialogs] - komplexe dynamische GUIs einfach erstellen
[DeFlicker] - Fenster flimmerfrei resizen
[WinFX] - Window Effekte (inkl. 'durchklickbares' Window)
Benutzeravatar
MVXA
Beiträge: 3823
Registriert: 11.09.2004 00:45
Wohnort: Bremen, Deutschland
Kontaktdaten:

Beitrag von MVXA »

Von OOP, ActiveX und dem ganzen Schmarn hast du sicher schon gehört.
Windows bietet Programmen ein Interface um diese Objekte mit anderen
Programmen zu teilen. Bestes Beispiel hierfür ist das Browsergadget.

Um aber an dieses Objekt wie das Browsergadget zu kommen, muss man
wissen wie es heißt. Ein einfacher Name geht nicht, da die Gefahr
einer Kollision mit einem anderen Objekt zu groß ist. Deswegen
bemüht man sich sog. CLSID. Bei CLSIDs ist die Gefahr einer Kollision
sehr gering. Der Preis für diese Sicherheit ist relativ hoch. Die
CLSIDs belegen mehr Speicher als in einer Long-Variable gefasst werden
kann.

Um diese CLSIDs dennoch in PureBasic nutzen zu können, behelfen sich
viele der Möglichkeit Datenstränge mit dem Schlüsselwort Data in die
Binarys mit einzubinden. Allerdings muss man selbst erstmal den Wert
der CLSID ermitteln und das ist gar nicht mal so einfach. TS-Soft hat
aber entdeckt, dass die CLSIDs sich auch in den *.lib Dateien befinden,
die man ja seit (nicht mehr so) neusten mit PureBasic im Linkprozess
mit einbinden kann und ist so nett und teilt sein Wissen mit einem
kleinen Beispiel mit uns.

Wenn ich mich in einem Punkt irren sollte, bitte nicht schlagen, wollt nur helfen :)
Bild
Benutzeravatar
PureLust
Beiträge: 1145
Registriert: 21.07.2005 00:02
Computerausstattung: Hab aktuell im Grunde nur noch 'nen Lenovo Yoga 2 Pro im Einsatz.
Wohnort: am schönen Niederrhein

Beitrag von PureLust »

@MVXA:

Ahhhh .... nun ist es einiges klarer.
Das war echt mal eine gute und leicht verständliche Erklärung.
(Wenn wir jetzt bei ICQ wäre würd' ich Dir ne ganz bestimmter tZer rüberschicken. :mrgreen: )

Also vielen Dank für die Mühe und die gute Beschreibung und natürlich auch Dank an Thomas für den (dank MVXA nun auch für mich verständlichen ;) und) nützlichen Code. :allright:
[Dynamic-Dialogs] - komplexe dynamische GUIs einfach erstellen
[DeFlicker] - Fenster flimmerfrei resizen
[WinFX] - Window Effekte (inkl. 'durchklickbares' Window)
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

Beitrag von ts-soft »

>> und) nützlichen Code. :allright:
Es geht hierbei weniger um den Code, als um die Tatsache, das
sich sehr viele dieser CLISD, IID, GUID usw. (ein paar tausend)
aus der UUID.lib importieren lassen, so das man deren Wert nicht
suchen oder in Datas tippen muß.

Zumindest die meisten, unmittelbar ans OS gebundenen Classen
sind enthalten: Shell, Browser, HTML usw. (vor allem auch Treiberclassen)
CLISD zu AgentControl, MediaPlayer usw. findet man dort aber nicht.
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
PureLust
Beiträge: 1145
Registriert: 21.07.2005 00:02
Computerausstattung: Hab aktuell im Grunde nur noch 'nen Lenovo Yoga 2 Pro im Einsatz.
Wohnort: am schönen Niederrhein

Beitrag von PureLust »

ts-soft hat geschrieben:Es geht hierbei weniger um den Code, ...
Beim schreiben des Posts war ich bereits mit mir am hadern, ob ich nun "Code" oder "Tip" schreiben sollte.
"Tip" hätte den Kern vermutlich eher getroffen, hatte mich dann aber doch für "Code" entschieden, weil Du ja auch noch ein Anwendungsbeispiel beigepackt hattest.

Auf jeden Fall vielen Dank dafür - sobald ich mal tiefer in diese Gefilde vorstoße, werde ich dass mit Sicherheit gut gebrauchen können. :allright:
[Dynamic-Dialogs] - komplexe dynamische GUIs einfach erstellen
[DeFlicker] - Fenster flimmerfrei resizen
[WinFX] - Window Effekte (inkl. 'durchklickbares' Window)
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

Beitrag von ts-soft »

Nochmal zur Verdeutlichung:
Es werden Variablen vom Typ CLSID bzw. IID importiert. Diese Strukturen
sind in PB vordefiniert.

Folgenden Code mal testen und mit auskommentierter DataSection im ersten
Code vergleichen:

Code: Alles auswählen

Import "uuid.lib"
  CLSID_TaskbarList
  IID_ITaskbarList
EndImport

Define *myCLSID.CLSID
*myCLSID = @CLSID_TaskbarList

Define *myIID.IID
*myIID = @IID_ITaskbarList

Define lpsz.s{76}
Define i.l

Debug "CLSID_TaskbarList"
Debug "----------------"
Debug "Data: "
Debug "$" + Hex(*myCLSID\Data1)
Debug "$" + Hex(*myCLSID\Data2 & $FFFF)
Debug "$" + Hex(*myCLSID\Data3 & $FFFF)

For i = 0 To 7
  Debug "$" + Hex(*myCLSID\Data4[i] & $FF)
Next
Debug ""
Debug "String: " + PeekS(@lpsz, StringFromGUID2_(*myCLSID, @lpsz, 76), #PB_Unicode)

Debug ""
Debug "IID_ITaskbarList"
Debug "----------------"
Debug "Data: "
Debug "$" + Hex(*myIID\Data1)
Debug "$" + Hex(*myIID\Data2 & $FFFF)
Debug "$" + Hex(*myIID\Data3 & $FFFF)

For i = 0 To 7
  Debug "$" + Hex(*myIID\Data4[i] & $FF)
Next
Debug ""
Debug "String: " + PeekS(@lpsz, StringFromGUID2_(*myIID, @lpsz, 76), #PB_Unicode)
Debug ""
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
Antworten