.exe -Datei vor Aufruf sperren
Moderator: Moderatoren
-
- Rekursionen-Architekt
- Beiträge: 440
- Registriert: Mo, 30. Mai 2011 15:06
- Danksagung erhalten: 1 Mal
.exe -Datei vor Aufruf sperren
Hi, gibts eine Möglichkeit den Aufruf einer .exe-Datei im Hintergrund abzufangen und zu sperren?
Also sozusagen einen Prozess im Hintergrund laufen zu lassen, der jeden Aufruf abfängt und überprüft, ob das Programm zugelassen ist.
Also sozusagen einen Prozess im Hintergrund laufen zu lassen, der jeden Aufruf abfängt und überprüft, ob das Programm zugelassen ist.
- AUGE_OHR
- Marvin
- Beiträge: 12909
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
Re: .exe -Datei vor Aufruf sperren
wenn du den Namen des EXE weisst kannst du die Application im Taskmanager schliessen.Benz hat geschrieben:Hi, gibts eine Möglichkeit den Aufruf einer .exe-Datei im Hintergrund abzufangen und zu sperren?
Also sozusagen einen Prozess im Hintergrund laufen zu lassen, der jeden Aufruf abfängt und überprüft, ob das Programm zugelassen ist.
Das kann auch eine Application erledigen, such mal im Forum nach "GetTaskList()" und dem API Befehl "GetWindowTextA"
gruss by OHR
Jimmy
Jimmy
-
- Rekursionen-Architekt
- Beiträge: 440
- Registriert: Mo, 30. Mai 2011 15:06
- Danksagung erhalten: 1 Mal
Re: .exe -Datei vor Aufruf sperren
habs gefunden ich versteh nur nicht ganz wie ich die function gettasklist aufrufen kann, bzw. was ich in den Parameter schreiben muss
-
- Rekursionen-Architekt
- Beiträge: 440
- Registriert: Mo, 30. Mai 2011 15:06
- Danksagung erhalten: 1 Mal
Re: .exe -Datei vor Aufruf sperren
Ich kenn mich mit den APIs leider auch nicht so aus. Muss ich da etwas per include einbinden, um den Befehl zu erhalten?
Bin aus den Suchergebnisse leider auch nciht schlau geworden.
Bin aus den Suchergebnisse leider auch nciht schlau geworden.
- brandelh
- Foren-Moderator
- Beiträge: 15697
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 66 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Re: .exe -Datei vor Aufruf sperren
Was willst du erreichen ?
Aufruf einer EXE AUS deinem Programm verhindern (dann ging es mit der API) ... oder eine EXE vom Server oder lokal vor dem Aufruf schützen ?
Beim Server ist die Rechtevergabe die Sache des Server Admins, lokal kann man das auch über die Rechtevergabe regeln.
Aufruf einer EXE AUS deinem Programm verhindern (dann ging es mit der API) ... oder eine EXE vom Server oder lokal vor dem Aufruf schützen ?
Beim Server ist die Rechtevergabe die Sache des Server Admins, lokal kann man das auch über die Rechtevergabe regeln.
Gruß
Hubert
Hubert
-
- Rekursionen-Architekt
- Beiträge: 440
- Registriert: Mo, 30. Mai 2011 15:06
- Danksagung erhalten: 1 Mal
Re: .exe -Datei vor Aufruf sperren
Es soll letztendlich so ne kleine Software für Eltern werden, die bestimmte Spiele auf dem Computer ihrer Kinder sperren können. Das ganze muss ja gar nicht komplex sein, es reicht mir durchaus, wenn das über den Namen der exe Datei funktionieren würde.
Ich denke das beantwortet deine Frage oder? Also nicht von meinem Programm aus, sondern lokal.
Ich denke das beantwortet deine Frage oder? Also nicht von meinem Programm aus, sondern lokal.
- Manfred
- Foren-Administrator
- Beiträge: 21199
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Re: .exe -Datei vor Aufruf sperren
Gibt es da nicht einfacherer Systemmöglichkeiten?
Das sollte doch über die Rechteverwaltung vom OS besser klappen, oder?
Das sollte doch über die Rechteverwaltung vom OS besser klappen, oder?
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
- AUGE_OHR
- Marvin
- Beiträge: 12909
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
Re: .exe -Datei vor Aufruf sperren
mit diesem Modul kannst du eine laufende Application "schliessen"Benz hat geschrieben:Es soll letztendlich so ne kleine Software für Eltern werden, die bestimmte Spiele auf dem Computer ihrer Kinder sperren können. Das ganze muss ja gar nicht komplex sein, es reicht mir durchaus, wenn das über den Namen der exe Datei funktionieren würde.
Ich denke das beantwortet deine Frage oder? Also nicht von meinem Programm aus, sondern lokal.
Code: Alles auswählen
*+²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²
*+
*+ Source Module => D:\ALASKA\1\CLOSEAPP.PRG
*+
*+ Functions: Function CloseApp()
*+ Function gettasklist()
*+ Function GetWindow()
*+ Function GetWindowTextA()
*+ Function IsWindowVisible()
*+
*+ Reformatted by Click! 2.03a on Aug-11-2007 at 7:55 pm
*+
*+²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²
*PROCEDURE MAIN
*LOCAL aNoRun := { "BlaBla.EXE",""TuNix.EXE" }
*LOCAL i
*
* FOR i := 1 TO LEN(aNoRun)
* // Check if a Programm is running and terminate it
* CloseApp(aNoRun[i] )
* NEXT
*RETURN
#include "DLL.ch"
#define WM_CLOSE 0x0010
#define WM_QUIT 0x0012
#define GW_HWNDFIRST 0
#define GW_HWNDLAST 1
#define GW_HWNDNEXT 2
#define GW_HWNDPREV 3
#define GW_OWNER 4
#define GW_CHILD 5
#define GW_MAX 5
/*
* ShowWindow() Commands, from WINUSER.H
*/
#define SW_HIDE 0
#define SW_SHOWNORMAL 1
#define SW_NORMAL 1
#define SW_SHOWMINIMIZED 2
#define SW_SHOWMAXIMIZED 3
#define SW_MAXIMIZE 3
#define SW_SHOWNOACTIVATE 4
#define SW_SHOW 5
#define SW_MINIMIZE 6
#define SW_SHOWMINNOACTIVE 7
#define SW_SHOWNA 8
#define SW_RESTORE 9
#define SW_SHOWDEFAULT 10
#define SW_MAX 10
DLLFUNCTION ShowWindow( nHwnd, nCmdShow ) USING STDCALL FROM USER32.DLL
DLLFUNCTION BringWindowToTop( nHwnd ) USING STDCALL FROM USER32.DLL
DLLFUNCTION SetForegroundWindow( nHwnd ) USING STDCALL FROM USER32.DLL
*+±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
*+
*+ Function CloseApp()
*+
*+ Called from ( browlist.prg ) 1 - procedure appsys()
*+ ( email1.prg ) 4 - procedure appsys()
*+ 2 - static function emdetail()
*+ ( etikett.prg ) 1 - procedure appsys()
*+ ( gartret1.prg ) 1 - procedure appsys()
*+ ( statbar.prg ) 5 - procedure runemail()
*+ ( tabow.prg ) 1 - procedure appsys()
*+ 1 - procedure tabintro()
*+ 1 - static procedure yiuintro()
*+
*+±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
*+
FUNCTION CloseApp( cNaam )
LOCAL nEvent, mp1, mp2
LOCAL oDlg
LOCAL aTasklist
LOCAL aSize := { 0, 0 }
LOCAL aPos := { 0, 0 }
LOCAL lRunnin := .F.
LOCAL i
LOCAL nHwnd, cWind
IF PCOUNT() > 0
oDlg := XbpDialog() :new( AppDesktop(),, aPos, aSize,, .F. )
oDlg:clipSiblings := .T.
oDlg:drawingArea:ClipChildren := .T.
oDlg:create()
SETAPPFOCUS( oDlg )
aTasklist := GetTaskList( oDlg:gethWnd( ) )
FOR i = 1 TO LEN( aTasklist )
cWind := TRIM( UPPER( SUBSTR( aTasklist[ i ], 9 ) ) )
cWind := SUBSTR( cWind, 1, LEN( cWind ) - 1 )
IF cWind == TRIM( UPPER( cNaam ) )
lRunnin := .T.
nHwnd := VAL( LEFT( aTasklist[ i ], 8 ) )
// ausprobieren was geht
SendMessageA( nHwnd, WM_CLOSE ,0,0)
SendMessageA( nHwnd, WM_QUIT ,0,0)
RETURN lRunnin
ENDIF
NEXT
ENDIF
RETURN lRunnin
*+±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
*+
*+ Function gettasklist()
*+
*+ Called from ( checkapp.prg ) 1 - function Closeapp()
*+ ( tabow.prg ) 1 - static function closenow()
*+
*+±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
*+
FUNCTION gettasklist( hWnd )
LOCAL aList := {}
LOCAL cWindowName
LOCAL nVisible
DO WHILE hWnd != 0
cWindowname := SPACE( 100 )
IF ( getwindowtexta( hWnd, @cWindowName, LEN( cWindowName ) ) <> 0 )
nVisible := IsWindowVisible( hWnd )
IF nVisible == 1
AADD( aList, STR( hWnd, 8 ) + cWindowname )
ENDIF
ENDIF
hWnd = GetWindow( hWnd, GW_HWNDNEXT )
ENDDO
RETURN aList
*+±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
*+
*+ Function GetWindow()
*+
*+ Called from ( checkapp.prg ) 1 - function gettasklist()
*+
*+±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
*+
FUNCTION GetWindow( hWnd, uCmd )
LOCAL nDll := DllLoad( "USER32.DLL" )
LOCAL xRet := DllCall( nDll, DLL_STDCALL, "GetWindow", hWnd, uCmd )
DllUnLoad( nDll )
RETURN xRet
*+±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
*+
*+ Function GetWindowTextA()
*+
*+ Called from ( checkapp.prg ) 1 - function gettasklist()
*+
*+±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
*+
FUNCTION GetWindowTextA( hWnd, lPstring, nMax )
LOCAL nDll := DllLoad( "USER32.DLL" )
LOCAL xRet := DllCall( nDll, DLL_STDCALL, "GetWindowTextA", hWnd, @lPstring, nMax )
DllUnLoad( nDll )
RETURN xRet
*+±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
*+
*+ Function IsWindowVisible()
*+
*+ Called from ( checkapp.prg ) 1 - function gettasklist()
*+
*+±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
*+
FUNCTION IsWindowVisible( hWnd )
LOCAL nDll := DllLoad( "USER32.DLL" )
LOCAL xRet := DllCall( nDll, DLL_STDCALL, "IsWindowVisible", hWnd )
DllUnLoad( nDll )
RETURN xRet
*
* eof
*
gruss by OHR
Jimmy
Jimmy
- brandelh
- Foren-Moderator
- Beiträge: 15697
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 66 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Re: .exe -Datei vor Aufruf sperren
Hi,
es kann nicht funktionieren, dass eine normale Anwendung andere Anwendungen sperrt.
Gerade "die Kinder" werden die "Aufpassersoftware" schnell abschalten
Die einzige sichere Möglichkeit ist ein ADMIN Zugang NUR für die Eltern, normale User für die Kinder.
Natürlich mit Kennwort ... dann kann man schon mal die Installation verhindern.
Mit Zugriffsrechten kann man dann die Programme vor dem Aufruf schützen.
es kann nicht funktionieren, dass eine normale Anwendung andere Anwendungen sperrt.
Gerade "die Kinder" werden die "Aufpassersoftware" schnell abschalten
Die einzige sichere Möglichkeit ist ein ADMIN Zugang NUR für die Eltern, normale User für die Kinder.
Natürlich mit Kennwort ... dann kann man schon mal die Installation verhindern.
Mit Zugriffsrechten kann man dann die Programme vor dem Aufruf schützen.
Gruß
Hubert
Hubert
- Manfred
- Foren-Administrator
- Beiträge: 21199
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Re: .exe -Datei vor Aufruf sperren
Hubert,
genau so sehe ich das auch. Alles andere ist nur von hinten durch die Brust ins Auge.
genau so sehe ich das auch. Alles andere ist nur von hinten durch die Brust ins Auge.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
- AUGE_OHR
- Marvin
- Beiträge: 12909
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
Re: .exe -Datei vor Aufruf sperren
aber man kann eine andere Application "schliessen" wenn sie geöffnet wirdbrandelh hat geschrieben:es kann nicht funktionieren, dass eine normale Anwendung andere Anwendungen sperrt.
deshalb sollte man es als Dienst mit Admin Rechten starten.brandelh hat geschrieben:Gerade "die Kinder" werden die "Aufpassersoftware" schnell abschalten
gruss by OHR
Jimmy
Jimmy
Re: .exe -Datei vor Aufruf sperren
und mit sehr unscheinbaren NamenAUGE_OHR hat geschrieben:aber man kann eine andere Application "schliessen" wenn sie geöffnet wirdbrandelh hat geschrieben:es kann nicht funktionieren, dass eine normale Anwendung andere Anwendungen sperrt.
deshalb sollte man es als Dienst mit Admin Rechten starten.brandelh hat geschrieben:Gerade "die Kinder" werden die "Aufpassersoftware" schnell abschalten
Aufpasser.exe ist halt denkbar schlecht gewählt
-
- Rekursionen-Architekt
- Beiträge: 440
- Registriert: Mo, 30. Mai 2011 15:06
- Danksagung erhalten: 1 Mal
Re: .exe -Datei vor Aufruf sperren
Okay, danke sperren, schließen, ganz egal, hauptsache es funktioniert nicht mehr xD, werd das morgen mal ausprobieren
-
- Rekursionen-Architekt
- Beiträge: 440
- Registriert: Mo, 30. Mai 2011 15:06
- Danksagung erhalten: 1 Mal
Re: .exe -Datei vor Aufruf sperren
Unresolved external Symbol "SendMessageA" wo bekomme ich das her ? : -)
- Bertram Hansen
- Foren-Moderator
- Beiträge: 1015
- Registriert: Di, 27. Sep 2005 8:55
- Wohnort: 51379 Leverkusen
- Hat sich bedankt: 28 Mal
- Danksagung erhalten: 20 Mal
- Kontaktdaten:
Re: .exe -Datei vor Aufruf sperren
Du musst die folgende DLL Funktion einbinden:
/***********************************************************************************************************/
/* SendMessage( HWND hWnd, // handle of destination window
UINT Msg, // message to send
WPARAM wParam, // first message parameter
LPARAM lParam // second message parameter */
DLLFUNCTION SendMessageA(hWnd, Msg, wParam, lParam) USING STDCALL FROM user32.DLL
/***********************************************************************************************************/
/* SendMessage( HWND hWnd, // handle of destination window
UINT Msg, // message to send
WPARAM wParam, // first message parameter
LPARAM lParam // second message parameter */
DLLFUNCTION SendMessageA(hWnd, Msg, wParam, lParam) USING STDCALL FROM user32.DLL
Gruß Bertram
http://www.tobax.de
Mitglied der XUG Cologne
Mitglied der XUG Osnabrück
Beisitzer des Deutschsprachige Xbase-Entwickler e.V.
Solange Kakaobohnen an Bäumen wachsen ist Schokolade Obst!
-
- Rekursionen-Architekt
- Beiträge: 440
- Registriert: Mo, 30. Mai 2011 15:06
- Danksagung erhalten: 1 Mal
Re: .exe -Datei vor Aufruf sperren
Okay, Fehlermeldungen kommen jetzt keine mehr, dafür mal danke.
Allerdings funktioniert es glaube ich trotzdem nicht.
Hier mal mein Code:
Was mache ich falsch?
(firefox.exe ist weiterhin geöffnet)
Allerdings funktioniert es glaube ich trotzdem nicht.
Hier mal mein Code:
Code: Alles auswählen
//////////////////////////////////////////////////////////////////////
//
// Copyright:
// Your Copyright goes here., (c) 2000. All rights reserved.
//
// Contents:
// This is a standard win32 exe.
//
//////////////////////////////////////////////////////////////////////
#include "Common.ch"
#include "DLL.ch"
#define WM_CLOSE 0x0010
#define WM_QUIT 0x0012
#define GW_HWNDFIRST 0
#define GW_HWNDLAST 1
#define GW_HWNDNEXT 2
#define GW_HWNDPREV 3
#define GW_OWNER 4
#define GW_CHILD 5
#define GW_MAX 5
/*
* ShowWindow() Commands, from WINUSER.H
*/
#define SW_HIDE 0
#define SW_SHOWNORMAL 1
#define SW_NORMAL 1
#define SW_SHOWMINIMIZED 2
#define SW_SHOWMAXIMIZED 3
#define SW_MAXIMIZE 3
#define SW_SHOWNOACTIVATE 4
#define SW_SHOW 5
#define SW_MINIMIZE 6
#define SW_SHOWMINNOACTIVE 7
#define SW_SHOWNA 8
#define SW_RESTORE 9
#define SW_SHOWDEFAULT 10
#define SW_MAX 10
DLLFUNCTION ShowWindow( nHwnd, nCmdShow ) USING STDCALL FROM USER32.DLL
DLLFUNCTION BringWindowToTop( nHwnd ) USING STDCALL FROM USER32.DLL
DLLFUNCTION SetForegroundWindow( nHwnd ) USING STDCALL FROM USER32.DLL
DLLFUNCTION SendMessageA(hWnd, Msg, wParam, lParam) USING STDCALL FROM user32.DLL
/* Overloaded AppSys which does nothing
*/
PROCEDURE AppSys
/* use the ANSI charset by default */
SET CHARSET TO ANSI
/* $TODO: create your application container here */
RETURN
/* This is our main procedure
*/
*+²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²
*+
*+ Source Module => D:\ALASKA\1\CLOSEAPP.PRG
*+
*+ Functions: Function CloseApp()
*+ Function gettasklist()
*+ Function GetWindow()
*+ Function GetWindowTextA()
*+ Function IsWindowVisible()
*+
*+ Reformatted by Click! 2.03a on Aug-11-2007 at 7:55 pm
*+
*+²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²
PROCEDURE MAIN
LOCAL aNoRun := { "firefox.EXE" }
LOCAL i
FOR i := 1 TO LEN(aNoRun)
// Check if a Programm is running and terminate it
CloseApp(aNoRun[i] )
NEXT
RETURN
*+±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
*+
*+ Function CloseApp()
*+
*+ Called from ( browlist.prg ) 1 - procedure appsys()
*+ ( email1.prg ) 4 - procedure appsys()
*+ 2 - static function emdetail()
*+ ( etikett.prg ) 1 - procedure appsys()
*+ ( gartret1.prg ) 1 - procedure appsys()
*+ ( statbar.prg ) 5 - procedure runemail()
*+ ( tabow.prg ) 1 - procedure appsys()
*+ 1 - procedure tabintro()
*+ 1 - static procedure yiuintro()
*+
*+±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
*+
FUNCTION CloseApp( cNaam )
LOCAL nEvent, mp1, mp2
LOCAL oDlg
LOCAL aTasklist
LOCAL aSize := { 10, 20 }
LOCAL aPos := { 0, 0 }
LOCAL lRunnin := .F.
LOCAL i
LOCAL nHwnd, cWind
IF PCOUNT() > 0
oDlg := XbpDialog() :new( AppDesktop(),, aPos, aSize,, .F. )
oDlg:clipSiblings := .T.
oDlg:drawingArea:ClipChildren := .T.
oDlg:close := {|| PostAppEvent( xbeP_Quit ) }
oDlg:create()
SETAPPFOCUS( oDlg )
aTasklist := GetTaskList( oDlg:gethWnd( ) )
FOR i = 1 TO LEN( aTasklist )
cWind := TRIM( UPPER( SUBSTR( aTasklist[ i ], 9 ) ) )
cWind := SUBSTR( cWind, 1, LEN( cWind ) - 1 )
IF cWind == TRIM( UPPER( cNaam ) )
lRunnin := .T.
nHwnd := VAL( LEFT( aTasklist[ i ], 8 ) )
// ausprobieren was geht
SendMessageA( nHwnd, WM_CLOSE ,0,0)
SendMessageA( nHwnd, WM_QUIT ,0,0)
RETURN lRunnin
ENDIF
NEXT
ENDIF
RETURN lRunnin
*+±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
*+
*+ Function gettasklist()
*+
*+ Called from ( checkapp.prg ) 1 - function Closeapp()
*+ ( tabow.prg ) 1 - static function closenow()
*+
*+±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
*+
FUNCTION gettasklist( hWnd )
LOCAL aList := {}
LOCAL cWindowName
LOCAL nVisible
DO WHILE hWnd != 0
cWindowname := SPACE( 100 )
IF ( getwindowtexta( hWnd, @cWindowName, LEN( cWindowName ) ) <> 0 )
nVisible := IsWindowVisible( hWnd )
IF nVisible == 1
AADD( aList, STR( hWnd, 8 ) + cWindowname )
ENDIF
ENDIF
hWnd = GetWindow( hWnd, GW_HWNDNEXT )
ENDDO
RETURN aList
*+±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
*+
*+ Function GetWindow()
*+
*+ Called from ( checkapp.prg ) 1 - function gettasklist()
*+
*+±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
*+
FUNCTION GetWindow( hWnd, uCmd )
LOCAL nDll := DllLoad( "USER32.DLL" )
LOCAL xRet := DllCall( nDll, DLL_STDCALL, "GetWindow", hWnd, uCmd )
DllUnLoad( nDll )
RETURN xRet
*+±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
*+
*+ Function GetWindowTextA()
*+
*+ Called from ( checkapp.prg ) 1 - function gettasklist()
*+
*+±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
*+
FUNCTION GetWindowTextA( hWnd, lPstring, nMax )
LOCAL nDll := DllLoad( "USER32.DLL" )
LOCAL xRet := DllCall( nDll, DLL_STDCALL, "GetWindowTextA", hWnd, @lPstring, nMax )
DllUnLoad( nDll )
RETURN xRet
*+±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
*+
*+ Function IsWindowVisible()
*+
*+ Called from ( checkapp.prg ) 1 - function gettasklist()
*+
*+±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
*+
FUNCTION IsWindowVisible( hWnd )
LOCAL nDll := DllLoad( "USER32.DLL" )
LOCAL xRet := DllCall( nDll, DLL_STDCALL, "IsWindowVisible", hWnd )
DllUnLoad( nDll )
RETURN xRet
*
* eof
*
(firefox.exe ist weiterhin geöffnet)
- Wolfgang Ciriack
- Der Entwickler von "Deep Thought"
- Beiträge: 2936
- Registriert: Sa, 24. Sep 2005 9:37
- Wohnort: Berlin
- Hat sich bedankt: 13 Mal
- Danksagung erhalten: 34 Mal
- Kontaktdaten:
Re: .exe -Datei vor Aufruf sperren
Hallo,
m.E. kannst du mit den Funktionen nur Programme "suchen", von denen du den Fensternamen kennst.
Da aber Firefox als Fensternamen immer die geöffnete Seite nimmt, wirst du damit keinen Erfolg haben.
Probier es mal mit einem deiner Programme aus, wo du weisst, wie das geöfnete Fenster deiner Applikation heißt.
m.E. kannst du mit den Funktionen nur Programme "suchen", von denen du den Fensternamen kennst.
Da aber Firefox als Fensternamen immer die geöffnete Seite nimmt, wirst du damit keinen Erfolg haben.
Probier es mal mit einem deiner Programme aus, wo du weisst, wie das geöfnete Fenster deiner Applikation heißt.
Viele Grüße
Wolfgang
Wolfgang
-
- Rekursionen-Architekt
- Beiträge: 440
- Registriert: Mo, 30. Mai 2011 15:06
- Danksagung erhalten: 1 Mal
Re: .exe -Datei vor Aufruf sperren
Soll heißen ich kann gar keine .exe -Dateien schließen, sondern nur solche von denen ich den "Fensternamen" kenne ?; ) ( was ist in diesem Zusammenhang der Fenstername) --> Heißt das, dass ich nur von mir erstellte Programme schließen kann?
- brandelh
- Foren-Moderator
- Beiträge: 15697
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 66 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Re: .exe -Datei vor Aufruf sperren
Der Fenstername ist das, was am oberen Fensterrand angezeigt wird. Bei Xbase++ wird es mit :title bestimmt.
Ein normales Programm hat genau einen z.B. "Taschenrechner"
Aber viele haben neben dem Namen noch die offene Datei hinterlegt: "Unbenannt - Editor"
Da du kaum den Namen sämtlicher Seiten und Software hinterlegen kannst müsstest du alle Programme abfragen und dann durchsuchen ... und wehe du irrst dich
Ein normales Programm hat genau einen z.B. "Taschenrechner"
Aber viele haben neben dem Namen noch die offene Datei hinterlegt: "Unbenannt - Editor"
Da du kaum den Namen sämtlicher Seiten und Software hinterlegen kannst müsstest du alle Programme abfragen und dann durchsuchen ... und wehe du irrst dich
Gruß
Hubert
Hubert
- Lewi
- 1000 working lines a day
- Beiträge: 830
- Registriert: Di, 07. Feb 2006 14:10
- Wohnort: Hamburg
- Danksagung erhalten: 2 Mal
Re: .exe -Datei vor Aufruf sperren
Hallo miteinander,
eine Anwendung auf Basis eines "Fenster-Namens" zu determinieren, ist gewisse Grenzen gesetzt. Zum einen muß der Fenstername vollends bekann sein - was bei einem Editor mit einem geöffneten Dokument - nicht immer der Fall sein wird und zum anderen, gibt es Anwendungen, die ohne Fenster (im Hintergrund) laufen oder noch nicht vollends auf dem Speicher entfernt sind.
Die bessere Wahl ist die Schließung einer Anwendung über den Namen der Programmdatei oder der ProgId. Die nachfolgende Funktion:
TerminateTask( <programmdatei-name>, [<ProgId>])
z.B. TerminateTask( "editor.exe")
beendet eine beliebe Anwendung, falls diese aktiv ist.
Gruß, Olaf
eine Anwendung auf Basis eines "Fenster-Namens" zu determinieren, ist gewisse Grenzen gesetzt. Zum einen muß der Fenstername vollends bekann sein - was bei einem Editor mit einem geöffneten Dokument - nicht immer der Fall sein wird und zum anderen, gibt es Anwendungen, die ohne Fenster (im Hintergrund) laufen oder noch nicht vollends auf dem Speicher entfernt sind.
Die bessere Wahl ist die Schließung einer Anwendung über den Namen der Programmdatei oder der ProgId. Die nachfolgende Funktion:
TerminateTask( <programmdatei-name>, [<ProgId>])
z.B. TerminateTask( "editor.exe")
beendet eine beliebe Anwendung, falls diese aktiv ist.
Code: Alles auswählen
DLLFUNCTION EnumProcesses(@lpidProcess,cb,@cbNeeded) USING STDCALL FROM PSAPI.DLL
DLLFUNCTION OpenProcess(dwDesiredAccess,bInheritHandle,dwProcessId) USING STDCALL FROM KERNEL32.DLL
DLLFUNCTION EnumProcessModules(hProcess,@lphModule,cb,@lpcbNeeded) USING STDCALL FROM PSAPI.DLL
DLLFUNCTION GetModuleBaseNameA(hProcess,hModule,@lpBaseName,nSize) USING STDCALL FROM PSAPI.DLL
DLLFUNCTION TerminateProcess(hProcess, uExitCode) USING STDCALL FROM KERNEL32.DLL
DLLFUNCTION CloseHandle(hObject) USING STDCALL FROM KERNEL32.DLL
#DEFINE PROCESS_QUERY_INFORMATION 1024
#DEFINE PROCESS_VM_READ 16
#define STANDARD_RIGHTS_REQUIRED (0x000F0000)
#define SYNCHRONIZE (0x00100000)
#define PROCESS_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0xFFF)
#define PROCESS_TERMINATE (0x0001)
Function TerminateTask(cExe,nPidDel)
Local aProcesses := space(10240)
Local aModules := space(4*10)
Local cbNeeded := 0
Local cbNeeded2 := 0
LOcal cname := space(64)
Local lIsKill := .F.
Local nPid
Local nProcHandle
Local i,nMax
LOcal hmod
Local xRet
EnumProcesses( @aProcesses, LEN(aProcesses) , @cbNeeded )
nMax := len(trim(aProcesses))/4
for i:= 1 to nMax
nPid := Bin2U(substr(aProcesses,1+((i-1)*4),4))
if nPidDel==NIL .or. (nPIdDel==nPid)
nProcHandle := OpenProcess( PROCESS_QUERY_INFORMATION + PROCESS_VM_READ ,0, nPid )
if nProcHandle > 0
if EnumProcessModules( nProcHandle, @aModules,len(aModules)/4, @cbNeeded2) != 0
cName := space(128)
GetModuleBaseNameA( nProcHandle,bin2u(substr(aModules,1,4)),@cName,len(cName))
cName := strtran(cname,chr(0),"")
CloseHandle(nProcHandle)
if upper(trim(cName)) == upper(cExe)
nProcHandle := OpenProcess(1,0,nPId)
xRet := TerminateProcess(nProcHandle,1)
CloseHandle(nProcHandle)
if xRet <> 0
sleep(100)
lIsKill := .T.
endif
endif
endif
endif
endif
next
RETURN NIL
Gruß, Olaf
- AUGE_OHR
- Marvin
- Beiträge: 12909
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
Re: .exe -Datei vor Aufruf sperren
das ist das Problem mit Firefox wo man auch noch Tabs hat.Lewi hat geschrieben:eine Anwendung auf Basis eines "Fenster-Namens" zu determinieren, ist gewisse Grenzen gesetzt. Zum einen muß der Fenstername vollends bekann sein - was bei einem Editor mit einem geöffneten Dokument - nicht immer der Fall sein wird und zum anderen, gibt es Anwendungen, die ohne Fenster (im Hintergrund) laufen oder noch nicht vollends auf dem Speicher entfernt sind.
im Prinzip braucht man "nur" das Handle der Application und es muss natürlich auf WM_QUIT (xbeP_Quit) reagieren.
die Idee von mir war auch zum "nachträglichen" schliessen eine Applikation gedacht.
seit Vista gibt es ja "Integrity Level" allerdings nur mit 3-Stufen der Berechtigung.
bei Win8 nennt sich das nun "App Container" und ist im Gruppenrichtlinien Editor ( gpedit.msc )
unter "Applocker" zu finden.
wenn ich das richtig verstehe kann ich nicht nur den Zugriff auf Dateien und Ordner einteilen sondern auch die Hardware dazu.
eine Fibu die nur im Hause laufen soll kann man den Internet Gateway Zugriff sperren während beim selben User das Email Programm funktioniert.
gruss by OHR
Jimmy
Jimmy