|
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
noop
Anmeldungsdatum: 04.05.2005 Beiträge: 259
|
Verfasst am: 15.09.2006, 13:25 Titel: WinExec,CreateProcess,ExitWindowsEx,SetSystemPowerState-wie? |
|
|
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 |
|
|
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1875 Wohnort: D59192
|
Verfasst am: 15.09.2006, 14:14 Titel: |
|
|
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 |
|
|
noop
Anmeldungsdatum: 04.05.2005 Beiträge: 259
|
Verfasst am: 16.09.2006, 12:47 Titel: |
|
|
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 |
|
|
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1875 Wohnort: D59192
|
Verfasst am: 16.09.2006, 13:51 Titel: |
|
|
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 |
|
|
noop
Anmeldungsdatum: 04.05.2005 Beiträge: 259
|
Verfasst am: 16.09.2006, 14:14 Titel: |
|
|
Ok, dann werde ich mich wohl mal mit den Rechten beschäftigen.
THX für den Link. |
|
Nach oben |
|
|
noop
Anmeldungsdatum: 04.05.2005 Beiträge: 259
|
Verfasst am: 18.09.2006, 12:04 Titel: |
|
|
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 |
|
|
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1875 Wohnort: D59192
|
Verfasst am: 18.09.2006, 13:27 Titel: |
|
|
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 |
|
|
noop
Anmeldungsdatum: 04.05.2005 Beiträge: 259
|
Verfasst am: 21.09.2006, 04:47 Titel: |
|
|
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 |
|
|
|
|
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.
|
|