Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi bestimmte Tasten Sperren. (https://www.delphipraxis.net/69054-bestimmte-tasten-sperren.html)

Noobinator 9. Mai 2006 17:20


bestimmte Tasten Sperren.
 
HY community.

Ich habe ein Problem.
Wir sollen in der Schule ein Programm schreiben, in welchem man nur den Ziffernblock benutzen kann.
(Tasten 0-9)

Nun ist meine frage, wie geht das?

Ich dachte da an Invalidkey, aber da müsste ich ja jeden einzeln sperren.
Gibt es da eine andere Möglichkeit,wie das mann alles außer ein paar bestimme sperrt?

Wenn nicht, wie müsste das mit dem invalidkey aussehen?
habe leider kein Plan davon, und die HIlfe hat mich auch nicht weitergebracht.

Mfg
Noobinator

Peeters 9. Mai 2006 17:23

Re: bestimmte Tasten Sperren.
 
Beispiel mit KeyPress:

Delphi-Quellcode:
procedure TFormHaupt.EditVKKeyPress(Sender: TObject; var Key: Char);
begin
  if Key = #13 then Key := #0;
  if not (Key in ['0'..'9', #8, #13]) then Key := #0;
end;

Noobinator 9. Mai 2006 17:32

Re: bestimmte Tasten Sperren.
 
Zitat:

Zitat von Peeters
Beispiel mit KeyPress:

Delphi-Quellcode:
procedure TFormHaupt.EditVKKeyPress(Sender: TObject; var Key: Char);
begin
  if Key = #13 then Key := #0;
  if not (Key in ['0'..'9', #8, #13]) then Key := #0;
end;

könntest du das bitte mal kommentieren?
steige da nicht dahinter <---- NOOB

danku 9. Mai 2006 17:48

Re: bestimmte Tasten Sperren.
 
naja du lässt nur den zifferblock zu.
das heißt das alle anderen zeichen "umgeschrieben" werden müssen von dir.
in dem beispiel wir das z.b. so realisiert:

if Key = #13 then Key := #0;
// wenn eingabe = zeilenvorschub [enter-taste] -> dann soll 0 erscheinen

DevilsCamp 9. Mai 2006 17:48

Re: bestimmte Tasten Sperren.
 
Zitat:

Zitat von Peeters
Beispiel mit KeyPress:

Delphi-Quellcode:
procedure TFormHaupt.EditVKKeyPress(Sender: TObject; var Key: Char);
begin
  if not (Key in ['0'..'9', #8, #13]) then Key := #0;
end;


mit
Delphi-Quellcode:
Key in ['0'..'9', #8, #13]
prüfst du, ob die gedrückte Taste eine der Ziffern, Backspace (#8) oder Return (#13) ist.

durch
Delphi-Quellcode:
if not (Key in ['0'..'9', #8, #13]) then Key := #0;
setzt du dann Key bei druch einer anderen Taste auf #0, das ist der Wert, der dem TEdit (z.B.) sagt, dass nicht auf den Tastendruck reagiert werden soll.

Die Zeile
Delphi-Quellcode:
if Key = #13 then Key := #0;
kannst du stehen lassen, wenn die Return-Taste nicht auch nicht gedrückt werden darf (ansonsten löschen oder auskommentieren).

Auf Backspace sollte in jedem Fall geprüft werden, da man sonst Falsch-Eingaben nur korrigieren kann, wenn man alles markiert und überschreibt

Neon-chan 9. Mai 2006 17:57

Re: bestimmte Tasten Sperren.
 
Denk aber dran bei der Lösung KeyPreview von Mainform auf true zu setzen :)

DevilsCamp 9. Mai 2006 17:59

Re: bestimmte Tasten Sperren.
 
Zitat:

Zitat von Neon-chan
Denk aber dran bei der Lösung KeyPreview von Mainform auf true zu setzen :)

DANN muss aber nicht das OnKeyPress-Ereignis des Edits sondern das des Forms benutzt werden.

Phistev 9. Mai 2006 18:00

Re: bestimmte Tasten Sperren.
 
Zitat:

Zitat von Neon-chan
Denk aber dran bei der Lösung KeyPreview von Mainform auf true zu setzen :)

Wenn's das KeyPress vom Edit ist (anders gäb's leicht Probs), sehe ich keinen Grund dafür.

/edit: Schon wieder. Wo ist dieser rote Kasten?

Noobinator 9. Mai 2006 20:10

Re: bestimmte Tasten Sperren.
 
also mein Programm sieht wie folgt aus:
Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls;


type
    TForm1 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    Label1: TLabel;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);




  private
    { Private-Deklarationen }
  public
     procedure FormVKKeyPress(Sender: TObject; var Key: Char);
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

...



procedure TForm1.FormCreate(Sender: TObject);
begin
form1.onkeypress := FormVKKeyPress;
.....

end;


procedure TForm1.FormVKKeyPress(Sender: TObject; var Key: Char);
begin
  if Key = #13 then Key := #0;
  if not (Key in ['0'..'9', #8]) then Key := #0;
end;
end.
aber es funzt nicht... ich möchte nur die Tasten Backspace und 0-9 zulassen.
was ist falsch?

Flare 9. Mai 2006 20:33

Re: bestimmte Tasten Sperren.
 
Zitat:

Zitat von Noobinator
Delphi-Quellcode:
procedure TForm1.FormVKKeyPress(Sender: TObject; var Key: Char);
begin
  if Key = #13 then Key := #0;
  if not (Key in ['0'..'9', #8]) then Key := #0;
end;
end.

hmmm...doch nicht, jetzt zeigt er es richtig an, ich dachte es wären die eckigen Klammern :gruebel:


Wo liegt genau der Fehler? (Compilermeldung oder Beschreibung was du machst, was es machen sollte und was dennoch passiert)

Flare

ichbins 9. Mai 2006 20:36

Re: bestimmte Tasten Sperren.
 
"Es funzt nicht" ist nicht besonders genau. Was passiert denn? Geht es kompilieren? Kommt eine AV? Werden die falschen Tasten angenommen?


Hast du auch bei Form1 KEYPREVIEW auf true gestellt?

Ansonsten wird die Form beim Tasten annehmen einfach "übergangen" und es wird gar nicht deine Proc aufgerufen die die Eingaben löscht.

Außerdem: Die Zeile mit dem #13 brauchst du eh nicht, da KEY ja eh auf 0 gesetzt wird, wenn es keine Zahl/Backspace ist.

Noobinator 9. Mai 2006 20:43

Re: bestimmte Tasten Sperren.
 
OK jetzt geht es soweit, das die "normalen" tasten nicht reagieren, aber wie kann man das mit den Sondertasten realisieren?

es würde schon reichen ALT zu deaktivieren, da man damit ja alle tastenkombinationen ausführt.
(auch ein Kriterium des Programmes)

ichbins 9. Mai 2006 21:04

Re: bestimmte Tasten Sperren.
 
Die Sondertasten können doch das Geschehen in deinem Programm nicht beeinflussen?



In irgendeiner onkeydown oder so gibt es einen Parameter der die gedrückten Sondertasten enthält. Wenn welche gedrückt sind, kannst du einfach auch den key auf #0 stellen.

Sascha L 9. Mai 2006 21:07

Re: bestimmte Tasten Sperren.
 
Übrigens sollte nicht nur Backspace sondern auch ENTF erlaubt sein ;)

DevilsCamp 9. Mai 2006 23:20

Re: bestimmte Tasten Sperren.
 
Hast du den ASCII-Code von ENTF gerade mal zur Hand?

nat 9. Mai 2006 23:55

Re: bestimmte Tasten Sperren.
 
entf hat keinen ascii-code. das drücken dieser taste kannste nur in
onkeydown/onkeyup (der die virtual-keycodes übergeben werden) feststellen.

Noobinator 11. Mai 2006 16:23

Re: bestimmte Tasten Sperren.
 
ok es geht fast alles, nur noch die frage: wie könnte man die Taskleiste ausblenden whärend das Programm läuft? und wie kann man die Tastenkombi STRG + ESC verhindern, ohne am Treiber rumzufuschen, oder einen hook einzubauen?

Ich habe keinerlei Möglichkeit irgendwelche hooks einzubinden, oder die Treiber zu ändern.
Habe schon die Sufu strapaziert, aber da finde ich nichts, und mit dem virtual keycodes geht es auchnicht, da die STRG taste windowsimplementiert ist, und nicht auf die Form zugreift.
kann man das irgendwie lösen?
es ist wichtig, es geht um meine Infonote.

Noobinator 12. Mai 2006 15:25

Re: bestimmte Tasten Sperren.
 
kann mir den keiner helfen?

wer kennt sich mit invaligkey aus?
es ist wichtig.
Tastenkombis die ich sperren müsste wären ALT+TAB, STRG+ESC.
könnte mir jemand eine procedure schreiben?
habe schon google und die Sufu strpaziert, aber ich finde nichts, das mir helfen könnte.

Valle 12. Mai 2006 15:41

Re: bestimmte Tasten Sperren.
 
Ich glaube um das zu deaktivieren, bleibt dir wohl nichts anderes
übrig als dich mit der Treiberprogramierung zu beschäftigen.
Wegen der Taskleiste: Wenn du da bei Goolgle nichts findest, dann
suchst du falsch.

Viel Glück!

Mfg Valle

Noobinator 12. Mai 2006 15:53

Re: bestimmte Tasten Sperren.
 
also wegen den kombis müsste es laut hilfe gehen:
Zitat:

Mit der Eigenschaft InvalidKeys können Sie eine oder mehrere Sondertasten als nicht zulässig erklären.

type
THKInvalidKey = (hcNone, hcShift, hcCtrl, hcAlt, hcShiftCtrl, hcShiftAlt, hcCtrlAlt, hcShiftCtrlAlt);
THKInvalidKeys = set of THKInvalidKey;
property InvalidKeys: THKInvalidKeys;

Beschreibung

Mit InvalidKeys legen Sie fest, welche Sondertasten nicht zulässig sind. Wenn Sie diese Eigenschaft setzen, sollten Sie auch einen Vorgabewert in der Eigenschaft Modifiers bereitstellen. Wenn der Benutzer eine nicht zulässige Sondertaste drückt, wird statt dessen die Vorgabetaste angezeigt.
Die Eigenschaft InvalidKeys ist vom Typ THKInvalidKey und kann die folgenden Werte annehmen:

Wert Bedeutung

hcNone Alle Sondertasten sind erlaubt.
hcShift Die UMSCHALT-Taste ist als Sondertaste nicht erlaubt.
hcCtrl Die STRG-Taste ist als Sondertaste nicht erlaubt.
hcAlt Die ALT-Taste ist als Sondertaste nicht erlaubt.
hcShiftCtrl Die Tastenkombination UMSCHALT+STRG ist nicht erlaubt.
hcShiftAlt Die Tastenkombination UMSCHALT+ALT ist nicht erlaubt.
hcCtrlAlt Die Tastenkombination STRG+ALT ist nicht erlaubt.
hcShiftCtrlAlt Die Tastenkombination UMSCHALT+STRG+ALT ist nicht erlaubt.

Die Vorgabewerte sind hcNone und hcShift.
nun habe ich keine ahnung, wie das geht.. komme mit der hilfe nicht zurecht.

nat 12. Mai 2006 16:00

Re: bestimmte Tasten Sperren.
 
warum willst du keinen hook verwenden?
über n system-hook müsste das doch möglich sein.

Noobinator 12. Mai 2006 16:03

Re: bestimmte Tasten Sperren.
 
Das programm soll ich auf unseren Schulrechner zum laufen bringen,und da kann ich nicht an den Treibern rumspielen.
und wegen den hooks weiss ich nicht, kann man die einfach so einbinden? (habe davon 0 ahnung)
weiterhin hat mein Lehrer gesagt, das geht über eine Procedure, ohne etwas einzubinden und verwies mich auf invalidkey.

ach und wegen der taskleiste:

wie kann ich diese Procedure:

Delphi-Quellcode:
procedure SetStartBtnEnabled(const AEnabled: Boolean);
begin
  EnableWindow(FindWindowEx(FindWindow('Shell_TrayWnd',nil),
                            0,
                            'Button',
                            nil),
               AEnabled);
end;
ins Formcreate einbinden?
sorry für die vielen fragen aber ich bin noch ein Noob^^

monta 12. Mai 2006 17:14

Re: bestimmte Tasten Sperren.
 
^^indem du einfach das hier ins Form-Create schreibst:
Delphi-Quellcode:
  EnableWindow(FindWindowEx(FindWindow('Shell_TrayWnd',nil),0,'Button',nil),true);
//bzw. das letzte true eben durch false ersetzen.

Noobinator 12. Mai 2006 17:40

Re: bestimmte Tasten Sperren.
 
thx4help. jetzt fehlt nur noch die ALT taste :wink:

nat 12. Mai 2006 18:47

Re: bestimmte Tasten Sperren.
 
also strg+esc kannste mit diesem keyboard hook sperren.
Delphi-Quellcode:
library KeyboardHook;

uses
  Windows,
  SysUtils,
  Classes;

{$R *.res}

type
  TKeybDLLHookStruct = packed record
    vkCode: integer;
    scanCode: integer;
    flags: integer;
    time: integer;
    dwExtraInfo: integer;
  end;
  PKeybDLLHookStruct = ^TKeybDLLHookStruct;

const
  WH_KEYBOARD_LL = 13;

var
  hKeyHook: THandle;


function KeyboardProc_LowLevel(code: integer; wParam,   lParam: Integer): integer; stdcall;
var
  P: PKeybDLLHookStruct;
  KeyDown: Boolean;
begin
  if Code < 0 then
    result := CallNextHookEx(hKeyHook, Code, wParam, lParam)
  else
  begin
    P := Pointer(lParam);
    KeyDown := P^.flags = 0;

    if KeyDown and (P^.vkCode = VK_ESCAPE) and
      Bool($8000 and GetAsyncKeyState(VK_CONTROL)) then
      result := HC_SKIP
    else result := CallNextHookEx(hKeyHook, Code, wParam, lParam);
  end;
end;

procedure StartHook;
begin
  hKeyHook := SetWindowsHookEx(WH_KEYBOARD_LL, KeyboardProc_LowLevel, HInstance, 0);
end;

procedure StopHook;
begin
  UnhookWindowsHookEx(hKeyHook);
end;

exports
  StartHook,
  StopHook;
 
begin
end.

bindeste so in dein prog ein:
Delphi-Quellcode:
interface
...
const
  HookDLL = 'KeyboardHook.dll';

  procedure StartHook; external HookDLL;
  procedure StopHook; external HookDLL;
rufst dann einfach beim OnCreate von deinem form
Delphi-Quellcode:
StartHook;
und beim OnDestroy
Delphi-Quellcode:
StopHook;
auf

Noobinator 12. Mai 2006 18:58

Re: bestimmte Tasten Sperren.
 
FRAGE: was ist ein hook, und wo muss ich das hinschreiben? einfach eine neue unit einbinden und das reinschreiben oder wie? ich habe davon keine Ahnung. :roll:

nat 12. Mai 2006 19:12

Re: bestimmte Tasten Sperren.
 
Datei->Neu->Weitere->DLL-Experte (so is es zumindest bei mir mit d7).
und oben haste den kompletten quellcode für die dll. einma übersetzen
und du hast ne dll die 2 funktionen exportiert: StartHook und StopHook.
wie du die beiden funktionen dann in dein prog importierst und verwendest
habe ich ja oben schon geschrieben.

was ein hook is und wozu man ihn noch so verwenden kann guckste am besten ma
unter MSDN-Library durchsuchenSetWindowsHookEx

Noobinator 12. Mai 2006 19:23

Re: bestimmte Tasten Sperren.
 
wenn ich das jetzt speichern will, speichert der das als *.dpr usw...
wie kann ich das als DLL speichern?

nat 12. Mai 2006 20:04

Re: bestimmte Tasten Sperren.
 
diese frage hätte sicher auch mit der sufu beantwortet werden können, aber nun gut...
natürlich speicherst du das als projekt-datei. dein projekt von deinem prog
speicherst du ja auch nich als exe, oder? erst nach dem kompilieren is ne
exe vorhanden. genauso bei der dll. einma kompilieren und eine dll-datei
liegt parat.

Noobinator 14. Mai 2006 19:01

Re: bestimmte Tasten Sperren.
 
thx du hast mir sehr gehofen.
Wenn noch was ist, melde ich mich.

EDIT: könntest du mir vllt noch einen Hook für ALT+TAB und STRG+ALT+ENTF schreiben?
oder am besten alles in einem.
habe versucht deinen abzuändern, aber bekomme das irgendwie nicht hin :roll:

Noobinator 15. Mai 2006 16:46

Re: bestimmte Tasten Sperren.
 
könntest du mir vllt noch einen Hook für ALT+TAB und STRG+ALT+ENTF schreiben?
oder am besten alles in einem.
habe versucht deinen abzuändern, aber bekomme das irgendwie nicht hin :roll:

mirage228 15. Mai 2006 16:50

Re: bestimmte Tasten Sperren.
 
Hi,

Ich glaube, dass sich zumindest Strg+Alt+Entf von Windows her nicht hooken lässt.

mfG
mirage228

DevilsCamp 15. Mai 2006 16:55

Re: bestimmte Tasten Sperren.
 
Der Affengriff scheint zu gehen.

Jedenfalls habe ich irgendwo einen Code dafür gesehen. Da ich den Link dazu aber zu Hause habe, kann ich ihn frühestens heute Abend posten.

Noobinator 15. Mai 2006 16:57

Re: bestimmte Tasten Sperren.
 
Zitat:

Zitat von DevilsCamp
Der Affengriff scheint zu gehen.

Jedenfalls habe ich irgendwo einen Code dafür gesehen. Da ich den Link dazu aber zu Hause habe, kann ich ihn frühestens heute Abend posten.

würde auch gehen, habe bis mittwoch zeit, also braucht ihr euch keinen Stress machen^^.

Danke schonmal für die Hilfe

nat 15. Mai 2006 19:07

Re: bestimmte Tasten Sperren.
 
ich glaube strg+alt+entf (und auch alt+tab) kann man nicht so einfach sperren.
vll hilft es dir aber ja, wenn du dein programm aus der liste im taskmanager
entfernst. mit folgendem code kannste das bewerkstelligen (habe ich nicht selber
geschrieben, sondern ma irgendwo gefunden - funzt aber).
is wieder ne dll.


Delphi-Quellcode:
library HideProcessNT;

uses
  Windows,tlhelp32,ImageHlp,SysUtils;

var
  hmap: THandle;
  hFirstMapHandle:THandle;

type
  SYSTEM_INFORMATION_CLASS = (SystemBasicInformation, SystemProcessorInformation, SystemPerformanceInformation,
    SystemTimeOfDayInformation, SystemNotImplemented1, SystemProcessesAndThreadsInformation, SystemCallCounts,
    SystemConfigurationInformation, SystemProcessorTimes, SystemGlobalFlag, SystemNotImplemented2, SystemModuleInformation,
    SystemLockInformation, SystemNotImplemented3, SystemNotImplemented4, SystemNotImplemented5,
    SystemHandleInformation, SystemObjectInformation, SystemPagefileInformation,
    SystemInstructionEmulationCounts, SystemInvalidInfoClass1, SystemCacheInformation,
    SystemPoolTagInformation, SystemProcessorStatistics, SystemDpcInformation,
    SystemNotImplemented6, SystemLoadImage, SystemUnloadImage, SystemTimeAdjustment,
    SystemNotImplemented7, SystemNotImplemented8, SystemNotImplemented9,
    SystemCrashDumpInformation, SystemExceptionInformation, SystemCrashDumpStateInformation,
    SystemKernelDebuggerInformation, SystemContextSwitchInformation, SystemRegistryQuotaInformation,
    SystemLoadAndCallImage, SystemPrioritySeparation, SystemNotImplemented10, SystemNotImplemented11,
    SystemInvalidInfoClass2, SystemInvalidInfoClass3, SystemTimeZoneInformation,
    SystemLookasideInformation, SystemSetTimeSlipEvent, SystemCreateSession, SystemDeleteSession, SystemInvalidInfoClass4,
    SystemRangeStartInformation, SystemVerifierInformation, SystemAddVerifier, SystemSessionProcessesInformation
  );
  PFARPROC = ^FARPROC;
  _IMAGE_IMPORT_DESCRIPTOR = packed record
    case Integer of
      0:(Characteristics: DWORD);
      1:(OriginalFirstThunk: DWORD; TimeDateStamp: DWORD; ForwarderChain: DWORD; Name: DWORD; FirstThunk: DWORD);
  end;
  IMAGE_IMPORT_DESCRIPTOR = _IMAGE_IMPORT_DESCRIPTOR;
  PIMAGE_IMPORT_DESCRIPTOR = ^IMAGE_IMPORT_DESCRIPTOR;

procedure RedirectIAT(pszCallerModName: Pchar; pfnCurrent: FarProc; pfnNew: FARPROC; hmodCaller: hModule);
var
  ulSize: ULONG;
  pImportDesc: PIMAGE_IMPORT_DESCRIPTOR;
  pszModName: PChar;
  pThunk: PDWORD;
  ppfn:PFARPROC;
  ffound: LongBool;
  written: DWORD;
begin
  pImportDesc:= ImageDirectoryEntryToData(Pointer(hmodCaller), TRUE,IMAGE_DIRECTORY_ENTRY_IMPORT, ulSize);
  if pImportDesc = nil then exit;
  while pImportDesc.Name<>0 do
  begin
    pszModName := PChar(hmodCaller + pImportDesc.Name);
    if (lstrcmpiA(pszModName, pszCallerModName) = 0) then break;
    Inc(pImportDesc);
  end;
  if (pImportDesc.Name = 0) then exit;
  pThunk := PDWORD(hmodCaller + pImportDesc.FirstThunk);
  while pThunk^<>0 do
  begin
    ppfn := PFARPROC(pThunk);
    fFound := (ppfn^ = pfnCurrent);
    if (fFound) then
    begin
      VirtualProtectEx(GetCurrentProcess,ppfn,4,PAGE_EXECUTE_READWRITE,written);
      WriteProcessMemory(GetCurrentProcess, ppfn, @pfnNew, sizeof(pfnNew), Written);
      exit;
    end;
    Inc(pThunk);
  end;
end;

var
  addr_NtQuerySystemInformation: Pointer;
  mypid: DWORD;
  fname: PCHAR;
  mapaddr: PDWORD;
  hideOnlyTaskMan: PBOOL;

function myNtQuerySystemInfo(SystemInformationClass: SYSTEM_INFORMATION_CLASS; SystemInformation: Pointer;
  SystemInformationLength:ULONG; ReturnLength:PULONG):LongInt; stdcall;
label lop, nextpid, exit, fillzero;
asm
  push ReturnLength
  push SystemInformationLength
  push SystemInformation
  push dword ptr SystemInformationClass
  call dword ptr [addr_NtQuerySystemInformation]
  or eax,eax
  jl exit
  cmp SystemInformationClass, SystemProcessesAndThreadsInformation
  jne exit
lop:
  mov esi, SystemInformation
nextpid:
  mov ebx, esi
  cmp dword ptr [esi],0
  je exit
  add esi, [esi]
  mov ecx, [esi+44h]
  cmp ecx, mypid
  jne nextpid
  mov edx, [esi]
  test edx, edx
  je fillzero
  add [ebx], edx
  jmp lop
fillzero:
  and [ebx], edx
  jmp lop
exit:
  mov Result, eax
end;

procedure FuncIncept;
var
  hSnapShot: THandle;
  me32: MODULEENTRY32;
begin
  addr_NtQuerySystemInformation := GetProcAddress(getModuleHandle('ntdll.dll'),'NtQuerySystemInformation');
  hSnapShot := CreateToolHelp32SnapShot(TH32CS_SNAPMODULE,GetCurrentProcessId);
  if hSnapshot = INVALID_HANDLE_VALUE then exit;
  try
    ZeroMemory(@me32,sizeof(MODULEENTRY32));
    me32.dwSize:=sizeof(MODULEENTRY32);
    Module32First(hSnapShot,me32);
    repeat
      RedirectIAT('ntdll.dll',addr_NtQuerySystemInformation,@MyNtQuerySystemInfo,me32.hModule);
    until not Module32Next(hSnapShot,me32);
  finally
    CloseHandle(hSnapShot);
  end;
end;

procedure FreeFunc;
var
  hSnapShot: THandle;
  me32: MODULEENTRY32;
begin
  addr_NtQuerySystemInformation:=GetProcAddress(getModuleHandle('ntdll.dll'),'NtQuerySystemInformation');
  hSnapShot:=CreateToolHelp32SnapShot(TH32CS_SNAPMODULE,GetCurrentProcessId);
  if hSnapshot=INVALID_HANDLE_VALUE then exit;
  try
    ZeroMemory(@me32,sizeof(MODULEENTRY32));
    me32.dwSize:=sizeof(MODULEENTRY32);
    Module32First(hSnapShot,me32);
    repeat
      RedirectIAT('ntdll.dll',@MyNtQuerySystemInfo,addr_NtQuerySystemInformation,me32.hModule);
    until not Module32Next(hSnapShot,me32);
  finally
    CloseHandle(hSnapShot);
  end;
end;


var
  HookHandle: THandle;

function CbtProc(code: integer; wparam: integer; lparam: integer):Integer; stdcall;
begin
  Result:=0;
end;

procedure AttachHook; stdcall;
begin
  HookHandle := SetWindowsHookEx(WH_CBT, @CbtProc, HInstance, 0);
end;

procedure LibraryProc(Reason: Integer);
begin
  if Reason = DLL_PROCESS_DETACH then
    if mypid > 0 then
      FreeFunc()
    else
      CloseHandle(hFirstMapHandle);
end;

function HideNtProcess(pid:DWORD):BOOL; stdcall;
var
  addrMap: PDWORD;
  ptr2: PBOOL;
  OnlyBlindTaskmgr: BOOL;
begin
  mypid:=0;
  result:=false;
  OnlyBlindTaskmgr:=False;
  hFirstMapHandle:=CreateFileMapping($FFFFFFFF,nil,PAGE_READWRITE,0,8,'NtHideFileMapping');
  if hFirstMapHandle=0 then exit;
  addrMap:=MapViewOfFile(hFirstMapHandle,FILE_MAP_WRITE,0,0,8);
  if addrMap=nil then
  begin
    CloseHandle(hFirstMapHandle);
    exit;
  end;
  addrMap^:=pid;
  ptr2:=PBOOL(DWORD(addrMap)+4);
  ptr2^:=OnlyBlindTaskmgr;
  UnmapViewOfFile(addrMap);
  AttachHook;
  result:=true;
end;

exports
  HideNtProcess;

begin
  hmap:=OpenFileMapping(FILE_MAP_READ,false,'NtHideFileMapping');
  if hmap=0 then exit;
  try
    mapaddr:=MapViewOfFile(hmap,FILE_MAP_READ,0,0,0);
    if mapaddr=nil then exit;
    mypid:=mapaddr^;
    hideOnlyTaskMan:=PBOOL(DWORD(mapaddr)+4);
    if hideOnlyTaskMan^ then
    begin
      fname:=allocMem(MAX_PATH+1);
      GetModuleFileName(GetModuleHandle(nil),fname,MAX_PATH+1);
      if not (ExtractFileName(fname)='taskmgr.exe') then exit;
    end;
    FuncIncept;
  finally
    UnmapViewOfFile(mapaddr);
    CloseHandle(Hmap);
    DLLProc:=@LibraryProc;
  end;
end.

so bindeste das ein
Delphi-Quellcode:
function HideNtProcess(pid:DWORD):BOOL; stdcall; external 'HideProcessNT.dll';
und aufrufen kannste das dann so
Delphi-Quellcode:
HideNtProcess(GetCurrentProcessId);

Noobinator 15. Mai 2006 21:18

Re: bestimmte Tasten Sperren.
 
danke für die Arbeit, aber das nützt mir nichts.. ich will nur verhindern, das man das Programm beiseiteschiebt. Sobald ich dann allerdings STRG+AL+ENTF drücke, minimiert das Fenster ja schon automatisch, und man hat es umgangen.

@DevilsCamp
schau mal bitte ob du deins wiederfindest.

DevilsCamp 15. Mai 2006 21:25

Re: bestimmte Tasten Sperren.
 
Dieser Code stammt von Enrico's Delphi Pages

Bei den Tips unter System

Delphi-Quellcode:
var
  Affengriff: Longbool;


//Taskmanager Aufruf verbieten
procedure TForm1.Button1Click(Sender: TObject);
begin
  SystemParametersInfo(97,Word(True),@Affengriff,0);
end;



//Taskmanager wieder erlauben
procedure TForm1.Button2Click(Sender: TObject);
begin
  SystemParametersInfo(97,Word(False),@Affengriff,0); //entsperrt
end;

Ich habe es nicht getestet, also keine Garantie, dass es funktioniert.

nat 15. Mai 2006 21:45

Re: bestimmte Tasten Sperren.
 
ich glaub der o.g. code is nur für win9x/me.
unter nt/2k/xp geht der nich.

Noobinator 16. Mai 2006 15:19

Re: bestimmte Tasten Sperren.
 
ok eine Frage noch.. den Rest habe ich einfach alles so gelöst:
Delphi-Quellcode:
form1.formstyle:=tstayontop
damit schiebt sich das Programm vor alle anderen, und ALT+TAB ist nutzlos^^
auch das Startmenu ist dann dank vollbild ganze einfach weg^^
einfach herrlich diese Eigenschafft :mrgreen:

Danke für die Ganze geduld und hilfe

nat 16. Mai 2006 15:58

Re: bestimmte Tasten Sperren.
 
Zitat:

Zitat von Noobinator
ok eine Frage noch..

und wo is die frage?? ;)


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:58 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz