WinAPI Library (Snippets) (1163 Beispielcodes)

Windowsspezifisches Forum , API ,..
Beiträge, die plattformübergreifend sind, gehören ins 'Allgemein'-Forum.
Benutzeravatar
neotoma
Beiträge: 202
Registriert: 13.09.2004 16:16
Kontaktdaten:

Re: WinAPI Library (Snippets) (493)

Beitrag von neotoma »

Beschäftige mich gerade mit dem EditorGadget.
(Wobei mir Deine WinAPI schon sehr geholfen hat!)

SetZoom/GetZoom in Prozent, evtl. als Erweiterung zu dem Zoom-Eintrag in der WinAPI.

Code: Alles auswählen

Procedure.f Editor_GetZoomPct(Gadget)
  Protected wParam.l, hParam.l  , result.l
  result.l =  SendMessage_(GadgetID(Gadget),#EM_GETZOOM,@wParam, @hParam)
  
  If wParam=0 And hParam = 0   ; No Zoom
    ProcedureReturn 100
  EndIf
  
  ProcedureReturn (wParam/hParam *100)
EndProcedure 

Procedure Editor_SetZoomPct(Gadget,zoom.l)
  Protected result.l
  result.l =  SendMessage_(GadgetID(Gadget),#EM_SETZOOM,zoom,10)
EndProcedure 


If OpenWindow(0,0,0,500,250,"Window",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
  EditorGadget(1,10,10,480,200,0)
  TrackBarGadget(2,10,220,480,20,1,100,0) 
  AddGadgetItem(1,-1,"Teststring",0,0)
  SetWindowTitle(0, "Window Zoom="+StrF(Editor_GetZoomPct(1),0)+"%")     
    
Repeat
EventID=WaitWindowEvent()
If EventID=#PB_Event_Gadget
  Select EventGadget()
   Case 2
     Editor_SetZoomPct(1, GetGadgetState(2))
     SetWindowTitle(0, "Window Zoom="+StrF(Editor_GetZoomPct(1),0)+"%")     
  EndSelect
EndIf
Until EventID = #PB_Event_CloseWindow
EndIf
Gruß,
Mike
Alle Rechtschreibfehler unterliegen der GPL und dürfen frei kopiert und modifiziert werden.
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: WinAPI Library (Snippets) (493)

Beitrag von RSBasic »

Hallo neotoma,


stimmt, das Ändern des Zoom-Faktors ist in der Library vorhanden, aber das Ermitteln des Zoom-Faktors noch nicht.
Danke für das Posten des Beispielcodes :allright:
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
neotoma
Beiträge: 202
Registriert: 13.09.2004 16:16
Kontaktdaten:

Re: WinAPI Library (Snippets) (493)

Beitrag von neotoma »

Hi RSBasic,

hier habe ich noch einen.
Indent/Outdent auf Zentimeterbasis.

Code: Alles auswählen

Procedure.l Twip(mm.f)
  ProcedureReturn Int(mm * (1440/25.4))
EndProcedure

Procedure Editor_Indent(Gadget)
  format.PARAFORMAT2
  format\cbSize = SizeOf(PARAFORMAT2)
  ;Read first
  SendMessage_(GadgetID(Gadget), #EM_GETPARAFORMAT, 0, @format)
  
  
  format\dxStartIndent = Twip(10)     ; Ten Milimeters right
  format\dwMask = #PFM_OFFSETINDENT
  SendMessage_(GadgetID(Gadget), #EM_SETPARAFORMAT, 0, @format)
EndProcedure 

Procedure Editor_Outdent(Gadget)
  format.PARAFORMAT2
  format\cbSize = SizeOf(PARAFORMAT2)
  ;Read first
  SendMessage_(GadgetID(Gadget), #EM_GETPARAFORMAT, 0, @format)
  
  format\dxStartIndent = 0-Twip(10)   ; Ten Milimeters left
  format\dwMask = #PFM_OFFSETINDENT
  SendMessage_(GadgetID(Gadget), #EM_SETPARAFORMAT, 0, @format)
EndProcedure 


If OpenWindow(0,0,0,500,250,"Window",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
  EditorGadget(1,10,10,480,200,0)
  ButtonGadget(2,10,220,100,20,"Indent")
  ButtonGadget(3,390,220,100,20,"Outdent")
  
  For a=1 To 10
    AddGadgetItem(1,-1,"Teststring",0,0)
  Next
  
Repeat
EventID=WaitWindowEvent()
If EventID=#PB_Event_Gadget
  Select EventGadget()
    Case 2
      SendMessage_(GadgetID(1),#EM_SETSEL,0,-1)   ; Select all      
      Editor_Indent(1)
      SendMessage_(GadgetID(1),#EM_SETSEL,0,0)    ;Deselect all
    Case 3
      SendMessage_(GadgetID(1),#EM_SETSEL,0,-1)   ; Select all      
      Editor_Outdent(1)
      SendMessage_(GadgetID(1),#EM_SETSEL,0,0)    ;Deselect all      
  EndSelect
EndIf
If EventID=#PB_Event_CloseWindow
  Quit=1
EndIf
Until Quit=1
EndIf
Gruß,
Mike
Alle Rechtschreibfehler unterliegen der GPL und dürfen frei kopiert und modifiziert werden.
Benutzeravatar
neotoma
Beiträge: 202
Registriert: 13.09.2004 16:16
Kontaktdaten:

Re: WinAPI Library (Snippets) (493)

Beitrag von neotoma »

GetParentPID - Die PID des aufrufenden Processes ermitteln:

Code: Alles auswählen

Structure PROCESS_BASIC_INFORMATION
    ExitStatus.i
    PebBaseAddress.i
    AffinityMask.i
    BasePriority.i
    UniqueProcessId.i
    InheritedFromUniqueProcessId.i
EndStructure
  

Procedure.i GetParentPid( hProcess)
  Protected pbi.PROCESS_BASIC_INFORMATION
  

  ; Query the ProcessBasicInformation(0)
  ZwQueryInformationProcess_(hProcess, 0, @pbi, SizeOf(PROCESS_BASIC_INFORMATION), 0);
  ProcedureReturn pbi\InheritedFromUniqueProcessId;
EndProcedure 


;Example:
dwParentId.i = GetParentPid(GetCurrentProcess_());
Debug("Parent Process:" + Str(dwParentId))
Gruß,
Mike
Zuletzt geändert von neotoma am 14.06.2010 11:32, insgesamt 1-mal geändert.
Alle Rechtschreibfehler unterliegen der GPL und dürfen frei kopiert und modifiziert werden.
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: WinAPI Library (Snippets) (493)

Beitrag von RSBasic »

Hallo neotoma,

neotoma hat geschrieben:Indent/Outdent auf Zentimeterbasis.
Vielen lieben Dank für dein Code, sehr interessant, danke :)

--------------------------------------------------

Das Ermitteln der PID-Nummer gibt es schon in der WinAPI Library:
http://www.rsbasic.de/index.php?option= ... &Itemid=59 / http://www.rsbasic.de/index.php?option= ... &Itemid=59 / http://www.rsbasic.de/index.php?option= ... &Itemid=59

Trotzdem danke fürs Posten des Codes^^
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
neotoma
Beiträge: 202
Registriert: 13.09.2004 16:16
Kontaktdaten:

Re: WinAPI Library (Snippets) (493)

Beitrag von neotoma »

Hi RSBasic,

diese Codes ermitteln aber nicht den Vater-Prozess. Also von welchem Prozess man aufgerufen wurde.
Das ist noch nicht in der WinAPI.
Ist jedooch Deine Entscheidung.

Gruß,
Mike
Alle Rechtschreibfehler unterliegen der GPL und dürfen frei kopiert und modifiziert werden.
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Re: WinAPI Library (Snippets) (493)

Beitrag von edel »

@neotoma
Danke fuer den Code, aber bei der Struktur PROCESS_BASIC_INFORMATION muss Integer statt Long benutzt werden.
Benutzeravatar
neotoma
Beiträge: 202
Registriert: 13.09.2004 16:16
Kontaktdaten:

Re: WinAPI Library (Snippets) (493)

Beitrag von neotoma »

edel hat geschrieben:@neotoma
Danke fuer den Code, aber bei der Struktur PROCESS_BASIC_INFORMATION muss Integer statt Long benutzt werden.
Danke für die Info. Habe es geändert.

Gruß,
Mike
Alle Rechtschreibfehler unterliegen der GPL und dürfen frei kopiert und modifiziert werden.
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: WinAPI Library (Snippets) (493)

Beitrag von RSBasic »

Hallo neotoma,


sorry, dass ich erst jetzt schreibe.
Ich find dein Code gerade sehr nützlich, weil ich den Code jetzt brauch :mrgreen:
Vielen lieben Dank fürs Schreiben und Posten :allright:
Jetzt verstehe ich auch, was du mit Vater-PID meintest.
Sehr nützlich dein Code, werd ich auf jeden Fall in meiner Library hinzufügen.
Danke nochmal :allright:

Hab jetzt schon insgesamt 54 neue WinAPI-Codes in meiner ToDo-Liste, die ich "irgendwann" ( :oops: ) abarbeiten werde.
Wenn ich mein neues Projekt "PureBasic Updater" fertig gestellt habe, dann werde ich anfangen, die ganzen neuen nützlichen Codes hinzuzufügen.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: WinAPI Library (Snippets) (493)

Beitrag von RSBasic »

neotoma hat geschrieben:GetParentPID - Die PID des aufrufenden Processes ermitteln:[...]
Gibt es auch eine Möglichkeit, das Handle des aufrufenden Prozesses zu ermitteln?
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Antworten