FlyBird
15.04.2010, 10:33
У меня возникла проблема.
Не получается отправить в окно сообщение о нажатой кнопке F1
Капаюсь уже в таблицах ассема, в лекциях с инста, но разве в них что-то найдешь после 2-х лет перекладывания с места на место.
/
//**********WinAPI функции*********
[DllImport("user32.dll", EntryPoint = "FindWindow")]
private static extern IntPtr FindWindow(string _ClassName, string _WindowName);
[DllImport("user32.dll", EntryPoint = "FindWindowEx")]
private static extern IntPtr FindWindowEx(IntPtr hwndPrnt, IntPtr hwndChildAfter, string _ClassName, string _WindowName);
[DllImport("user32.dll", CharSet = CharSet.Auto)]
public static extern int SendMessage(IntPtr hwnd, int wMsg, IntPtr wParam, IntPtr lParam);
[DllImport("user32.dll", CharSet = CharSet.Unicode)]
public static extern int MessageBox(IntPtr hWnd, String text, String caption, uint type);
[DllImport("user32.dll", CharSet = CharSet.Unicode)]
public static extern int DestroyWindow(IntPtr hWnd);
//*********/WinAPI функции*********
**********WinAPI константы*********
const int BM_SETSTATE = 243;
const int WM_LBUTTONDOWN = 513;
const int WM_LBUTTONUP = 514;
const int WM_KEYDOWN = 256;
const int WM_CHAR = 258;
const int WM_KEYUP = 257;
const int WM_SETFOCUS = 7;
const int WM_SYSCOMMAND = 274;
const int SC_MINIMIZE = 32;
const int WM_CLOSE = 0x0010;
//*********/WinAPI константы*********
...
...
...
private void SentMes_Click(object sender, EventArgs e)
{
IntPtr hWnd = FindWindow(null, comboBox1.SelectedItem.ToString());
IntPtr t1;
if (hWnd == IntPtr.Zero)
{
MessageBox(new IntPtr(0), "Not found main", "Error", 0);
return;
}
retValue = SendMessage(hWnd, WM_SETFOCUS, nul, nul);
retValue = SendMessage(hWnd, WM_KEYDOWN, t1, nul);
retValue = SendMessage(hWnd, WM_KEYUP, t1, nul);
}
Где-то тут зарылся косяк.
В тестируется все в блокноте. Сообщения о нажатых символах идут. Но если отправить код 112, то напишется буква. Помню, что у системных клавишь 2 кода, но вот хоть убейте, не могу вспомнить второй и как его отправить.
Может кто чем поможет?
Не получается отправить в окно сообщение о нажатой кнопке F1
Капаюсь уже в таблицах ассема, в лекциях с инста, но разве в них что-то найдешь после 2-х лет перекладывания с места на место.
/
//**********WinAPI функции*********
[DllImport("user32.dll", EntryPoint = "FindWindow")]
private static extern IntPtr FindWindow(string _ClassName, string _WindowName);
[DllImport("user32.dll", EntryPoint = "FindWindowEx")]
private static extern IntPtr FindWindowEx(IntPtr hwndPrnt, IntPtr hwndChildAfter, string _ClassName, string _WindowName);
[DllImport("user32.dll", CharSet = CharSet.Auto)]
public static extern int SendMessage(IntPtr hwnd, int wMsg, IntPtr wParam, IntPtr lParam);
[DllImport("user32.dll", CharSet = CharSet.Unicode)]
public static extern int MessageBox(IntPtr hWnd, String text, String caption, uint type);
[DllImport("user32.dll", CharSet = CharSet.Unicode)]
public static extern int DestroyWindow(IntPtr hWnd);
//*********/WinAPI функции*********
**********WinAPI константы*********
const int BM_SETSTATE = 243;
const int WM_LBUTTONDOWN = 513;
const int WM_LBUTTONUP = 514;
const int WM_KEYDOWN = 256;
const int WM_CHAR = 258;
const int WM_KEYUP = 257;
const int WM_SETFOCUS = 7;
const int WM_SYSCOMMAND = 274;
const int SC_MINIMIZE = 32;
const int WM_CLOSE = 0x0010;
//*********/WinAPI константы*********
...
...
...
private void SentMes_Click(object sender, EventArgs e)
{
IntPtr hWnd = FindWindow(null, comboBox1.SelectedItem.ToString());
IntPtr t1;
if (hWnd == IntPtr.Zero)
{
MessageBox(new IntPtr(0), "Not found main", "Error", 0);
return;
}
retValue = SendMessage(hWnd, WM_SETFOCUS, nul, nul);
retValue = SendMessage(hWnd, WM_KEYDOWN, t1, nul);
retValue = SendMessage(hWnd, WM_KEYUP, t1, nul);
}
Где-то тут зарылся косяк.
В тестируется все в блокноте. Сообщения о нажатых символах идут. Но если отправить код 112, то напишется буква. Помню, что у системных клавишь 2 кода, но вот хоть убейте, не могу вспомнить второй и как его отправить.
Может кто чем поможет?