Dakle kako poslati SHIFT, CTRL ili ALT aplikaciji koja radi u pozadini koristreci PostMessage() funkciju.
Poslije obimnijegog guglanja nasao sam da bi ovo trebalo da radi:
public partial class Form1 : Form
{
[DllImport("user32.dll", SetLastError = true)]
static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string lpszClass, string lpszWindow);
[DllImport("user32.dll", EntryPoint="PostMessage", CallingConvention=CallingConvention.Winapi)]
public static extern bool PostMessage(IntPtr hWnd, uint msg, uint wParam, uint lParam);
[DllImport("user32.dll")]
static extern byte VkKeyScan(char ch);
const uint WM_KEYDOWN = 0x100;
const uint WM_KEYUP = 0x101;
const uint VK_CONTROL = 0x11; //virtual key code za Ctrl
//provjerava da li je proces startovan
private bool IsProcessStarted(string processName)
{
foreach (Process clsProcess in Process.GetProcesses())
{
if (clsProcess.ProcessName.Contains(processName))
{
return true;
}
}
return false;
}
private void button1_Click(object sender, EventArgs e)
{
if (IsProcessStarted("notepad") == true)
{
try
{
Process[] procs = Process.GetProcessesByName("notepad");
foreach (Process proc in procs)
{
if (proc.MainWindowTitle == "Untitled - Notepad")
{
IntPtr hWnd = FindWindowEx(proc.MainWindowHandle, IntPtr.Zero, "edit", null);
PostMessage(hWnd, WM_KEYDOWN, VK_CONTROL, 0); //pritiska Ctrl
PostMessage(hWnd, WM_KEYDOWN, VkKeyScan('S'), 0); //pritiska 'S'
PostMessage(hWnd, WM_KEYUP, VkKeyScan('S'), 0); //otpusta Ctrl
PostMessage(hWnd, WM_KEYUP, VK_CONTROL, 0); //otpusta 'S'
}
}
}
catch
{
MessageBox.Show("Greska!", "Upozorenje!", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
else
{
MessageBox.Show("Notepad nije starovan", "Upozorenje!", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
}
}
}
međutim ni ovo ne radi, a vidio sam da nisam jedini kome ovo ne radi. Doduše, svakim klikom dvaput upisuje 's'. Jel ima neko ideju kako da ovo proradi? :) Samo da napomenem, potrebno mi je da ovo radi sa PostMessage jer na taj nacin mogu poslati sekvencu tastera i procesu u pozadini.
Neko? :)