当前位置:编程学习 > C#/ASP.NET >>

C#模拟键盘操作,向另一个窗体输入值

我公司使用U8,由于各种原因BOM未使用起来,导致采购部不得不手工录入采购单,这些采购单本身有Excel电子格式,如何将这些Excel自动导入到U8呢?考虑到开发接口不可能,那么就另辟蹊径,能不能模拟手工录入呢?

很幸运,这种思路可行。

1、首先向另一个程序写入值

a.确保当前程序窗体不能获得焦点


[css] 
private const int WS_EX_TOOLWINDOW = 0x00000080; 
private const int WS_EX_NOACTIVATE = 0x08000000; 
 
protected override CreateParams CreateParams 

    get 
    { 
        CreateParams cp = base.CreateParams; 
        cp.ExStyle |= (WS_EX_NOACTIVATE | WS_EX_TOOLWINDOW); 
        cp.Parent = IntPtr.Zero; // Keep this line only if you used UserControl 
        return cp; 
    } 

b.获得活动单元格所在窗体句柄

[csharp] 
[DllImport("user32.dll")] 
[return: MarshalAs(UnmanagedType.Bool)] 
public static extern bool GetGUIThreadInfo(uint idThread, ref GUITHREADINFO lpgui); 
[DllImport("user32.dll")] 
public static extern IntPtr GetForegroundWindow(); 
[DllImport("user32.dll", SetLastError = true)] 
static extern uint GetWindowThreadProcessId(IntPtr hWnd, out uint lpdwProcessId); 
 
                IntPtr hWnd = GetForegroundWindow(); 
                uint processId; 
                uint threadid = GetWindowThreadProcessId(hWnd, out processId); 
                GUITHREADINFO lpgui = new GUITHREADINFO(); 
                lpgui.cbSize = Marshal.SizeOf(lpgui); 

c.模拟键盘输入值

[csharp] view plaincopy
[DllImport("user32.dll")] 
static extern void keybd_event(byte bVk, byte bScan, uint dwFlags, int dwExtraInfo); 
 
                keybd_event(keycode["LEFT"], 0, 0, 0); 

2、循环读取Excel,写入值
本例中,我将键值写入private Dictionary<string, byte> keycode;这样就可以方便转换。


[csharp] 
keycode = new Dictionary<string, byte>(); 
keycode.Add("A", 65); 
keycode.Add("B", 66); 
keycode.Add("C", 67); 
keycode.Add("D", 68); 
keycode.Add("E", 69); 
keycode.Add("F", 70); 
keycode.Add("G", 71); 
keycode.Add("H", 72); 
keycode.Add("I", 73); 
keycode.Add("J", 74); 
keycode.Add("K", 75); 
keycode.Add("L", 76); 
keycode.Add("M", 77); 
keycode.Add("N", 78); 
keycode.Add("O", 79); 
keycode.Add("P", 80); 
keycode.Add("Q", 81); 
keycode.Add("R", 82); 
keycode.Add("S", 83); 
keycode.Add("T", 84); 
keycode.Add("U", 85); 
keycode.Add("V", 86); 
keycode.Add("W", 87); 
keycode.Add("X", 88); 
keycode.Add("Y", 89); 
keycode.Add("Z", 90); 
keycode.Add("0", 48); 
keycode.Add("1", 49); 
keycode.Add("2", 50); 
keycode.Add("3", 51); 
keycode.Add("4", 52); 
keycode.Add("5", 53); 
keycode.Add("6", 54); 
keycode.Add("7", 55); 
keycode.Add("8", 56); 
keycode.Add("9", 57); 
keycode.Add(".", 0x6E); 
keycode.Add("LEFT", 0x25); 
keycode.Add("UP", 0x26); 
keycode.Add("RIGHT", 0x27); 
keycode.Add("DOWN", 0x28); 
keycode.Add("-", 0x6D); 

效果图


 

补充:软件开发 , C# ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,