本紀錄為如何由C#進行其他應用程式存取
透過Visual studio 提供工具 Spy++ 抓取應用程式類別及title
在透過user32.dll進行存取
Spy++是Visual studio提供的工具
目錄位置位於Visual studio安裝下例如
C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\Tools\spyxx.exe
利用搜尋工具,點選後拖曳滑鼠找到你要的目標視窗
移動滑鼠到Chrome時會顯示如下
找到目標應用程式視窗
呼叫user32.dll FindWindows
傳入部分的lpClassName就是Spyxx抓到的類別
lpWindowName就是標題
DllImport("user32.dll", CharSet = CharSet.Auto)]
public static extern IntPtr FindWindow([MarshalAs(UnmanagedType.LPTStr)] string lpClassName, [MarshalAs(UnmanagedType.LPTStr)] string lpWindowName);
IntPtr Handle =
FindWindow("Chrome_WidgetWin_1",
"GOOGLE - Google 搜尋 - Google Chrome");
其中Chrome_WidgetWin_1是Chrome的類別
“GOOGLE – Google 搜尋 – Google Chrome”是現在分頁的名稱
判斷是否正確抓取視窗
if (Handle == IntPtr.Zero)
{
MessageBox.Show("Handle is not running.");
return;
}
將應用程式帶到前景
[DllImport("USER32.DLL")]
public static extern bool SetForegroundWindow(IntPtr hWnd);
呼叫SetForegroundWindow來將應用程式帶到前景
SetForegroundWindow(Handle);
送出鍵盤資訊
記得呼叫user32.dll
[DllImport("user32.dll", CharSet = CharSet.Auto)]
static extern int SendMessage(IntPtr hwnd, int wMsg, int wParam, uint lParam);
呼叫函數送出
SendKeys.SendWait("{RIGHT}");
SendKeys.SendWait("111");
SendKeys.SendWait("*");
SendKeys.SendWait("11");
SendKeys.SendWait("=");
Key list 清單如下
https://docs.microsoft.com/zh-tw/dotnet/api/system.windows.forms.sendkeys.send?view=netframework-4.8
參考連結
https://xiang1023.blogspot.com/2017/11/c_6.html
http://mirlab.org/jang/books/wsh/sendKeys.asp?title=24-10%20%B6%C7%B0e%C1%E4%BDL%A8%C6%A5%F3