【发布时间】:2019-07-15 12:31:11
【问题描述】:
我想在特定应用程序的 Windows 平台上阻止打印功能 (CTRL + P)。我正在使用键盘钩子来做这件事。我能够检测到 CTRL + P 但我无法阻止它。在 CTRL + P 的情况下,我将从钩子程序返回,但应用程序仍会收到此消息并处理打印。
LRESULT __declspec(dllexport)__stdcall CALLBACK KeyboardProc(
int nCode,
WPARAM wParam,
LPARAM lParam)
{
FILE* f1;
static WPARAM wPrevParam;
if (((DWORD)lParam & 0x40000000) && (HC_ACTION == nCode))
{
if ((wParam == VK_SPACE) || (wParam == VK_RETURN) || (wParam == VK_CONTROL) || (wParam >= 0x2f) && (wParam <= 0x100))
{
char ch;
f1 = fopen("d:\\report.txt", "a+");
if (wParam == VK_CONTROL)
{
if (wPrevParam == 0x50)// 0x50 = P
{
const char* text = "CTRL-P detected.";
fwrite(text, strlen(text), 1, f1);
fclose(f1);
wParam = 0;
lParam = 0;
return 1;
}
const char *text = "CTRL";
fwrite(text, strlen(text), 1, f1);
fprintf(f1, "%02X\n", (unsigned char)wParam);
}
else
{
wPrevParam = wParam;
}
fclose(f1);
}
}
LRESULT RetVal = CallNextHookEx(hkb, nCode, wParam, lParam);
return RetVal;
}
【问题讨论】:
-
这真的感觉像是问题的错误解决方案,不管问题实际上是什么!
-
如果您不希望人们从他们的计算机上打印,请不要让他们的应用程序在那里运行。因为无论你做什么,他们都可以撤消。在此过程中,您会惹恼您的客户。因为你猜怎么着?如果它显示在他们的屏幕上,他们可以总是打印它。
-
我已回滚您的编辑。如果您想添加您找到的解决方案,请以答案的形式将其写下来,并将其张贴在下面用于此目的的空间中。请参阅Can I answer my own question? 了解更多信息。将解决方案编辑到问题本身是不合适的。
标签: c winapi dll-injection