Ozg*_*gus 9 c# pinvoke sendkeys winforms
我用c#Windows Forms制作了一个屏幕键盘.我使用Sendkeys.Send()函数发送击键.除了这封信之外的所有信件都i很好.当我i打开Microsoft Word时按下键盘上的字母时,它会发送Ctrl+ Alt+ I并打开打印对话框.在Notepad ++中也是如此.但是当我尝试输入记事本时,它工作正常.
在我的代码中,我发送键,SendKeys.Send(value);其中value是按下按钮的文本.我使用以下代码获取文本:
string s = ((Button)sender).Text;
Run Code Online (Sandbox Code Playgroud)
关于它为什么不能正常工作的任何评论?
编辑:我只用一个按钮创建了一个新的Windows窗体项目,整个代码如下.还是行不通.任何想法将不胜感激.
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
SendKeys.Send("i");
}
// Prevent form being focused
const int WS_EX_NOACTIVATE = 0x8000000;
protected override CreateParams CreateParams
{
get
{
CreateParams ret = base.CreateParams;
ret.ExStyle |= WS_EX_NOACTIVATE;
return ret;
}
}
}
Run Code Online (Sandbox Code Playgroud)
被覆盖的功能是防止表单被聚焦.这样我就可以将键击发送到具有焦点的其他应用程序.
小智 1
两种选择:
1- 模拟按键,请参阅http://msdn2.microsoft.com/en-us/library/system.windows.forms.sendkeys(VS.71).aspx
样本:
public static void ManagedSendKeys(string keys)
{
SendKeys.SendWait(keys);
SendKeys.Flush();
}
Run Code Online (Sandbox Code Playgroud)
2- 向窗口发送一个按键,按住该按钮 x 秒
[DllImport("user32.dll")]
public static extern void keybd_event(byte bVk, byte bScan, uint dwFlags, UIntPtr dwExtraInfo);
public static void KeyboardEvent(Keys key, IntPtr windowHandler, int delay)
{
const int KEYEVENTF_EXTENDEDKEY = 0x1;
const int KEYEVENTF_KEYUP = 0x2;
keybd_event((byte)key, 0x45, KEYEVENTF_EXTENDEDKEY, (UIntPtr)0);
Thread.Sleep(delay);
keybd_event((byte)key, 0x45, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, (UIntPtr)0);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4837 次 |
| 最近记录: |