![]() |
Keyhook und Vista...
Hallo Leute...
Kleines Problem.. Folgendes.. Ich habe einen Keyhook den ich systemweit setzte (funktionierte unter XP wunderbar) warte auf ein bestimmtes wort, was irgendwo eingeben werden kann (z.B.: unter Ausführen) dann kommt das Fenster in den Vordergrund.. Soweit verstanden? jetzt kommt mein GELIEBTES VISTA!!! :evil: Ich starte die Exe datei im "normalen" Modus... also nix Admin.. alles Funktioniert!!! Jetzt kommt es!! Wenn ich die exe ALS ADMIN STARTE, dann kann ich nur die Keys abfangen die ich innerhalb meines Fensters schreibe... NICHT SYSTEMWEIT... Hier der quellcode der dll.. ich denke denn werdet ihr schon mal gesehen haben...
Delphi-Quellcode:
Danke euch schonmal im Voraus..
library HookLib;
uses Windows, Messages, SysUtils; type PHookRec = ^THookRec; THookRec = record AppHnd: Integer; MemoHnd: Integer; end; var Hooked: Boolean; hKeyHook, hMemo, hMemFile, hApp: HWND; PHookRec1: PHookRec; function KeyHookFunc(Code, VirtualKey, KeyStroke: Integer): LRESULT; stdcall; var KeyState1: TKeyBoardState; AryChar: array[0..1] of Char; Count: Integer; begin Result := 0; if Code = HC_NOREMOVE then Exit; Result := CallNextHookEx(hKeyHook, Code, VirtualKey, KeyStroke); if Code < 0 then Exit; if Code = HC_ACTION then begin if ((KeyStroke and (1 shl 30)) <> 0) then if not IsWindow(hMemo) then begin hMemFile := OpenFileMapping(FILE_MAP_WRITE, False, 'Global7v9k'); PHookRec1 := MapViewOfFile(hMemFile, FILE_MAP_WRITE, 0, 0, 0); if PHookRec1 <> nil then begin hMemo := PHookRec1.MemoHnd; hApp := PHookRec1.AppHnd; end; end; if ((KeyStroke and (1 shl 30)) <> 0) then begin GetKeyboardState(KeyState1); Count := ToAscii(VirtualKey, KeyStroke, KeyState1, AryChar, 0); if Count = 1 then begin SendMessage(hMemo, WM_CHAR, Ord(AryChar[0]), 0); PostMessage(hApp, WM_USER + 1678, Ord(AryChar[0]), 0); end; end; end; end; function StartHook(MemoHandle, AppHandle: HWND): Byte; export; begin Result := 0; if Hooked then begin Result := 1; Exit; end; if not IsWindow(MemoHandle) then begin Result := 4; Exit; end; hKeyHook := SetWindowsHookEx(WH_KEYBOARD, KeyHookFunc, hInstance, 0); if hKeyHook > 0 then begin hMemFile := CreateFileMapping($FFFFFFFF, // $FFFFFFFF gets a page memory file nil, // no security attributes PAGE_READWRITE, // read/write access 0, // size: high 32-bits SizeOf(THookRec), // size: low 32-bits //SizeOf(Integer), 'Global7v9k'); // name of map object PHookRec1 := MapViewOfFile(hMemFile, FILE_MAP_WRITE, 0, 0, 0); hMemo := MemoHandle; PHookRec1.MemoHnd := MemoHandle; hApp := AppHandle; PHookRec1.AppHnd := AppHandle; {set the Memo and App handles to the mapped file} Hooked := True; end else Result := 2; end; function StopHook: Boolean; export; begin if PHookRec1 <> nil then begin UnmapViewOfFile(PHookRec1); CloseHandle(hMemFile); PHookRec1 := nil; end; if Hooked then Result := UnhookWindowsHookEx(hKeyHook) else Result := True; Hooked := False; end; procedure EntryProc(dwReason: DWORD); begin if (dwReason = Dll_Process_Detach) then begin if PHookRec1 <> nil then begin UnmapViewOfFile(PHookRec1); CloseHandle(hMemFile); end; UnhookWindowsHookEx(hKeyHook); end; end; exports StartHook, StopHook; begin PHookRec1 := nil; Hooked := False; hKeyHook := 0; hMemo := 0; DLLProc := @EntryProc; EntryProc(Dll_Process_Attach); end. Euer Moshi |
Re: Keyhook und Vista...
Zitat:
|
Re: Keyhook und Vista...
Jetzt mal im ernst, wenn es doch umgekehrt nicht funktionieren würde, dann wäre das ja logisch, aber als Admin ausgeführte exe nicht - das eröffnet doch viren und anderen zeugs doch tür und tor, wenn ich mit einer normal ausgeführten exe systemweit die Tastatur auslesen kann und als Admin-exe nicht!!!
Habe sogar der dll, die ich nutze, ein vista manifest gegeben.. aber PUSTEKUCHEN... :pale: |
Re: Keyhook und Vista...
Melde dich mal als Admin an und probiere es dann noch mal.
Aber das ist schon richtig. Du kannst unter Vista nicht mehr auf Prozesse zugreifen, die in einem anderen Benutzerkontext laufen. |
Re: Keyhook und Vista...
Zitat:
Aber es könnte auch sein das dieser Teil der Abschottung der Eingabe (primär wegen DRM) wieder aus Vista wegen "Wir schaffen es nicht bis 2010 und den Code kann keiner verstehen" gestrichen wurde :gruebel: |
Re: Keyhook und Vista...
Ich bin als admin user angemeldet... Also nochmal..
Ich klick zwei mal auf meine EXE... Dann klapt es mit dem Hook systemweit.. Ich klicke rechts auf die EXE sage "Als Administrator starten" und siehe da nix mehr systemweit... Das problem an der ganzen sache ist ja, das mein Programm als Adminausgeführt laufen muss.. sonst kann es gewisse einträge in der Registry und dateizugriffe nicht machen.. |
Re: Keyhook und Vista...
Zitat:
Wenn Du als Admin angemeldet bist, kannst Du auf das ganze System zugreifen. Ist ja klar. Als Benutzer angemeldet und das Programm mit "Run as Admin" ausgeführt, ist das anderst. Dann gibt es zwei getrennte Benutzerkontexte. Und der "Run as Admin"-Prozess kann eben nur auf seinen gekapselten Kontext zugreifen. Also nicht systemweit. |
Re: Keyhook und Vista...
Das klingt ja schonmal logisch.. nur leider ist der User voll-Admin, also ist das ja wiederum unlogisch oder muss ich da bei vista noch irgendwas lustiges beachten.. Mittlerweile habe ich keine lust mehr, für Vista was zu entwickeln... das ist ja wie mit nem Trabi übern Acker fahren...
|
Re: Keyhook und Vista...
Zitat:
|
Re: Keyhook und Vista...
Zitat:
Es existieren durch das "Run as" zwei Benutzerkontexte. Und keiner der beiden Kontexte kann auf den anderen zugreifen. Zitat:
Ist eher, als ob man mit einem aktuellen übertechnologosierten Auto einen HotWeel-Start hinlegen möchte. Das geht auch nicht, weil die Elektronik das Durchdrehen der Räder verhindert. Man kann auch nicht auf einer verschneiten Strasse eine Schlitterfahrt machen wegen der Elektronik. Das bringt die Modernisierung halt so mit sich. :-( |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:01 Uhr. |
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