.exe -Datei vor Aufruf sperren

Konzeptionelles, Technisches, Termine, Fragen zum Hersteller usw.

Moderator: Moderatoren

Antworten
Benz
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 440
Registriert: Mo, 30. Mai 2011 15:06
Danksagung erhalten: 1 Mal

.exe -Datei vor Aufruf sperren

Beitrag von Benz »

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.
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Re: .exe -Datei vor Aufruf sperren

Beitrag von AUGE_OHR »

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.
wenn du den Namen des EXE weisst kannst du die Application im Taskmanager schliessen.
Das kann auch eine Application erledigen, such mal im Forum nach "GetTaskList()" und dem API Befehl "GetWindowTextA"
gruss by OHR
Jimmy
Benz
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 440
Registriert: Mo, 30. Mai 2011 15:06
Danksagung erhalten: 1 Mal

Re: .exe -Datei vor Aufruf sperren

Beitrag von Benz »

habs gefunden ;) ich versteh nur nicht ganz wie ich die function gettasklist aufrufen kann, bzw. was ich in den Parameter schreiben muss
Benz
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 440
Registriert: Mo, 30. Mai 2011 15:06
Danksagung erhalten: 1 Mal

Re: .exe -Datei vor Aufruf sperren

Beitrag von Benz »

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.
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15695
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: .exe -Datei vor Aufruf sperren

Beitrag von brandelh »

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.
Gruß
Hubert
Benz
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 440
Registriert: Mo, 30. Mai 2011 15:06
Danksagung erhalten: 1 Mal

Re: .exe -Datei vor Aufruf sperren

Beitrag von Benz »

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.
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21186
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

Beitrag von Manfred »

Gibt es da nicht einfacherer Systemmöglichkeiten?

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!!
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Re: .exe -Datei vor Aufruf sperren

Beitrag von AUGE_OHR »

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.
mit diesem Modul kannst du eine laufende Application "schliessen"

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
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15695
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: .exe -Datei vor Aufruf sperren

Beitrag von brandelh »

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.
Gruß
Hubert
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21186
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

Beitrag von Manfred »

Hubert,

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!!
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Re: .exe -Datei vor Aufruf sperren

Beitrag von AUGE_OHR »

brandelh hat geschrieben:es kann nicht funktionieren, dass eine normale Anwendung andere Anwendungen sperrt.
aber man kann eine andere Application "schliessen" wenn sie geöffnet wird ;)
brandelh hat geschrieben:Gerade "die Kinder" werden die "Aufpassersoftware" schnell abschalten ;-)
deshalb sollte man es als Dienst mit Admin Rechten starten.
gruss by OHR
Jimmy
psp
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 250
Registriert: Do, 22. Okt 2009 13:42
Kontaktdaten:

Re: .exe -Datei vor Aufruf sperren

Beitrag von psp »

AUGE_OHR hat geschrieben:
brandelh hat geschrieben:es kann nicht funktionieren, dass eine normale Anwendung andere Anwendungen sperrt.
aber man kann eine andere Application "schliessen" wenn sie geöffnet wird ;)
brandelh hat geschrieben:Gerade "die Kinder" werden die "Aufpassersoftware" schnell abschalten ;-)
deshalb sollte man es als Dienst mit Admin Rechten starten.
und mit sehr unscheinbaren Namen

Aufpasser.exe ist halt denkbar schlecht gewählt
Benz
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 440
Registriert: Mo, 30. Mai 2011 15:06
Danksagung erhalten: 1 Mal

Re: .exe -Datei vor Aufruf sperren

Beitrag von Benz »

Okay, danke ;) sperren, schließen, ganz egal, hauptsache es funktioniert nicht mehr xD, werd das morgen mal ausprobieren :)
Benz
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 440
Registriert: Mo, 30. Mai 2011 15:06
Danksagung erhalten: 1 Mal

Re: .exe -Datei vor Aufruf sperren

Beitrag von Benz »

Unresolved external Symbol "SendMessageA" :-D wo bekomme ich das her ? : -)
Benutzeravatar
Bertram Hansen
Foren-Moderator
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

Beitrag von Bertram Hansen »

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
:wave:
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!
Benz
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 440
Registriert: Mo, 30. Mai 2011 15:06
Danksagung erhalten: 1 Mal

Re: .exe -Datei vor Aufruf sperren

Beitrag von Benz »

Okay, Fehlermeldungen kommen jetzt keine mehr, dafür mal danke.

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
*
Was mache ich falsch?
(firefox.exe ist weiterhin geöffnet)
Benz
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 440
Registriert: Mo, 30. Mai 2011 15:06
Danksagung erhalten: 1 Mal

Re: .exe -Datei vor Aufruf sperren

Beitrag von Benz »

hat niemand ne idee ?
Benutzeravatar
Wolfgang Ciriack
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2934
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

Beitrag von Wolfgang Ciriack »

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.
Viele Grüße
Wolfgang
Benz
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 440
Registriert: Mo, 30. Mai 2011 15:06
Danksagung erhalten: 1 Mal

Re: .exe -Datei vor Aufruf sperren

Beitrag von Benz »

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?
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15695
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: .exe -Datei vor Aufruf sperren

Beitrag von brandelh »

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 ;-)
Gruß
Hubert
Benutzeravatar
Lewi
1000 working lines a day
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

Beitrag von Lewi »

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.

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
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Re: .exe -Datei vor Aufruf sperren

Beitrag von AUGE_OHR »

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.
das ist das Problem mit Firefox wo man auch noch Tabs hat.
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
Antworten