我正在尝试编写一个程序,它将获取一行数据并将其传递到另一个窗口/进程.
这是我到目前为止的代码,但我还没有弄清楚如何将键盘命令发送到OUTLOOK进程.
我希望能够使用Tab命令/键和Enter命令/键.
这是我到目前为止所尝试的
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Threading;
using System.Runtime.InteropServices;
using System.Diagnostics;
using System.Windows.Forms;
namespace Config
{
class Program
{
[STAThread]
static void Main(string[] args)
{
System.Threading.Thread.Sleep(30);//300000
TextReader tr = new StreamReader("config.txt");
Clipboard.SetText(tr.ReadLine());
tr.Close();
var proc = Process.GetProcessesByName("OUTLOOK").FirstOrDefault();
if (proc != null && proc.MainWindowHandle != IntPtr.Zero)
{
SetForegroundWindow(proc.MainWindowHandle);
//SendKeys.Send("{ENTER}");
// Clipboard.GetText();
}
}
[DllImport("user32")]
private static extern bool SetForegroundWindow(IntPtr hwnd);
}
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试提高WPF业务应用程序的响应能力,以便当用户在服务器响应之后等待新屏幕出现的"屏幕之间"屏幕时,他们仍然可以输入数据.我能够对事件进行排队(在后台面板上使用PreviewKeyDown事件处理程序),但是当我加载时,我很难将新事件中的事件抛出.特别是新面板上的TextBoxes没有拾取文本.我已尝试提升相同的事件(在捕获它们时将Handled设置为true,再次提升时将Handled设置为false)创建新的KeyDown事件,新的PreviewKeyDown事件,执行ProcessInput,在面板上执行RaiseEvent,将焦点设置在右侧TextBox和TextBox上的RaiseEvent做了很多事情.
看起来应该很简单,但我无法弄明白.
以下是我尝试过的一些事情.考虑一个名为EventQ的KeyEventArgs队列:
这是一件不起作用的事情:
while (EventQ.Count > 0)
{
KeyEventArgs kea = EventQ.Dequeue();
tbOne.Focus(); // tbOne is a text box
kea.Handled = false;
this.RaiseEvent(kea);
}
Run Code Online (Sandbox Code Playgroud)
这是另一个:
while (EventQ.Count > 0)
{
KeyEventArgs kea = EventQ.Dequeue();
tbOne.Focus(); // tbOne is a text box
var key = kea.Key; // Key to send
var routedEvent = Keyboard.PreviewKeyDownEvent; // Event to send
KeyEventArgs keanew = new KeyEventArgs(
Keyboard.PrimaryDevice,
PresentationSource.FromVisual(this),
0,
key) { RoutedEvent = routedEvent, Handled = false };
InputManager.Current.ProcessInput(keanew);
}
Run Code Online (Sandbox Code Playgroud)
而另一个: …
我正在从Windows应用程序启动一个进程.当我按下按钮时,我想F4在该过程中模拟按键.我怎样才能做到这一点?
[稍后编辑]我不想F4在我的表单中模拟按键,但在此过程中我开始了.
我需要在第三方应用程序中模拟按键.假设我有一个需要向Calculator应用程序发送"8"的C#应用程序.我不能使用.Net的SendKeys或win32 api的keybd_event,因为它们都要求窗口是最活跃的窗口,这在我的情况下不是这种情况.
这样我就可以调用sendMessage和postMessage.我在过去的三个小时里一直试图获得一些结果,但现在我完全没有希望了.
我有以下内容:
[DllImport("user32.dll")]
public static extern int FindWindow(string lpClassName,string lpWindowName);
[DllImport("user32.dll")]
public static extern int SendMessage(int hWnd, uint Msg, int wParam, int lParam);
[return: MarshalAs(UnmanagedType.Bool)]
[DllImport("user32.dll", SetLastError = true)]
public static extern bool PostMessage(int hWnd, uint Msg, int wParam, int lParam);
private void button1_Click(object sender, EventArgs e)
{
const int WM_KEYDOWN = 0x100;
const int WM_SYSCOMMAND = 0x018;
const int SC_CLOSE = 0x053;
int WindowToFind = FindWindow(null,"Calculator");
int result = SendMessage(WindowToFind, WM_SYSCOMMAND, SC_CLOSE, 0);
Boolean result2 = PostMessage(WindowToFind, …Run Code Online (Sandbox Code Playgroud) 我正在使用WPF,我导入了System.Windows.Form引用.这是我的代码:
Process[] process = Process.GetProcessesByName("wmplayer");
SetForegroundWindow(process[0].MainWindowHandle);
Thread.Sleep(200);
System.Windows.Forms.SendKeys.Send("^p");
Run Code Online (Sandbox Code Playgroud)
Windows Media Player执行聚焦,但未收到任何击键.为什么?
我可以使用PostMessageapi 发送任何Windows应用程序键击.但是我无法通过使用将关键笔划发送到游戏窗口PostMessage.
任何人都知道使用直接输入功能从C#向游戏发送密钥.
我对Unity中的脚本非常陌生,我正在尝试创建一个按钮,一旦点击它就需要模拟按下的'F'键(拿起一个项目)
这是我目前的代码,在写这篇文章之前,我已经看过整个团结论坛,但找不到任何有用的东西.
码:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.Collections;
public class button : MonoBehaviour {
public void ButtonToClick(int clickToButton)
{
SendKeys.Send("F");
}
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 sendkeys,但将其发送到非重点程序。例如,我想使用 sendkeys 到记事本 - 无标题,而不是聚焦。对不起,如果不清楚,我会详细说明。我目前的代码是这样的:
string txt = Regex.Replace(richTextBox3.Text, "[+^%~()]", "{$0}");
System.Threading.Thread.Sleep(1000);
SendKeys.Send(txt + "{ENTER}");
Run Code Online (Sandbox Code Playgroud)
如果我使用 SendMessage,有人愿意向我展示我应该做什么的例子吗?我没有找到任何我在网上找到的对我的问题非常有用的东西。
下面的sendkeys代码适用于记事本,但它不适用于计算器.问题是什么?(与我发送的.NET程序中的Sendkeys问题相比,这是另一个问题)
[DllImport("user32.dll", CharSet = CharSet.Unicode)]
public static extern IntPtr FindWindow(string lpClassName,string lpWindowName);
[DllImport("User32")]
public static extern bool SetForegroundWindow(IntPtr hWnd);
private void button1_Click(object sender, EventArgs e)
{
IntPtr calculatorHandle = FindWindow("SciCalc", "Calculator");
//IntPtr calculatorHandle = FindWindow("Notepad", "Untitled - Notepad");
if (calculatorHandle == IntPtr.Zero)
{
MessageBox.Show("Calculator is not running.");
return;
}
SetForegroundWindow(calculatorHandle);
System.Threading.Thread.Sleep(1000);
SendKeys.SendWait("111*11=");
//SendKeys.SendWait("{ENTER}");
//cnt++;
SendKeys.Flush();
}
Run Code Online (Sandbox Code Playgroud) 所以我想让我的程序在计时器停止后自动模拟按键。我已经有了计时器和每个设置,我只需要以某种方式模拟按键。在应用程序的 Web 浏览器上弹出下载消息后,我只希望程序模拟为“ESC”键按下以退出下载消息弹出窗口。我将如何模拟按键?
我正在寻找一个代码,可以每 50 秒按一次键盘上的任意键,假设该键是数字 5 键。
只要确保它不会只输入 5,我希望它自己按下该键。
编辑:我只是想让它按任何键盘键,仅此而已。就像它的转变或大写锁定或其他什么