Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

WinExec,CreateProcess,ExitWindowsEx,SetSystemPowerState-wie?

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Windows-spezifische Fragen
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
noop



Anmeldungsdatum: 04.05.2005
Beiträge: 259

BeitragVerfasst am: 15.09.2006, 12:25    Titel: WinExec,CreateProcess,ExitWindowsEx,SetSystemPowerState-wie? Antworten mit Zitat

Hallo,

Ich krieg die folgenden Funktionen der WinAPI nicht auf die Reihe.

WinExec:tut nix, keine Fehlermeldung,Fehlerrückgabe der Funktion(x=2)
Code:

#include "windows.bi"
dim path as zstring * 22
path="C:\Windows\notepad.exe"
x=winexec(path,SW_SHOW)
print x
sleep


CreateProcess: Bricht mit Windows-Fehlermeldung ab.
Code:

#include "windows.bi"
dim prog as zstring * 22
prog="C:\Windows\notepad.exe"
CreateProcess(prog, 0,0,0,0,CREATE_NEW_CONSOLE,null,prog,0,0)


ExitWindowsEx:
Funzt net:tut nix,Keine Fehlermeldung
Code:

#include once "windows.bi"
ExitWindowsEx( EWX_REBOOT or EWX_FORCE or EWX_FORECIFHUNG,null)

Dagegen funzt:
Code:

#include once "windows.bi"
ExitWindowsEx( EWX_LOGOFF or EWX_FORCE or EWX_FORECIFHUNG,null)


SetSystemPowerState: Keine Fehlermeldung
Code:

#include "windows.bi"
fSuspend=1
fForce=0
SetSystemPowerState(fSuspend,fForce)

Tut einfach nix.


Kann mir einer sagen, wo mein Grundproblem liegt?
Ich rall einfach nicht warum die nicht funzen.
Ich übergebe ja schließlich so wie es in den .bi's oder der win32.hlp steht...


mfg noop
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
volta



Anmeldungsdatum: 04.05.2005
Beiträge: 1874
Wohnort: D59192

BeitragVerfasst am: 15.09.2006, 13:14    Titel: Antworten mit Zitat

Hi,
aus der winuser.bi
declare function WinExec (byval as LPCSTR, byval as UINT) as UINT
versuch mal:
EDIT\
Code:
#include "windows.bi"
dim pad as LPCSTR 'Zstring Ptr
dim x as UInt
pad=@"C:\Windows\notepad.exe"
x=winexec(pad,SW_SHOW)
print x
einfacher ist aber
Code:
#include "windows.bi"
dim pad as string
dim x as UInt
pad="C:\Windows\notepad.exe"
x=winexec(pad,SW_SHOW)
print x
sleep

schätze bei den anderen Funktionen sind es ähnliche Probleme.
Ich habe es aber nicht ausprobieren können.
Manchmal werden erst durch
Code:
#define WIN_INCLUDEALL 'alle bi-Dateien für WinAPI laden

die bi-Dateien geladen die man für bestimmte API - Funktionen braucht.
_________________
Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
noop



Anmeldungsdatum: 04.05.2005
Beiträge: 259

BeitragVerfasst am: 16.09.2006, 11:47    Titel: Antworten mit Zitat

Also das mit WinExec funzt schonmal.thx
Beim anderen übergebe ich glaub ich eine falschen Wert, sonst würde Windows wohl nicht meckern.
Warum Reboot und Hibernate aber nicht klappen, versteh ich net...
Mit allen bi's includen habe ich ausprobiert.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
volta



Anmeldungsdatum: 04.05.2005
Beiträge: 1874
Wohnort: D59192

BeitragVerfasst am: 16.09.2006, 12:51    Titel: Antworten mit Zitat

Hi,
ein ReBoot scheint nicht auf jeder WinVersion so einfach zu funktionieren
siehe hier
_________________
Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
noop



Anmeldungsdatum: 04.05.2005
Beiträge: 259

BeitragVerfasst am: 16.09.2006, 13:14    Titel: Antworten mit Zitat

Ok, dann werde ich mich wohl mal mit den Rechten beschäftigen.
THX für den Link.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
noop



Anmeldungsdatum: 04.05.2005
Beiträge: 259

BeitragVerfasst am: 18.09.2006, 11:04    Titel: Antworten mit Zitat

Also, i'm stuck, wenn ich das mal so sagen kann...

Code:

Option Explicit
#include once "windows.bi"

declare sub AdjustToken()

call AdjustToken

Sub AdjustToken()
Dim hdlProcessHandle As zstring ptr
Dim hdlTokenHandle As zstring ptr
Dim tmpLuid As LUID
Dim tkp As TOKEN_PRIVILEGES
Dim tkpNewButIgnored As TOKEN_PRIVILEGES
Dim lBufferNeeded As Long

'Use the GetCurrentProcess function to set the hdlProcessHandle
'variable.
hdlProcessHandle = GetCurrentProcess()

         OpenProcessToken hdlProcessHandle,(TOKEN_ADJUST_PRIVILEGES Or TOKEN_QUERY), hdlTokenHandle

         'Get the LUID for shutdown privilege
         LookupPrivilegeValue "", "SeShutdownPrivilege", tmpLuid

         tkp.PrivilegeCount = 1    ' One privilege to set
         tkp.TheLuid = tmpLuid
         tkp.Attributes = SE_PRIVILEGE_ENABLED

         'Enable the shutdown privilege in the access token of this process
         AdjustTokenPrivileges (hdlTokenHandle,False,tkp,Len(tkpNewButIgnored),tkpNewButIgnored,lBufferNeeded)

ExitWindowsEx (EWX_SHUTDOWN Or EWX_FORCE,0)
end sub


Fehlermeldungen:
Zitat:

Command executed:
"fbc.exe" "FBIDETEMP.bas"

Compiler output:
FBIDETEMP.bas(23) : error 56: Type mismatch, at parameter 3 of LOOKUPPRIVILEGEVALUE()
LookupPrivilegeValue "", "SeShutdownPrivilege", tmpLuid
^
FBIDETEMP.bas(26) : error 19: Element not defined, TheLuid
tkp.TheLuid = tmpLuid
^
/FBIDETEMP.bas(27) : error 19: Element not defined, Attributes
tkp.Attributes = SE_PRIVILEGE_ENABLED
^
FBIDETEMP.bas(30) : error 56: Type mismatch, at parameter 3 of ADJUSTTOKENPRIVILEGES()
AdjustTokenPrivileges (hdlTokenHandle,False,tkp,Len(tkpNewButIgnored),tkpNewButIgnored,lBufferNeeded)
^

Results:
Compilation failed

System:
FBIde: 0.4.6
fbc: FreeBASIC Compiler - Version 0.17 for win32 (target:win32)
OS: Windows XP (build 2600, Service Pack 2)



Weiter komm ich einfach net.
In der Win32.hlp steht:
Zitat:

BOOL LookupPrivilegeValue(
LPCTSTR lpSystemName,// address of string specifying the system
LPCTSTR lpName, // address of string specifying the privilege
PLUID lpLuid // address of locally unique identifier
);

Also er meckert ja wegen dem dritten Parameter.
Also such ich nach "PLUID" und das kommt dabei raus.
Zitat:

PLUID Pointer to a locally unique identifier (LUID).

LUID Locally unique identifier.

Also denke ich mir
Code:

dim tmpLuid as LUID

womit er aber offensichtlich ein Problem hat...

Kann mir einer damit weiterhelfen?


mfg noop


Edit:
Quelle1: Link von volta
Quelle2: weiterführender Link
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
volta



Anmeldungsdatum: 04.05.2005
Beiträge: 1874
Wohnort: D59192

BeitragVerfasst am: 18.09.2006, 12:27    Titel: Antworten mit Zitat

Zitat:
In der Win32.hlp steht:
Zitat:
BOOL LookupPrivilegeValue(
LPCTSTR lpSystemName,// address of string specifying the system
LPCTSTR lpName, // address of string specifying the privilege
PLUID lpLuid // address of locally unique identifier
);

ok, aber wie und wo steht es in einer bi-Datei von FB?
Der Typ PLUID ist als Pointer definiert, also kannst du vermutlich
Code:
LookupPrivilegeValue "", "SeShutdownPrivilege", @tmpLuid

schreiben.
TOKEN_PRIVILEGES scheint auch als UDT definiert, aber .TheLuid und .Attributes scheinen kein Element daraus zu sein (such mal in den bi-Dateien nach TOKEN_PRIVILEGES welche Elemente dort definiert sind?)
ebenso nach AdjustTokenPrivileges, wird als 3 Parameter der Typ TOKEN_PRIVILEGES gefordert?
Das Problem bei mir ist auch immer, dass man beim umsetzen aus VB | C immer erst die Definitionen von FB in den bi-Dateien nachsuchen muss.
Gruß Volta
_________________
Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
noop



Anmeldungsdatum: 04.05.2005
Beiträge: 259

BeitragVerfasst am: 21.09.2006, 03:47    Titel: Antworten mit Zitat

Hi,
In der bi steht "PTOKEN_PRIVILEGES"
Das kommt bei mir raus und läuft ohne Fehlermeldung durch...bloß tut sich auch nichts...
Problem ist das ich nicht weiß wie ich den Variablen den Wert zuteilen soll. Den Typ hoff ich habe ich jetzt richtig(immerhin keine Fehlermeldung mehr)
Code:

Option Explicit
#include once "windows.bi"

declare sub AdjustToken()
screen 14
call AdjustToken
sleep
Sub AdjustToken()
Dim hdlProcessHandle As zstring ptr
Dim hdlTokenHandle As zstring ptr
Dim tmpLuid As LUID
Dim tkp As pTOKEN_PRIVILEGES
Dim tkpNewButIgnored As pTOKEN_PRIVILEGES
Dim lBufferNeeded As long ptr

'Use the GetCurrentProcess function to set the hdlProcessHandle
'variable.
hdlProcessHandle = GetCurrentProcess()

         OpenProcessToken hdlProcessHandle,(TOKEN_ADJUST_PRIVILEGES Or TOKEN_QUERY), hdlTokenHandle

         'Get the LUID for shutdown privilege
         LookupPrivilegeValue "", "SeShutdownPrivilege", @tmpLuid
TYPE TKP
         PrivilegeCount AS dword    ' One privilege to set
         Privileges as LUID_AND_ATTRIBUTES
         'TheLuid AS LUID
         
END TYPE
'PrivilegeCount=1
'TheLuid=@tmpLuid
'SE_PRIVILEGE_ENABLED
'@tkp.Privileges

'typedef struct _LUID_AND_ATTRIBUTES { // luaa
'    LUID   Luid;
'    DWORD  Attributes;
'} LUID_AND_ATTRIBUTES;


         'Enable the shutdown privilege in the access token of this process
         AdjustTokenPrivileges (hdlTokenHandle,False,tkp,Len(tkpNewButIgnored),tkpNewButIgnored,lBufferNeeded)
ExitWindowsEx (EWX_SHUTDOWN Or EWX_FORCE,0)
end sub


Ich bin allerdings ab morgen bis zum 9.10 im Urlaub.
Dann werde ich aber weiteroprobieren.


mfg noop

Edit:Da dieses Thema doch einiges an Zeit beansprucht und ich die bis ca. Weihnachten nicht habe verschiebe ich es bis dahin. Ich werde mich eher leichteren(erscheinenden;)) Problemen widmen.
mfg noop
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Windows-spezifische Fragen Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz